Apache Griffin 0.6.0 配置参数详解

详解 Apache Griffin 0.6.0 官方 all-in-one 镜像的配置体系:application-docker.properties 全量参数、容器内生效配置与 HOSTNAME 替换链、依赖组件矩阵与端口映射、DQ 任务调度参数与时区陷阱、JVM 参数与日志排查,全部实测采集

Apache GriffinApacheGriffin大数据Spark数据质量配置详解参数调优2026/10/15

Apache Griffin 0.6.0 配置参数详解

本文基于 apachegriffin/griffin_spark2:0.3.0 官方 all-in-one 镜像实测(内含 Griffin service,自报版本 0.2.0,service.jar 文件日期 2018-09-06;0.6.0 官方 compose 并未升级镜像)。标注"实测"的内容均为容器内/宿主机真实采集,标注"参考"的内容来自 0.6.0 官方仓库源码。

一、service 配置文件的生成链

all-in-one 镜像内 service 的配置不是直接放置,而是模板 + 启动时替换:

/root/service/application.properties.template      # 模板(源码 service/src/main/resources/application-docker.properties)
        │  bootstrap 脚本把 ${HOSTNAME} 等占位符替换为容器实际值
        ▼
/root/service/config/application.properties        # 实际生效配置
/root/service/service.jar                          # 150,278,077 字节,2018-09-06
/root/service/service.log                          # 运行日志

启动进程(实测 ps aux):

java -jar -Xmx1500m -Xms1500m service.jar

改配置的正确姿势:修改生效文件 /root/service/config/application.properties 后重启容器(docker restart griffin)。直接改模板不重启不生效。

二、application-docker.properties 全量参数解析

0.6.0 官方模板(git tag griffin-0.6.0,service/src/main/resources/application-docker.properties 节选原文):

spring.datasource.url = jdbc:postgresql://10.148.215.23:35432/quartz?autoReconnect=true&useSSL=false
spring.datasource.username = griffin
spring.datasource.password = 123456
spring.datasource.driver-class-name = org.postgresql.Driver
hive.metastore.uris = thrift://10.148.215.23:39083
kafka.schema.registry.url = http://localhost:8081
elasticsearch.host = 10.148.215.23
elasticsearch.port = 39200
elasticsearch.scheme = http
livy.uri=http://10.148.215.23:38998/batches
yarn.uri=http://10.148.215.23:38088
fs.defaultFS =

逐参数说明:

参数作用实测注意点
spring.datasource.urlQuartz 调度元数据存储(PostgreSQL quartz 库)compose 网络下 IP 占位符会被替换为宿主映射地址;凭证 griffin/123456
spring.datasource.username/passwordPG 凭证容器内 PG 9.3 预置同名库与用户
hive.metastore.urisHive 元数据服务(thrift 9083)metadata API(/api/v1/metadata/hive/*)的来源
kafka.schema.registry.urlSchema Registry(streaming 场景)batch 场景不用;默认 localhost:8081 未部署时仅告警不致命
elasticsearch.host/port/scheme指标落 ES5.5.2,http 39200
livy.uriSpark 批任务提交入口(/batches)实测提交后返回 sessionId/appId
yarn.uriYARN RM Web API(8088)health/instance 状态跟踪
fs.defaultFSHDFS 默认文件系统模板留空,bootstrap 填充为 hdfs://griffin:9000(实测生效值)

实测生效配置中的关键行(容器内 /root/service/config/application.properties):

fs.defaultFS = hdfs://griffin:9000

service 日志佐证:

Setting fs.defaultFS:hdfs://griffin:9000

三、依赖组件版本矩阵(实测)

组件版本端口(容器内)用途
PostgreSQL9.35432Quartz 调度元数据(quartz 库)
MySQL5.x3306预置(部分示例数据用)
Hadoop HDFS2.6.59000/50070数据湖与 demo 数据
Sparkstandalone + Livy7077/8081/8082计算引擎(livy 提交 yarn-cluster)
Livycom.cloudera.livy(旧包名)8998REST→Spark 网关
YARNHadoop 2.6.5 自带8088/8042资源调度
Elasticsearch5.5.2(apachegriffin/elasticsearch:latest)9200/9300指标存储(独立容器)
Hive metastorethrift9083元数据
Kafka0.8(streaming compose 才有)9092streaming 数据源
ZooKeeper3.5(streaming compose 才有)2181Kafka 依赖

四、端口映射矩阵(实测 compose)

宿主机容器用途
380808080griffin service(REST API + Angular UI 同端口)
39200 / 393009200 / 9300elasticsearch
389988998livy
380888088yarn RM web ui
380428042yarn NM web ui
390839083hive metastore thrift
333063306mysql
354325432postgresql
321222122ssh
streaming 版另加:39092→9092(kafka)、32181→2181(zk)

五、DQ 任务调度参数(POST /api/v1/jobs 请求体)

字段实测值说明
measure.id1关联的度量定义
job.name / job.typeaccuracy_job_exp / batchbatch 或 streaming
cron.expression0 0/2 * * * ?Quartz 6 段 cron,实测每 2 分钟触发
cron.time.zoneGMT+8:00调度时区
predicate.config.checkdonefile.schedule{"interval":"1m","repeat":2}数据就绪 predicate 检查节奏:每 1 分钟查一次、最多 2 次
data.segments[{"begin":"-1h","length":"1h"}]数据时间窗

Measure 侧 connector 关键字段(实测修复后值):

{"connector.type":"hive","data.unit":"1day",
 "data.time.zone":"UTC(WET,GMT)",
 "predicates":[{"type":"file.exist","config":{"root.path":"hdfs://griffin:9000/griffin/data/batch/demo_src","path.params":"_DONE"}}]}

六、时区三件套陷阱(实测)

  1. job 调度时区 cron.time.zone=GMT+8:00(官方示例);
  2. 数据分区时区 data.time.zone=UTC(WET,GMT)(官方示例原值);
  3. 容器时区 UTC——demo 数据分区 dt=<当天>/hour=<小时> 由容器 UTC 时间生成。

三者不一致时,data.segments 的时间窗与分区目录容易错位,表现为 predicate 找不到目录/查不到数据。建议统一为一种时区(生产推荐全部 UTC)。

七、Elasticsearch 与内核参数

ES 5.5.2 容器要求宿主机内核参数(实测初始值 65530 → 必须 ≥262144):

sysctl -w vm.max_map_count=262144

指标索引(实测 _cat/indices):

health status index   uuid                   pri rep docs.count docs.deleted store.size
yellow open   griffin szaYHsDkTTGM6pXp2CiMIg   5   1          1            0      5.2kb

单节点下 yellow(1 副本无法分配)属正常。

八、JVM 与资源参数

项值说明
service JVM-Xmx1500m -Xms1500m固定 1.5G 堆;容器整体内存建议 ≥4G
service.jar150,278,077 字节fat jar(内嵌 spark/livy/hadoop 客户端)
日志/root/service/service.log排障第一现场
Hadoop 堆-Xmx1000m(namenode/datanode)容器内 hadoop 脚本默认

九、日志特征速查(排障第一现场)

场景日志特征(实测原文)
数据就绪检查失败FileExistPredicator : Predicate path: hdfs:///griffin/demo_src/dt=.../_DONE doesn't exist.
数据就绪通过Predicate path: .../_DONE exists.
配置加载Setting fs.defaultFS:hdfs://griffin:9000(FSUtil 初始化)
调度触发[ryBean_Worker-N] 线程名的 Quartz 日志

十、FAQ

Q1:改了 application.properties 不生效? 必须改容器内 /root/service/config/application.properties 并 docker restart griffin;改模板或宿主文件无效(除非挂载)。

Q2:如何持久化配置修改? compose 中对 /root/service/config 做 volume 挂载,或自建镜像继承 apachegriffin/griffin_spark2 后覆盖配置层。

Q3:service 版本号为什么报 0.2.0? 官方 0.6.0 compose 引用的镜像 tag 是 griffin_spark2:0.3.0,但 jar 实际是 2018 年的 0.2.0 构建(实测 GET /api/v1/version);0.6.0 的新 API(如 jobs/trigger)在此镜像上不存在。

Q4:livy.uri 里的 /batches 能改成路径前缀吗? 不能随意改,service 按该端点提交 spark 批任务,实测 GET /batches 返回 {"from":0,"total":0,"sessions":[]}。

Q5:必须用 PostgreSQL 吗? all-in-one 镜像内置 PG 9.3 预置 quartz 库;自建部署(源码包)可换 MySQL,对应改 spring.datasource.* 四件套。

Q6:ES 换成 7.x/8.x 行不行? 0.2.0 service 按 ES 5.x 客户端开发,高版本索引 API 不兼容;维持 5.5.2 最稳。

Q7:streaming 模式还需要什么? docker-compose-streaming.yml 额外拉起 zk 3.5 + kafka 0.8,并在 environment 注入 ZK_HOSTNAME/KAFKA_HOSTNAME。

Q8:vm.max_map_count 重启后失效? 写 /etc/sysctl.d/99-griffin.conf(内容 vm.max_map_count=262144)持久化。

Q9:如何备份调度元数据? PG quartz 库:docker exec griffin pg_dump -U griffin quartz > quartz.sql。

Q10:fs.defaultFS 为什么模板里是空的? compose 部署时 bootstrap 用容器 hostname(griffin)动态拼出 hdfs://griffin:9000;自建部署需手工写全。

参考链接