Apache Griffin 0.6.0 配置参数详解
详解 Apache Griffin 0.6.0 官方 all-in-one 镜像的配置体系:application-docker.properties 全量参数、容器内生效配置与 HOSTNAME 替换链、依赖组件矩阵与端口映射、DQ 任务调度参数与时区陷阱、JVM 参数与日志排查,全部实测采集
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.url | Quartz 调度元数据存储(PostgreSQL quartz 库) | compose 网络下 IP 占位符会被替换为宿主映射地址;凭证 griffin/123456 |
spring.datasource.username/password | PG 凭证 | 容器内 PG 9.3 预置同名库与用户 |
hive.metastore.uris | Hive 元数据服务(thrift 9083) | metadata API(/api/v1/metadata/hive/*)的来源 |
kafka.schema.registry.url | Schema Registry(streaming 场景) | batch 场景不用;默认 localhost:8081 未部署时仅告警不致命 |
elasticsearch.host/port/scheme | 指标落 ES | 5.5.2,http 39200 |
livy.uri | Spark 批任务提交入口(/batches) | 实测提交后返回 sessionId/appId |
yarn.uri | YARN RM Web API(8088) | health/instance 状态跟踪 |
fs.defaultFS | HDFS 默认文件系统 | 模板留空,bootstrap 填充为 hdfs://griffin:9000(实测生效值) |
实测生效配置中的关键行(容器内 /root/service/config/application.properties):
fs.defaultFS = hdfs://griffin:9000
service 日志佐证:
Setting fs.defaultFS:hdfs://griffin:9000
三、依赖组件版本矩阵(实测)
| 组件 | 版本 | 端口(容器内) | 用途 |
|---|---|---|---|
| PostgreSQL | 9.3 | 5432 | Quartz 调度元数据(quartz 库) |
| MySQL | 5.x | 3306 | 预置(部分示例数据用) |
| Hadoop HDFS | 2.6.5 | 9000/50070 | 数据湖与 demo 数据 |
| Spark | standalone + Livy | 7077/8081/8082 | 计算引擎(livy 提交 yarn-cluster) |
| Livy | com.cloudera.livy(旧包名) | 8998 | REST→Spark 网关 |
| YARN | Hadoop 2.6.5 自带 | 8088/8042 | 资源调度 |
| Elasticsearch | 5.5.2(apachegriffin/elasticsearch:latest) | 9200/9300 | 指标存储(独立容器) |
| Hive metastore | thrift | 9083 | 元数据 |
| Kafka | 0.8(streaming compose 才有) | 9092 | streaming 数据源 |
| ZooKeeper | 3.5(streaming compose 才有) | 2181 | Kafka 依赖 |
四、端口映射矩阵(实测 compose)
| 宿主机 | 容器 | 用途 |
|---|---|---|
| 38080 | 8080 | griffin service(REST API + Angular UI 同端口) |
| 39200 / 39300 | 9200 / 9300 | elasticsearch |
| 38998 | 8998 | livy |
| 38088 | 8088 | yarn RM web ui |
| 38042 | 8042 | yarn NM web ui |
| 39083 | 9083 | hive metastore thrift |
| 33306 | 3306 | mysql |
| 35432 | 5432 | postgresql |
| 32122 | 2122 | ssh |
| streaming 版另加:39092→9092(kafka)、32181→2181(zk) |
五、DQ 任务调度参数(POST /api/v1/jobs 请求体)
| 字段 | 实测值 | 说明 |
|---|---|---|
measure.id | 1 | 关联的度量定义 |
job.name / job.type | accuracy_job_exp / batch | batch 或 streaming |
cron.expression | 0 0/2 * * * ? | Quartz 6 段 cron,实测每 2 分钟触发 |
cron.time.zone | GMT+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"}}]}
六、时区三件套陷阱(实测)
- job 调度时区
cron.time.zone=GMT+8:00(官方示例); - 数据分区时区
data.time.zone=UTC(WET,GMT)(官方示例原值); - 容器时区 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.jar | 150,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;自建部署需手工写全。
参考链接
- 官方 application-docker.properties(tag griffin-0.6.0):https://github.com/apache/griffin/blob/griffin-0.6.0/service/src/main/resources/application-docker.properties
- 官方 docker 指南:
griffin-doc/docker/griffin-docker-guide.md(同 tag) - 本套件部署实测:见《Apache Griffin Docker Compose 部署指南》