收藏!Apache DolphinScheduler 3.3.2 超全配置指南来了,一张表搞定调优

28 阅读7分钟

Apache DolphinScheduler 配置指南图片

前言

本文系统梳理 Apache DolphinScheduler 3.3.2 各服务(master/worker/api/alert/standalone)目录、JVM、数据源、注册中心、存储、Quartz、环境变量及日志等关键配置项、默认值与作用,为部署调优提供一站式参考。

目录结构

├── LICENSE
│
├── NOTICE
│
├── licenses                                    # licenses存放目录
│
├── bin                                         # DolphinScheduler命令和环境变量配置存放目录
│   ├── dolphinscheduler-daemon.sh              # 启动/关闭DolphinScheduler服务脚本
│   ├── env                                     # 环境变量配置存放目录
│   │   ├── dolphinscheduler_env.sh             # 当使用`dolphinscheduler-daemon.sh`脚本起停服务时,运行此脚本加载环境变量配置文件 [如:JAVA_HOME,HADOOP_HOME, HIVE_HOME ...]
│
├── alert-server                                # DolphinScheduler alert-server命令、配置和依赖存放目录
│   ├── bin
│   │   └── start.sh                            # DolphinScheduler alert-server启动脚本
│   │   └── jvm_args_env.sh                     # DolphinScheduler alert-server jvm参数配置脚本
│   ├── conf
│   │   ├── application.yaml                    # alert-server配置文件
│   │   ├── bootstrap.yaml                      # Spring Cloud 启动阶段配置文件, 通常不需要修改
│   │   ├── common.properties                   # 公共服务(存储等信息)配置文件
│   │   ├── dolphinscheduler_env.sh             # alert-server环境变量配置加载脚本
│   │   └── logback-spring.xml                  # alert-service日志配置文件
│   └── libs                                    # alert-server依赖jar包存放目录
│
├── api-server                                  # DolphinScheduler api-server命令、配置和依赖存放目录
│   ├── bin
│   │   └── start.sh                            # DolphinScheduler api-server启动脚本
│   │   └── jvm_args_env.sh                     # DolphinScheduler api-server jvm参数配置脚本
│   ├── conf
│   │   ├── application.yaml                    # api-server配置文件
│   │   ├── bootstrap.yaml                      # Spring Cloud 启动阶段配置文件, 通常不需要修改
│   │   ├── common.properties                   # 公共服务(存储等信息)配置文件
│   │   ├── dolphinscheduler_env.sh             # api-server环境变量配置加载脚本
│   │   └── logback-spring.xml                  # api-service日志配置文件
│   ├── libs                                    # api-server依赖jar包存放目录
│   └── ui                                      # api-server相关前端WEB资源存放目录
│
├── master-server                               # DolphinScheduler master-server命令、配置和依赖存放目录
│   ├── bin
│   │   └── start.sh                            # DolphinScheduler master-server启动脚本
│   │   └── jvm_args_env.sh                     # DolphinScheduler master-server jvm参数配置脚本
│   ├── conf
│   │   ├── application.yaml                    # master-server配置文件
│   │   ├── bootstrap.yaml                      # Spring Cloud 启动阶段配置文件, 通常不需要修改
│   │   ├── common.properties                   # 公共服务(存储等信息)配置文件
│   │   ├── dolphinscheduler_env.sh             # master-server环境变量配置加载脚本
│   │   └── logback-spring.xml                  # master-service日志配置文件
│   └── libs                                    # master-server依赖jar包存放目录
│
├── standalone-server                           # DolphinScheduler standalone-server命令、配置和依赖存放目录
│   ├── bin
│   │   └── start.sh                            # DolphinScheduler standalone-server启动脚本
│   │   └── jvm_args_env.sh                     # DolphinScheduler standalone-server jvm参数配置脚本
│   ├── conf
│   │   ├── application.yaml                    # standalone-server配置文件
│   │   ├── bootstrap.yaml                      # Spring Cloud 启动阶段配置文件, 通常不需要修改
│   │   ├── common.properties                   # 公共服务(存储等信息)配置文件
│   │   ├── dolphinscheduler_env.sh             # standalone-server环境变量配置加载脚本
│   │   ├── logback-spring.xml                  # standalone-service日志配置文件
│   │   └── sql                                 # DolphinScheduler元数据创建/升级sql文件
│   ├── libs                                    # standalone-server依赖jar包存放目录
│   └── ui                                      # standalone-server相关前端WEB资源存放目录
│  
|
├── tools                                       # DolphinScheduler元数据工具命令、配置和依赖存放目录
│   ├── bin
│   │   └── upgrade-schema.sh                   # DolphinScheduler元数据创建/升级脚本
│   ├── conf
│   │   ├── application.yaml                    # 元数据工具配置文件
│   │   └── common.properties                   # 公共服务(存储等信息)配置文件
│   ├── libs                                    # 元数据工具依赖jar包存放目录
│   └── sql                                     # DolphinScheduler元数据创建/升级sql文件
│  
|
├── worker-server                               # DolphinScheduler worker-server命令、配置和依赖存放目录
│   ├── bin
│   │   └── start.sh                        # DolphinScheduler worker-server 启动脚本
│   │   └── jvm_args_env.sh                 # DolphinScheduler worker-server jvm参数配置脚本
│   ├── conf
│   │   ├── application.yaml                # worker-server配置文件
│   │   ├── bootstrap.yaml                  # Spring Cloud 启动阶段配置文件, 通常不需要修改
│   │   ├── common.properties               # 公共服务(存储等信息)配置文件
│   │   ├── dolphinscheduler_env.sh         # worker-server环境变量配置加载脚本
│   │   └── logback-spring.xml              # worker-service日志配置文件
│   └── libs                                # worker-server依赖jar包存放目录
│
└── ui                                          # 前端WEB资源目录

启动脚本配置

dolphinscheduler-daemon.sh

dolphinscheduler-daemon.sh 脚本负责 DolphinScheduler 的启动&关闭。start-all.sh/stop-all.sh 最终也是通过 dolphinscheduler-daemon.sh 对集群进行启动/关闭操作。目前 DolphinScheduler 只是做了一个基本的设置,JVM 参数请根据各自资源的实际情况自行设置。

默认简化参数如下:

export DOLPHINSCHEDULER_OPTS="
-server
-Xmx16g
-Xms1g
-Xss512k
-XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
-XX:+UseFastAccessorMethods
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=70
"

注意事项:

  • 不建议设置 "-XX:DisableExplicitGC",DolphinScheduler 使用 Netty 进行通讯,设置该参数可能会导致内存泄漏。
  • 如果设置 "-Djava.net.preferIPv6Addresses=true" 将会使用 ipv6 的 IP 地址
  • 如果设置 "-Djava.net.preferIPv4Addresses=true" 将会使用 ipv4 的 IP 地址
  • 如果都不设置,将会随机使用 ipv4 或者 ipv6

数据库连接配置

在 DolphinScheduler 中使用 Spring Hikari 对数据库连接进行管理,配置文件位置:

服务名称配置文件
Master Servermaster-server/conf/application.yaml
Api Serverapi-server/conf/application.yaml
Worker Serverworker-server/conf/application.yaml
Alert Serveralert-server/conf/application.yaml

默认配置

参数默认值描述
spring.datasource.driver-class-nameorg.postgresql.Driver数据库驱动
spring.datasource.urljdbc:postgresql://127.0.0.1:5432/dolphinscheduler数据库连接地址
spring.datasource.usernameroot数据库用户名
spring.datasource.passwordroot数据库密码
spring.datasource.hikari.connection-test-queryselect 1检测连接是否有效的sql
spring.datasource.hikari.minimum-idle5最小空闲连接池数量
spring.datasource.hikari.auto-committrue是否自动提交
spring.datasource.hikari.pool-nameDolphinScheduler连接池名称
spring.datasource.hikari.maximum-pool-size50连接池最大连接数
spring.datasource.hikari.connection-timeout30000连接超时时长
spring.datasource.hikari.idle-timeout600000空闲连接存活最大时间
spring.datasource.hikari.leak-detection-threshold0连接泄露检测阈值
spring.datasource.hikari.initialization-fail-timeout1连接池初始化失败timeout

注意: DolphinScheduler 同样可以通过设置环境变量进行数据库连接相关的配置,将以上小写字母转成大写并把.换成_作为环境变量名,设置值即可。

注册中心配置

DolphinScheduler 默认使用 Zookeeper 进行集群管理、容错、事件监听等功能,配置文件位置:

服务名称配置文件
Master Servermaster-server/conf/application.yaml
Api Serverapi-server/conf/application.yaml
Worker Serverworker-server/conf/application.yaml

默认配置

参数默认值描述
registry.zookeeper.namespacedolphinschedulerZookeeper集群使用的namespace
registry.zookeeper.connect-stringlocalhost:2181Zookeeper集群连接信息
registry.zookeeper.retry-policy.base-sleep-time60ms基本重试时间差
registry.zookeeper.retry-policy.max-sleep300ms最大重试时间
registry.zookeeper.retry-policy.max-retries5最大重试次数
registry.zookeeper.session-timeout30ssession超时时间
registry.zookeeper.connection-timeout30s连接超时时间
registry.zookeeper.block-until-connected600ms阻塞直到连接成功的等待时间
registry.zookeeper.digest{用户名:密码}如果zookeeper打开了acl,则需要填写认证信息访问znode,认证信息格式为{用户名}:{密码}

注意:

  • DolphinScheduler 同样可以通过 bin/env/dolphinscheduler_env.sh 进行 Zookeeper 相关的配置
  • 如果使用 etcd 作为注册中心,详细请参考链接
  • 如果使用 jdbc 作为注册中心,详细请参考链接

common.properties 配置

common.properties 配置文件目前主要是配置 hadoop/s3/yarn/applicationId 收集相关的配置,配置文件位置:

服务名称配置文件
Master Servermaster-server/conf/common.properties
Api Serverapi-server/conf/common.properties
Worker Serverworker-server/conf/common.properties
Alert Serveralert-server/conf/common.properties

默认配置

参数默认值描述
data.basedir.path/tmp/dolphinscheduler本地工作目录,用于存放临时文件
resource.storage.typeNONE资源文件存储类型: HDFS,S3,OSS,GCS,ABS,NONE
resource.upload.path/dolphinscheduler资源文件存储路径
aws.access.key.idminioadminS3 access key
aws.secret.access.keyminioadminS3 secret access key
aws.regionus-east-1S3 区域
aws.s3.endpointhttp://minio:9000S3 endpoint地址
hdfs.root.userhdfs如果存储类型为HDFS,需要配置拥有对应操作权限的用户
fs.defaultFShdfs://mycluster:8020请求地址如果resource.storage.type=S3,该值类似为: s3a://dolphinscheduler。如果resource.storage.type=HDFS,如果hadoop配置了HA,需要复制core-site.xml和hdfs-site.xml文件到conf目录
hadoop.security.authentication.startup.statefalsehadoop是否开启kerberos权限
java.security.krb5.conf.path/opt/krb5.confkerberos配置目录
login.user.keytab.usernamehdfs-mycluster@ESZ.COMkerberos登录用户
login.user.keytab.path/opt/hdfs.headless.keytabkerberos登录用户keytab
kerberos.expire.time2kerberos过期时间,整数,单位为小时
yarn.resourcemanager.ha.rm.ids192.168.xx.xx,192.168.xx.xxyarn resourcemanager地址,如果resourcemanager开启了HA,输入HA的IP地址(以逗号分隔),如果resourcemanager为单节点,该值为空即可
yarn.application.status.addresshttp://ds1:8088/ws/v1/cluster/apps/%s如果resourcemanager开启了HA或者没有使用resourcemanager,保持默认值即可。如果resourcemanager为单节点,你需要将ds1配置为resourcemanager对应的hostname
development.statefalse是否处于开发模式
dolphin.scheduler.network.interface.preferredNONE将会被使用的网卡名称
dolphin.scheduler.network.interface.restrictNONE禁止使用的网卡名称
dolphin.scheduler.network.priority.strategydefaultip获取策略 default优先获取内网
resource.manager.httpaddress.port8088resource manager的端口
yarn.job.history.status.addresshttp://ds1:19888/ws/v1/history/mapreduce/jobs/%syarn的作业历史状态URL
datasource.encryption.enablefalse是否启用datasource加密
datasource.encryption.salt!@#$%^&*datasource加密使用的salt
support.hive.oneSessionfalse设置hive SQL是否在同一个session中执行
sudo.enabletrue是否开启sudo
zeppelin.rest.urlhttp://localhost:8080zeppelin RESTful API 接口地址
appId.collectlog收集applicationId方式,如果用aop方法,将配置log替换为aop,并将bin/env/dolphinscheduler_env.sh自动收集applicationId相关环境变量配置的注释取消掉

Api-server 相关配置

位置: api-server/conf/application.yaml

参数默认值描述
server.port12345api服务通讯端口
server.servlet.session.timeout120msession超时时间
server.servlet.context-path/dolphinscheduler/请求路径
spring.servlet.multipart.max-file-size1024MB最大上传文件大小
spring.servlet.multipart.max-request-size1024MB最大请求大小
server.jetty.max-http-post-size5000000jetty服务最大发送请求大小
spring.banner.charsetUTF-8请求编码
spring.jackson.time-zoneUTC设置时区
spring.jackson.date-format"yyyy-MM-dd HH:mm:ss"设置时间格式
spring.messages.basenamei18n/messagesi18n配置
security.authentication.typePASSWORD权限校验类型
security.authentication.ldap.user.adminread-only-adminLDAP登陆时,系统管理员账号
security.authentication.ldap.urlsldap://ldap.forumsys.com:389/LDAP urls
security.authentication.ldap.base.dndc=example,dc=comLDAP base dn
security.authentication.ldap.usernamecn=read-only-admin,dc=example,dc=comLDAP账号
security.authentication.ldap.passwordpasswordLDAP密码
security.authentication.ldap.user.identity-attributeuidLDAP用户身份标识字段名
security.authentication.ldap.user.email-attributemailLDAP邮箱字段名
security.authentication.ldap.user.not-exist-actionCREATE当通过LDAP登陆时用户不存在的操作,默认值是: CREATE,可选值:CREATE、DENY
security.authentication.ldap.ssl.enablefalseLDAP ssl开关
security.authentication.ldap.ssl.trust-storeldapkeystore.jksLDAP jks文件绝对路径
security.authentication.ldap.ssl.trust-store-passwordpasswordLDAP jks密码
security.authentication.casdoor.user.adminCasdoor登陆时,系统管理员账号
casdoor.endpointCasdoor服务器URL
casdoor.client-idCasdoor中的ID
casdoor.client-secretCasdoor中的密钥
casdoor.certificateCasdoor中的证书
casdoor.organization-nameCasdoor中的组织名称
casdoor.application-nameCasdoor中的应用名称
casdoor.redirect-urldolphinscheduler登录URL
api.traffic.control.global.switchfalse流量控制全局开关
api.traffic.control.max-global-qps-rate300全局最大请求数/秒
api.traffic.control.tenant-switchfalse流量控制租户开关
api.traffic.control.default-tenant-qps-rate10默认租户最大请求数/秒限制
api.traffic.control.customize-tenant-qps-rate自定义租户最大请求数/秒限制

Master Server 相关配置

位置: master-server/conf/application.yaml

参数默认值描述
master.listen-port5678master监听端口
master.pre-exec-threads10master准备执行任务的数量,用于限制并行的command
master.exec-threads100master工作线程数量,用于限制并行的流程实例数量
master.dispatch-task-number3master每个批次的派发任务数量
master.worker-load-balancer-configuration-properties.typeDYNAMIC_WEIGHTED_ROUND_ROBINMaster将会使用Worker的动态CPU/Memory/线程池使用率来计算Worker的负载,负载越低的worker将会有更高的机会被分发任务
master.max-heartbeat-interval10smaster最大心跳间隔
master.task-commit-retry-times5任务重试次数
master.task-commit-interval1000任务提交间隔,单位为毫秒
master.state-wheel-interval5轮询检查状态时间
master.server-load-protection.enabledtrue是否开启系统保护策略
master.server-load-protection.max-system-cpu-usage-percentage-thresholds0.7master最大系统cpu使用值,只有当前系统cpu使用值低于最大系统cpu使用值,master服务才能调度任务。默认值为0.7: 会使用70%的操作系统CPU
master.server-load-protection.max-jvm-cpu-usage-percentage-thresholds0.7master最大JVM cpu使用值,只有当前JVM cpu使用值低于最大JVM cpu使用值,master服务才能调度任务。默认值为0.7: 会使用70%的JVM CPU
master.server-load-protection.max-system-memory-usage-percentage-thresholds0.7master最大系统内存使用值,只有当前系统内存使用值低于最大系统内存使用值,master服务才能调度任务。默认值为0.7: 会使用70%的操作系统内存
master.server-load-protection.max-disk-usage-percentage-thresholds0.7master最大系统磁盘使用值,只有当前系统磁盘使用值低于最大系统磁盘使用值,master服务才能调度任务。默认值为0.7: 会使用70%的操作系统磁盘空间
master.server-load-protection.max-concurrent-workflow-instances2147483647Master最大并发工作流实例数。当Master的工作流实例数达到或超过此值时,Master服务将被标记为繁忙
master.failover-interval10failover间隔,单位为分钟
master.kill-application-when-task-failovertrue当任务实例failover时,是否kill掉yarn或k8s application
master.master.worker-group-refresh-interval10s定期将workerGroup从数据库中同步到内存的时间间隔
master.command-fetch-strategy.typeID_SLOT_BASEDCommand拉取策略,目前仅支持 ID_SLOT_BASED
master.command-fetch-strategy.config.id-step1数据库中t_ds_command的id自增步长
master.command-fetch-strategy.config.fetch-size10master拉取command数量

Worker Server 相关配置

位置: worker-server/conf/application.yaml

参数默认值描述
worker.listen-port1234worker监听端口
worker.max-heartbeat-interval10sworker最大心跳间隔
worker.host-weight100派发任务时,worker主机的权重
worker.tenant-auto-createtrue租户对应于系统的用户,由worker提交作业。如果系统没有该用户,则在参数worker.tenant.auto.create为true后自动创建。
worker.server-load-protection.enabledtrue是否开启系统保护策略
worker.server-load-protection.max-system-cpu-usage-percentage-thresholds0.8worker最大系统cpu使用值,只有当前系统cpu使用值低于最大系统cpu使用值,worker服务才能接收任务。默认值为0.8: 会使用80%的操作系统CPU
worker.server-load-protection.max-jvm-cpu-usage-percentage-thresholds0.8worker最大JVM cpu使用值,只有当前JVM cpu使用值低于最大JVM cpu使用值,worker服务才能接收任务。默认值为0.8: 会使用80%的JVM CPU
worker.server-load-protection.max-system-memory-usage-percentage-thresholds0.8worker最大系统内存使用值,只有当前系统内存使用值低于最大系统内存使用值,worker服务才能接收任务。默认值为0.8: 会使用80%的操作系统内存
worker.server-load-protection.max-disk-usage-percentage-thresholds0.8worker最大系统磁盘使用值,只有当前系统磁盘使用值低于最大系统磁盘使用值,worker服务才能接收任务。默认值为0.8: 会使用80%的操作系统磁盘空间
worker.alert-listen-hostlocalhostalert监听host
worker.alert-listen-port50052alert监听端口
worker.physical-task-config.task-executor-thread-size100Worker中任务最大并发度
worker.tenant-config.auto-create-tenant-enabledtrue租户对应于系统的用户,由worker提交作业。如果系统没有该用户,则在参数worker.tenant.auto.create为true后自动创建。
worker.tenant-config.default-tenant-enabledfalse如果设置为true,将会使用worker服务启动用户作为 default 租户。

Alert Server 相关配置

位置: alert-server/conf/application.yaml

参数默认值描述
server.port50053Alert Server监听端口
alert.port50052alert监听端口

Quartz 相关配置

这里面主要是 quartz 配置,请结合实际业务场景&资源进行配置,本文暂时不做展开,配置文件位置:

服务名称配置文件
Master Servermaster-server/conf/application.yaml
Api Serverapi-server/conf/application.yaml

默认配置

参数默认值
spring.quartz.properties.org.quartz.jobStore.isClusteredtrue
spring.quartz.properties.org.quartz.jobStore.classorg.quartz.impl.jdbcjobstore.JobStoreTX
spring.quartz.properties.org.quartz.scheduler.instanceIdAUTO
spring.quartz.properties.org.quartz.jobStore.tablePrefixQRTZ_
spring.quartz.properties.org.quartz.jobStore.acquireTriggersWithinLocktrue
spring.quartz.properties.org.quartz.scheduler.instanceNameDolphinScheduler
spring.quartz.properties.org.quartz.jobStore.usePropertiesfalse
spring.quartz.properties.org.quartz.jobStore.misfireThreshold60000
spring.quartz.properties.org.quartz.scheduler.makeSchedulerThreadDaemontrue
spring.quartz.properties.org.quartz.jobStore.driverDelegateClassorg.quartz.impl.jdbcjobstore.PostgreSQLDelegate
spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval5000

Quartz 线程池配置差异

Master Server 的 Quartz 线程池默认配置:

参数默认值
spring.quartz.properties.org.quartz.threadPool.makeThreadsDaemonstrue
spring.quartz.properties.org.quartz.threadPool.threadCount25
spring.quartz.properties.org.quartz.threadPool.threadPriority5
spring.quartz.properties.org.quartz.threadPool.classorg.quartz.simpl.SimpleThreadPool

Api Server 的 Quartz 线程池配置:

因为 Api Server 不会启动 Quartz Scheduler 实例,只会作为 Scheduler 客户端使用,因此它的 Quartz 线程池将会使用 QuartzZeroSizeThreadPool。QuartzZeroSizeThreadPool 不会启动任何线程。

参数默认值
spring.quartz.properties.org.quartz.threadPool.classorg.apache.dolphinscheduler.scheduler.quartz.QuartzZeroSizeThreadPool

dolphinscheduler_env.sh 环境变量配置

通过类似 shell 方式提交任务的的时候,会加载该配置文件中的环境变量到主机中。涉及到的 JAVA_HOME 任务类型的环境配置,其中任务类型主要有:Shell 任务、Python 任务、Spark 任务、Flink 任务、Datax 任务等等。

# JAVA_HOME, will use it to start DolphinScheduler server
export JAVA_HOME=${JAVA_HOME:-/opt/soft/java}

# Tasks related configurations, need to change the configuration if you use the related tasks.
export HADOOP_HOME=${HADOOP_HOME:-/opt/soft/hadoop}
export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-/opt/soft/hadoop/etc/hadoop}
export SPARK_HOME=${SPARK_HOME:-/opt/soft/spark}
export PYTHON_LAUNCHER=${PYTHON_LAUNCHER:-/opt/soft/python}
export HIVE_HOME=${HIVE_HOME:-/opt/soft/hive}
export FLINK_HOME=${FLINK_HOME:-/opt/soft/flink}
export DATAX_LAUNCHER=${DATAX_LAUNCHER:-/opt/soft/datax/bin/datax.py}

export PATH=$HADOOP_HOME/bin:$SPARK_HOME/bin:$PYTHON_LAUNCHER:$JAVA_HOME/bin:$HIVE_HOME/bin:$FLINK_HOME/bin:$DATAX_LAUNCHER:$PATH

# applicationId auto collection related configuration, the following configurations are unnecessary if setting appId.collect=log
export HADOOP_CLASSPATH=`hadoop classpath`:${DOLPHINSCHEDULER_HOME}/tools/libs/*
export SPARK_DIST_CLASSPATH=$HADOOP_CLASSPATH:$SPARK_DIST_CLASS_PATH
export HADOOP_CLIENT_OPTS="-javaagent:${DOLPHINSCHEDULER_HOME}/tools/libs/aspectjweaver-1.9.7.jar":$HADOOP_CLIENT_OPTS
export SPARK_SUBMIT_OPTS="-javaagent:${DOLPHINSCHEDULER_HOME}/tools/libs/aspectjweaver-1.9.7.jar":$SPARK_SUBMIT_OPTS
export FLINK_ENV_JAVA_OPTS="-javaagent:${DOLPHINSCHEDULER_HOME}/tools/libs/aspectjweaver-1.9.7.jar":$FLINK_ENV_JAVA_OPTS

日志相关配置

服务名称配置文件
Master Servermaster-server/conf/logback-spring.xml
Api Serverapi-server/conf/logback-spring.xml
Worker Serverworker-server/conf/logback-spring.xml
Alert Serveralert-server/conf/logback-spring.xml