DataSophon 部署大数据组件:参数说明与优化实践

本文基于本地源码工程(datasophon,2.0.0 分支,对应 datasophon-api/src/main/resources/meta/DDP-2.0.0)梳理 DataSophon 的组件部署机制:服务如何定义、参数如何组织、平台如何自动注入变量,并逐一给出核心组件的参数说明与优化建议。此前的手工部署与调优系列(HDFS/YARN/Hive/Spark/Flink/ZK/Kafka 等调优实践)可作为参数取舍的理论依据,本文讲”在 DataSophon 里这些参数长什么样、怎么配”。

一、DataSophon 2.0.0 组件全景

源码中 meta/DDP-2.0.0/ 目录定义了当前版本支持的全部服务,每个服务一个 service_ddl.json。共 21 个组件:

组件 版本 依赖 角色(roleType)
ZOOKEEPER 3.6.4 ZkServer(master)
HDFS 3.3.6 ZOOKEEPER JournalNode、NameNode、ZKFC(master)、DataNode(worker)、HdfsClient(client)
YARN 3.3.6 HDFS ResourceManager、HistoryServer(master)、NodeManager(worker)、YarnClient(client)
HIVE 3.1.3 HDFS HiveMetaStore、HiveServer2(master)、HiveClient(client)
SPARK3 3.4.3 SparkClient3(client)
FLINK 1.16.2 FlinkClient(client)
KAFKA 2.8.2 ZOOKEEPER KafkaBroker(master)
TEZ 0.10.4 HDFS TezServer(master)、TezClient(client)
HBASE 2.4.16 HDFS HbaseMaster(master)、RegionServer(worker)
DORIS 1.2.6 DorisFE(master)、DorisFEObserver(worker)、DorisBE(worker)
DS(DolphinScheduler) 3.1.8 ZOOKEEPER ApiServer、MasterServer、AlertServer(master)、WorkerServer(worker)
KYUUBI 1.7.3 KyuubiServer(master)、KyuubiClient(client)
RANGER 2.1.0 RangerAdmin(master)
KERBEROS 1.15.1 Krb5Kdc、KAdmin(master)、Krb5Client(client)
TRINO 367 TrinoCoordinator(master)、TrinoWorker(worker)
ELASTICSEARCH 7.16.2 ElasticSearch(master)、EsExporter(master)
ICEBERG 1.4.0 IcebergClient(client)
STREAMPARK 2.1.1 StreamPark(master)
PROMETHEUS 2.54.0 Prometheus(master)
GRAFANA 11.2.1 Grafana(master)
ALERTMANAGER 0.23.0 AlertManager(master)

依赖关系即安装顺序:HDFS 依赖 ZOOKEEPER,YARN/Hive/Tez/HBase 依赖 HDFS,Kafka/DolphinScheduler 依赖 ZOOKEEPER。DataSophon 在安装向导中按依赖拓扑排序,先装依赖服务。

本地工程为定制版本:Hive/Ranger 等服务的元数据库默认指向达梦数据库javax.jdo.option.ConnectionDriverName=dm.jdbc.driver.DmDriver),与社区版默认 MySQL 不同。部署前务必按企业环境修改数据库连接参数。

二、服务定义模型(service_ddl.json)

每个组件的 service_ddl.json 描述四件事:服务角色启停脚本参数

1. 服务与角色

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"name": "HDFS",
"version": "3.3.6",
"dependencies": ["ZOOKEEPER"],
"packageName": "hadoop-3.3.6.tar.gz",
"roles": [
{
"name": "NameNode",
"roleType": "master",
"runAs": { "user": "hdfs", "group": "hadoop" },
"cardinality": "1+",
"logFile": "${hadoopLogDir}/hadoop-hdfs-namenode-${host}.log",
"jmxPort": 27001,
"externalLink": { "name": "NameNode Ui", "url": "http://${host}:9870" }
}
]
}

关键字段:

  • cardinality:角色实例数约束(1 表示固定 1 个,1+ 表示至少 1 个可多个)——HDFS 的 JournalNode/NameNode 是 1+,配合 HA 参数实现双主
  • runAs:进程运行用户与组(hdfs:hadoop、kafka:kafka 等),平台自动创建用户与组
  • startRunner/stopRunner/statusRunner:调用的控制脚本与参数(如 control_hadoop.sh start namenode),脚本在服务目录内
  • externalLink:部署完成后 Web UI 直链(NameNode 9870、RM 8088 等)
  • jmxPort:JMX 指标端口,Prometheus 抓取用

2. 参数模型

每个参数是一个对象,字段含义:

字段 说明
name 参数名(即写入组件配置文件的键)
label / description 界面展示的中文名与说明
type 控件类型:inputselectswitchslidermultiple(数组)、multipleWithKey(自定义键值对)
configType 参数归属:ha(高可用)、path(路径)、map(环境变量)、rack(机架)、kb(Kerberos)、permission(Ranger 权限)、custom(自定义配置)
value / defaultValue 当前值 / 默认值
configurableInWizard 是否在安装向导中可改
hidden 是否在界面隐藏

参数渲染机制configType 决定参数在向导中如何分组展示(HA 组、Kerberos 组、机架组……),最终由 worker 端的 FreeMarker 模板(templates/*.ftl,如 hdfs-site.xmlxml.ftlcapacity-scheduler.ftljvm.config.ftl)渲染成组件真实配置文件。multipleWithKey 类型的参数允许”自定义配置 key=value 追加到配置文件”——这是不改源码扩展参数的口子。

三、变量注入机制

参数默认值大量使用 ${...} 占位符,部署时平台自动解析:

变量 来源 示例用途
${zkUrls} Zookeeper 服务实例 HDFS 的 ha.zookeeper.quorum、Kafka 的 zookeeper.connect 自动填入 ZK 地址
${dfs.nameservices} / ${nn1} / ${nn2} HDFS HA 参数 fs.defaultFS=hdfs://${dfs.nameservices} 自动组装
${host} 当前角色所在主机 角色专属参数(hive.server2.thrift.bind.host
${realm} KERBEROS 服务 各组件 Kerberos principal 自动拼接
${apiHost} 管理端地址 数据库连接(jdbc:...${apiHost}...
${HADOOP_HOME} / ${INSTALL_PATH} 安装路径 日志、配置目录引用
${metastoreHost} / ${historyserverHost} / ${rm1} 对应角色部署主机 服务间地址互引

变量注入是”编排正确性”的核心:手工部署最大的痛点(地址写错、主机名不统一)被这套机制消解。但注意:${变量} 引用的服务必须已部署(如 ${zkUrls} 需要先装 Zookeeper),依赖顺序错误会导致渲染出空地址。

四、部署流程

  1. 建集群:创建集群、选框架版本(对应 DDP-2.0.0)
  2. 加主机:填 IP/SSH 信息,管理端向节点分发 Worker 并采集主机信息(host-info-collect.sh
  3. 选服务与角色分配:勾选组件 → 每个角色指定节点(master/worker/client 三类角色各就各位)
  4. 参数配置:向导中按 configType 分组展示参数,改动 value 即可;HA/路径/Kerberos 参数集中在此
  5. 一键部署:管理端生成 DAG(DAGBuildActor)→ 分发部署包(DispatcherWorkerActor)→ worker 解压 → 渲染配置(ConfigureServiceActor,FreeMarker)→ 执行 control_xxx.sh 启停(InstallServiceActor/StartServiceActor)→ 状态回传

五、核心组件参数说明与优化

以下参数均来自 DDP-2.0.0 实际定义(含默认值),优化建议与《XXX 生产调优实践》系列一致。

HDFS(默认:blocksize 256M、replication 3、NN 堆 8G)

平台参数 默认值 说明与优化
dfs.blocksize 268435456(256M) 已比社区默认 128M 大一档:大块省元数据;文件以小文件为主时改回 134217728
dfs.replication 3 容量与可靠性取舍:有异地备份可降 2
namenodeHeapSize(slider) 8 NN 堆内存,按”每百万块 2~4G”估算:32C256G 中型集群调 16,64C512G 大规模调 32
datanodeHeapSize 8 DN 堆,写密集调大
dfs.namenode.handler.count(slider) 16 20×log2(节点数):百节点集群应调到 130~200
dfs.datanode.handler.count 8 写密集调 30~50
dfs.namenode.name.dir(multiple) 必填:多目录分盘(如 /data1/nn,/data2/nn),元数据命根子
dfs.datanode.data.dir(multiple) 每节点多盘逗号填多目录
hadoop.tmp.dir /data/tmp/hadoop 运行临时目录,放数据盘
dfs.journalnode.edits.dir /data/hdfs/jn JournalNode 日志目录,独立盘
enableRack + rack 参数 false 大集群开启机架感知(TableMapping + rack.properties)
dfs.permissions.enabled false 注意默认关闭权限检查;接 Ranger 后由 Ranger 策略管权限

YARN(默认:NM 内存 32G、容器上限 128G、公平调度)

平台参数 默认值 说明与优化
yarn.nodemanager.resource.memory-mb 32768 单节点容器内存总量:8C16G 配 12G、32C256G 配 220G、64C512G 配 460G(预留系统)
yarn.nodemanager.resource.cpu-vcores 4 pcores-vcores-multiplier(2.1)配合:pcores × 2.1 是默认核数算法,可按物理核直接改
yarn.scheduler.minimum/maximum-allocation-mb 2048 / 131072 容器内存上下限:最小 2G、最大 128G,防单容器”一口吃太多”
yarn.nodemanager.local-dirs / log-dirs(multiple) 多盘填多目录,容器临时数据与日志分散 IO
yarn.log-aggregation-enable true 日志聚合到 HDFS,yarn.nodemanager.remote-app-log-dir 指定位置
yarn.nodemanager.aux-services spark_shuffle,mapreduce_shuffle 已预置 Spark Shuffle Service,配合 Spark 动态分配
yarn.resourcemanager.scheduler.class FairScheduler 生产按队列规划选 Capacity 或保留 Fair:配合 yarn.scheduler.fair.allocation.file 定义队列
yarn.node-labels.enabled true 节点标签调度:大集群按”计算型/内存型”打标签隔离

Zookeeper(默认:堆 1G、tickTime 2000)

平台参数 默认值 说明与优化
dataDir / dataLogDir /data/zookeeper、/data/log/zookeeper 快照与事务日志分目录分盘,事务日志盘性能决定写性能
zkHeapSize(slider) 1 ZK 数据全在内存,2~4G 足够;不随规格盲目加大
maxClientCnxns 60 连接池大的业务调 500~3000
initLimit / syncLimit 10 / 5 大集群/慢网络调 30/10
server.1 ~ server.7 集群节点声明(ip:2888:3888),几台配几个
autopurge.snapRetainCount / purgeInterval 3 / 12 快照自动清理,防磁盘写满
custom.zoo.cfg(multipleWithKey) - 追加任意 zoo.cfg 配置的扩展口

Kafka(默认:分区 8、副本 2、IO 线程 12、堆 6G)

平台参数 默认值 说明与优化
num.partitions 8 分区数按吞吐规划:目标吞吐 ÷ 单分区吞吐;后期只加不减
default.replication.factor 2 生产 3 副本 + 内置 topic(offsets.topic.replication.factor=3
num.network.threads / num.io.threads 3 / 12 按核数调:8C 网络 4、IO 8;32C IO 16
log.dirs(multiple) 数据目录多盘
log.retention.hours 168 与磁盘容量联动,配 log.retention.bytes 更可控
kafkaHeapSize(slider) 6 页缓存优先,堆 4~8G 即可,不随规格涨
message.max.bytes 10000120 单条消息上限,大消息业务按需调
unclean.leader.election.enable false 保持 false,杜绝数据乱序

Hive(默认:MR 引擎、map/reduce 内存 8G、堆 256M)

平台参数 默认值 说明与优化
hive.execution.engine mr(select) 生产切 tez(装 TEZ 服务后)或 spark
mapreduce.map/reduce.memory.mb 8192 MR 引擎容器内存;切 Tez 后由 tez.container.size 接管
mapreduce.input.fileinputformat.split.maxsize 1073741824(1G) 输入分片上限:小文件多调小(如 256M)提并行
hive.merge.mapfiles / mapredfiles / merge.size.per.task true/true/256M 小文件合并三件套已默认开启
hive.metastore.warehouse.dir /user/hive/warehouse 数仓根目录
hiveHeapSize 256 默认偏小:HiveServer2 堆按规格调 4~8G
hive.server2.support.dynamic.service.discovery true HS2 多实例 + ZK 动态发现,HiveServer2 可多台
custom.hive.site.xml - 追加 hive-site.xml 参数扩展口(如 CBO、MapJoin 阈值)

Spark3(默认:executor 8g×2core、driver 8g、动态分配开)

平台参数 默认值 说明与优化
spark.executor.memory / spark.executor.cores 8g / 2 单 Executor 内存 832G、核 35;8C16G 节点降 4g×2
spark.driver.memory 8g client 模式本地 JVM;大规模调 16g
spark.dynamicAllocation.enabled + min/max true、1/6 动态分配已开;maxExecutors 按队列资源定
spark.shuffle.service.enabled true 与 YARN aux-services 的 spark_shuffle 配套
spark.eventLog.enabled / spark.history.fs.logDirectory true / hdfs://…/spark-logs 事件日志与 HistoryServer 已默认开
custom.spark.defaults.conf - 追加参数口(AQE、广播阈值、Kryo 等按调优文章补)

Flink(默认:JM 堆 1.6G、TM 1.28G)

平台参数 默认值 说明与优化
jobmanager.memory.heap.size 1600m 8C16G 够用;大集群调 4~8G
taskmanager.memory.flink.size 1280m 偏小:按规格调(8C16G→12G、32C256G→24G),配合 custom.flink.conf.yaml 补托管内存比例
enableJMHA + zookeeper 参数 false 生产开启:high-availability=zookeeperstorageDir 指向 HDFS
custom.flink.conf.yaml - 追加 flink-conf.yaml 参数口(RocksDB、checkpoint、并行度)

Tez(依赖 HDFS)

平台参数 默认值 说明与优化
tez.lib.uris ${fs.defaultFS}/tez/tez.tar.gz 平台自动把 Tez 库上传到 HDFS 并注入,无需手工 put
custom.tez.site.xml - 追加 tez-site.xml(tez.container.size、Session 超时等)

Kerberos(1.15.1)

平台参数 默认值 说明与优化
realm HADOOP.COM 域名(全大写惯例)
ticketLifetime / renewLifetime 24h / 7d 覆盖长作业:按作业时长调大 renew 并配自动续票
kdcHost / kadminHost ${kdcHost} KDC 主机自动回填

Kerberos 全局联动:各组件参数中的 enableKerberos 开关 + configType=kb 组(principal/keytab 等)会统一启用:HDFS 的 nn/_HOST@${realm}、Kafka 的 SASL_PLAINTEXT、Hive 的 hive.server2.authentication=kerberos 全部由平台按 ${realm} 自动组装——这正是”编排平台”相对手工部署的巨大优势。

Ranger(2.1.0)

平台参数 默认值 说明与优化
auditStore elasticsearch 审计存储指向 ES(版本内已集成 7.16.2)
enableHDFSPlugin / enableHIVEPlugin / enableHBASEPlugin false 按需开启:开插件后对应组件侧自动生成 Ranger 集成(HDFS 的 RangerHdfsAuthorizer、HBase 的 coprocessor 类)
rangerWebUrl / rangerUserPass ${rangerAdminUrl} / 初始密码 部署后立即修改默认密码

六、三档规格参数速查

组件 8C16G 32C256G 64C512G
HDFS namenodeHeapSize 4 16 32
YARN memory-mb 12G 220G 460G
YARN cpu-vcores 6 28 58
Kafka kafkaHeapSize 4 8 8
Spark executor 4g×2 16g×4 32g×5
Flink taskmanager.memory.flink.size 12G 24G 48G
Hive hiveHeapSize(MB) 4096 8192 16384
ZK zkHeapSize 2 4 4

七、部署优化建议

  1. 先装依赖链:ZOOKEEPER → HDFS → YARN → Hive/Tez/Spark/Kafka;Kerberos 建议最早装(后续组件 principal 自动联动)
  2. 路径类参数(configType=path)部署前一次配对:数据目录、日志目录、HA 地址,后期改动需重启组件
  3. 善用 custom.* 扩展参数:官方参数表没有的(如 Spark AQE、Hive MapJoin 阈值、Tez container 大小),用 multipleWithKey 追加,不必改源码
  4. HA 参数组在向导中集中核对:HDFS 双 NN + JournalNode(3 台)+ ZKFC、YARN 双 RM,cardinality=1+ 保证可分配两台
  5. Kerberos/Ranger 一键联动:安全需求高的集群,先装 KERBEROS,各组件开启 enableKerberos;再装 RANGER 并开启各组件插件
  6. 监控栈随装随用:PROMETHEUS + GRAFANA + ALERTMANAGER 由平台部署并自动抓取各组件 jmxPort
  7. 与手工部署的衔接:DataSophon 生成的配置文件在组件安装目录(${INSTALL_PATH})下,custom.* 追加的参数与平台默认参数合并渲染,排障时可直接查看最终配置文件,与调优系列文章的参数互相印证

常见问题

  • 变量渲染出空地址(如 zookeeper.connect 为空):依赖服务未安装或未启动,检查服务依赖顺序
  • 参数修改不生效:向导中改参数后需重新分发配置并重启对应角色;custom.* 参数修改同理
  • 达梦/数据库连接失败:定制版默认达梦驱动,换 MySQL 需同步修改驱动类与连接串
  • 角色分配不符校验:HA 角色(NameNode/JournalNode/RM)cardinality=1+,至少分配 1 个;双主需 2 个
  • 部署失败排查入口:worker 端组件目录的 control_xxx.sh 脚本与日志(logFile 参数定义了路径),单角色可单独重装

总结

DataSophon 的价值不在”省去敲命令”,而在把组件间的依赖、地址、安全联动固化成参数模型:变量注入解决了地址编排,configType 分类管理了 HA/Kerberos/Ranger 等横切关注点,custom.* 保留了手工调优的全部自由度。部署时按”依赖链 → 路径参数 → 规格参数 → 安全联动”的顺序推进,再结合调优系列的三档规格表,即可从”能装”走向”装好”。


DataSophon 部署大数据组件:参数说明与优化实践
https://chaggle.github.io/2026/08/09/bigdata/datasophon-deploy-params-20260810/
作者
chaggle
发布于
2026年8月9日
更新于
2026年8月11日
许可协议