一、背景

在2017年,易观在运营自己6.8Pb大小、6.02亿月活、每天近万个调度任务的大数据平台时,受到ETL复杂的依赖关系、平台易用性、可维护性及二次开发等方面掣肘,易观的技术团队渴望找到一个具有以下功能的数据调度工具:

  • 易于使用,开发人员可以通过非常简单的拖拽操作构建ETL过程。不仅对于ETL开发人员,无法编写代码的人也可以使用此工具进行ETL操作,例如系统管理员和分析师;
  • 解决“复杂任务依赖”问题,并且可以实时监视ETL运行状态;
  • 支持多租户;
  • 支持许多任务类型:Shell,MR,Spark,SQL(mysql,postgresql,hive,sparksql),Python,Sub_Process,Procedure等;
  • 支持HA和线性可扩展性。

易观技术团队意识到现有开源项目没有能够达到他们要求的,因此决定自行开发这个工具。他们在2017年底设计了DolphinScheduler(原名:EasyScheduler)的主要架构;2018年5月完成第一个内部使用版本,后来又迭代了几个内部版本后,系统逐渐稳定下来。

2019年8月29日易观捐赠给 Apache 并启动孵化,由孵化器管理委员会成员进行辅导和孵化。北京时间 2021年4月9日Apache 软件基金会于在官方渠道宣布Apache DolphinScheduler 毕业成为Apache顶级项目。这是首个由国人主导并贡献到 Apache 的大数据工作流调度领域的顶级项目。

目前,DolphinScheduler™ 已经是联通、IDG、IBM、京东物流、联想、新东方、诺基亚、360、顺丰和腾讯等 400+ 公司在使用的分布式可视化大数据工作流调度系统。

原技术团队官方文档:https://analysys.github.io/easyscheduler_docs_cn/

Github地址:https://github.com/apache/dolphinscheduler

Apache地址:https://dolphinscheduler.apache.org/zh-cn/docs/1.3.4/user_doc/architecture-design.html

二、特点

海豚调度的 Slogan:调度选的好,下班回家早。调度用的对,半夜安心睡。

DolphinScheduler提供了许多易于使用的功能,可加快数据ETL工作开发流程的效率。其主要特点如下:

  • 通过拖拽以DAG 图的方式将 Task 按照任务的依赖关系关联起来,可实时可视化监控任务的运行状态;
  • 支持丰富的任务类型;
  • 支持工作流定时调度、依赖调度、手动调度、手动暂停/停止/恢复,同时支持失败重试/告警、从指定节点恢复失败、Kill 任务等操作;
  • 支持工作流全局参数及节点自定义参数设置;
  • 支持集群HA,通过 Zookeeper实现 Master 集群和 Worker 集群去中心化;
  • 支持工作流运行历史树形/甘特图展示、支持任务状态统计、流程状态统计;
  • 支持补数,并行或串行回填数据。

与同类调度系统的对比

三、技术架构

系统架构设计

在对调度系统架构说明之前,我们先来认识一下调度系统常用的名词

1.名词解释

DAG: 全称Directed Acyclic Graph,简称DAG。工作流中的Task任务以有向无环图的形式组装起来,从入度为零的节点进行拓扑遍历,直到无后继节点为止。举例如下图:

dag示例

流程定义:通过拖拽任务节点并建立任务节点的关联所形成的可视化DAG

流程实例:流程实例是流程定义的实例化,可以通过手动启动或定时调度生成,流程定义每运行一次,产生一个流程实例

任务实例:任务实例是流程定义中任务节点的实例化,标识着具体的任务执行状态

任务类型: 目前支持有SHELL、SQL、SUB_PROCESS(子流程)、PROCEDURE、MR、SPARK、PYTHON、DEPENDENT(依赖)、,同时计划支持动态插件扩展,注意:其中子 SUB_PROCESS 也是一个单独的流程定义,是可以单独启动执行的

调度方式: 系统支持基于cron表达式的定时调度和手动调度。命令类型支持:启动工作流、从当前节点开始执行、恢复被容错的工作流、恢复暂停流程、从失败节点开始执行、补数、定时、重跑、暂停、停止、恢复等待线程。其中 恢复被容错的工作流 和 恢复等待线程 两种命令类型是由调度内部控制使用,外部无法调用

定时调度:系统采用 quartz 分布式调度器,并同时支持cron表达式可视化的生成

依赖:系统不单单支持 DAG 简单的前驱和后继节点之间的依赖,同时还提供任务依赖节点,支持流程间的自定义任务依赖

优先级 :支持流程实例和任务实例的优先级,如果流程实例和任务实例的优先级不设置,则默认是先进先出

邮件告警:支持 SQL任务 查询结果邮件发送,流程实例运行结果邮件告警及容错告警通知

失败策略:对于并行运行的任务,如果有任务失败,提供两种失败策略处理方式,继续是指不管并行运行任务的状态,直到流程失败结束。结束是指一旦发现失败任务,则同时Kill掉正在运行的并行任务,流程失败结束

补数:补历史数据,支持区间并行和串行两种补数方式

2.系统架构

2.1 系统架构图

系统架构图

2.2 启动流程活动图

启动流程活动图

2.3 架构说明

  • MasterServer

    MasterServer采用分布式无中心设计理念,MasterServer主要负责 DAG 任务切分、任务提交监控,并同时监听其它MasterServer和WorkerServer的健康状态。 MasterServer服务启动时向Zookeeper注册临时节点,通过监听Zookeeper临时节点变化来进行容错处理。 MasterServer基于netty提供监听服务。

    该服务内主要包含:

    • Distributed Quartz分布式调度组件,主要负责定时任务的启停操作,当quartz调起任务后,Master内部会有线程池具体负责处理任务的后续操作

    • MasterSchedulerThread是一个扫描线程,定时扫描数据库中的 command 表,根据不同的命令类型进行不同的业务操作

    • MasterExecThread主要是负责DAG任务切分、任务提交监控、各种不同命令类型的逻辑处理

    • MasterTaskExecThread主要负责任务的持久化

  • WorkerServer

    WorkerServer也采用分布式无中心设计理念,WorkerServer主要负责任务的执行和提供日志服务。 WorkerServer服务启动时向Zookeeper注册临时节点,并维持心跳。 Server基于netty提供监听服务。

    该服务包含:

    • FetchTaskThread主要负责不断从Task Queue中领取任务,并根据不同任务类型调用TaskScheduleThread对应执行器。

    • LoggerServer是一个RPC服务,提供日志分片查看、刷新和下载等功能

  • ZooKeeper

    ZooKeeper服务,系统中的MasterServer和WorkerServer节点都通过ZooKeeper来进行集群管理和容错。另外系统还基于ZooKeeper进行事件监听和分布式锁。

  • Task Queue

    提供任务队列的操作,目前队列也是基于Zookeeper来实现。由于队列中存的信息较少,不必担心队列里数据过多的情况,实际上我们压测过百万级数据存队列,对系统稳定性和性能没影响。

  • Alert

    提供告警相关接口,接口主要包括告警两种类型的告警数据的存储、查询和通知功能。其中通知功能又有邮件通知和**SNMP(暂未实现)**两种,也可以实现企业微信告警。

  • API

    API接口层,主要负责处理前端UI层的请求。该服务统一提供RESTful api向外部提供请求服务。 接口包括工作流的创建、定义、查询、修改、发布、下线、手工启动、停止、暂停、恢复、从该节点开始执行等等。

  • UI

    系统的前端页面,提供系统的各种可视化操作界面。

2.3 架构设计思想

一、去中心化vs中心化

中心化思想:

中心化的设计理念比较简单,分布式集群中的节点按照角色分工,大体上分为两种角色:

  • Master的角色主要负责任务分发并监督Slave的健康状态,可以动态的将任务均衡到Slave上,以致Slave节点不至于“忙死”或”闲死”的状态。
  • Worker的角色主要负责任务的执行工作并维护和Master的心跳,以便Master可以分配任务给Slave。

中心化思想设计存在的问题:

  • 一旦Master出现了问题,则群龙无首,整个集群就会崩溃。为了解决这个问题,大多数Master/Slave架构模式都采用了主备Master的设计方案,可以是热备或者冷备,也可以是自动切换或手动切换,而且越来越多的新系统都开始具备自动选举切换Master的能力,以提升系统的可用性。
  • 另外一个问题是如果Scheduler在Master上,虽然可以支持一个DAG中不同的任务运行在不同的机器上,但是会产生Master的过负载。如果Scheduler在Slave上,则一个DAG中所有的任务都只能在某一台机器上进行作业提交,则并行任务比较多的时候,Slave的压力可能会比较大。

去中心化

  • 在去中心化设计里,通常没有Master/Slave的概念,所有的角色都是一样的,地位是平等的,全球互联网就是一个典型的去中心化的分布式系统,联网的任意节点设备down机,都只会影响很小范围的功能。

  • 去中心化设计的核心设计在于整个分布式系统中不存在一个区别于其他节点的”管理者”,因此不存在单点故障问题。但由于不存在” 管理者”节点所以每个节点都需要跟其他节点通信才得到必须要的机器信息,而分布式系统通信的不可靠性,则大大增加了上述功能的实现难度。

  • 实际上,真正去中心化的分布式系统并不多见。反而动态中心化分布式系统正在不断涌出。在这种架构下,集群中的管理者是被动态选择出来的,而不是预置的,并且集群在发生故障的时候,集群的节点会自发的举行"会议"来选举新的"管理者"去主持工作。最典型的案例就是ZooKeeper及Go语言实现的Etcd。

  • DolphinScheduler的去中心化是Master/Worker注册到Zookeeper中,实现Master集群和Worker集群无中心,并使用Zookeeper分布式锁来选举其中的一台Master或Worker为“管理者”来执行任务。

二、分布式锁实践

DolphinScheduler使用ZooKeeper分布式锁来实现同一时刻只有一台Master执行Scheduler,或者只有一台Worker执行任务的提交。

  1. 获取分布式锁的核心流程算法如下

  1. DolphinScheduler中Scheduler线程分布式锁实现流程图:

三、线程不足循环等待问题

  • 如果一个DAG中没有子流程,则如果Command中的数据条数大于线程池设置的阈值,则直接流程等待或失败。
  • 如果一个大的DAG中嵌套了很多子流程,如下图则会产生“死等”状态:

上图中MainFlowThread等待SubFlowThread1结束,SubFlowThread1等待SubFlowThread2结束, SubFlowThread2等待SubFlowThread3结束,而SubFlowThread3等待线程池有新线程,则整个DAG流程不能结束,从而其中的线程也不能释放。这样就形成的子父流程循环等待的状态。此时除非启动新的Master来增加线程来打破这样的”僵局”,否则调度集群将不能再使用。

对于启动新Master来打破僵局,似乎有点差强人意,于是我们提出了以下三种方案来降低这种风险:

  1. 计算所有Master的线程总和,然后对每一个DAG需要计算其需要的线程数,也就是在DAG流程执行之前做预计算。因为是多Master线程池,所以总线程数不太可能实时获取。
  2. 对单Master线程池进行判断,如果线程池已经满了,则让线程直接失败。
  3. 增加一种资源不足的Command类型,如果线程池不足,则将主流程挂起。这样线程池就有了新的线程,可以让资源不足挂起的流程重新唤醒执行。

注意:Master Scheduler线程在获取Command的时候是FIFO的方式执行的。

于是我们选择了第三种方式来解决线程不足的问题。

配置文件

目录结构

目前dolphinscheduler 所有的配置文件都在 [conf ] 目录中. 为了更直观的了解[conf]目录所在的位置以及包含的配置文件,请查看下面dolphinscheduler安装目录的简化说明. 本文主要讲述dolphinscheduler的配置文件.其他部分先不做赘述.

[注:以下 dolphinscheduler 简称为DS.]


├─bin                               DS命令存放目录
│  ├─dolphinscheduler-daemon.sh         启动/关闭DS服务脚本
│  ├─start-all.sh                       根据配置文件启动所有DS服务
│  ├─stop-all.sh                        根据配置文件关闭所有DS服务
├─conf                              配置文件目录
│  ├─application-api.properties         api服务配置文件
│  ├─datasource.properties              数据库配置文件
│  ├─zookeeper.properties               zookeeper配置文件
│  ├─master.properties                  master服务配置文件
│  ├─worker.properties                  worker服务配置文件
│  ├─quartz.properties                  quartz服务配置文件
│  ├─common.properties                  公共服务[存储]配置文件
│  ├─alert.properties                   alert服务配置文件
│  ├─config                             环境变量配置文件夹
│      ├─install_config.conf                DS环境变量配置脚本[用于DS安装/启动]
│  ├─env                                运行脚本环境变量配置目录
│      ├─dolphinscheduler_env.sh            运行脚本加载环境变量配置文件[如: JAVA_HOME,HADOOP_HOME, HIVE_HOME ...]
│  ├─org                                mybatis mapper文件目录
│  ├─i18n                               i18n配置文件目录
│  ├─logback-api.xml                    api服务日志配置文件
│  ├─logback-master.xml                 master服务日志配置文件
│  ├─logback-worker.xml                 worker服务日志配置文件
│  ├─logback-alert.xml                  alert服务日志配置文件
├─sql                               DS的元数据创建升级sql文件
│  ├─create                             创建SQL脚本目录
│  ├─upgrade                            升级SQL脚本目录
│  ├─dolphinscheduler_postgre.sql       postgre数据库初始化脚本
│  ├─dolphinscheduler_mysql.sql         mysql数据库初始化脚本
│  ├─soft_version                       当前DS版本标识文件
├─script                            DS服务部署,数据库创建/升级脚本目录
│  ├─create-dolphinscheduler.sh         DS数据库初始化脚本
│  ├─upgrade-dolphinscheduler.sh        DS数据库升级脚本
│  ├─monitor-server.sh                  DS服务监控启动脚本
│  ├─scp-hosts.sh                       安装文件传输脚本
│  ├─remove-zk-node.sh                  清理zookeeper缓存文件脚本
├─ui                                前端WEB资源目录
├─lib                               DS依赖的jar存放目录
├─install.sh                        自动安装DS服务脚本

配置文件详解

序号 服务分类 配置文件
1 启动/关闭DS服务脚本 dolphinscheduler-daemon.sh
2 数据库连接配置 datasource.properties
3 zookeeper连接配置 zookeeper.properties
4 公共[存储]配置 common.properties
5 API服务配置 application-api.properties
6 Master服务配置 master.properties
7 Worker服务配置 worker.properties
8 Alert 服务配置 alert.properties
9 Quartz配置 quartz.properties
10 DS环境变量配置脚本[用于DS安装/启动] install_config.conf
11 运行脚本加载环境变量配置文件
[如: JAVA_HOME,HADOOP_HOME, HIVE_HOME ...]
dolphinscheduler_env.sh
12 各服务日志配置文件 api服务日志配置文件 : logback-api.xml
master服务日志配置文件 : logback-master.xml
worker服务日志配置文件 : logback-worker.xml
alert服务日志配置文件 : logback-alert.xml

1.dolphinscheduler-daemon.sh [启动/关闭DS服务脚本]

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

默认简化参数如下:

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

不建议设置"-XX:DisableExplicitGC" , DS使用Netty进行通讯,设置该参数,可能会导致内存泄漏.

2.datasource.properties [数据库连接]

在DS中使用Druid对数据库连接进行管理,默认简化配置如下.

参数 默认值 描述
spring.datasource.driver-class-name 数据库驱动
spring.datasource.url 数据库连接地址
spring.datasource.username 数据库用户名
spring.datasource.password 数据库密码
spring.datasource.initialSize 5 初始连接池数量
spring.datasource.minIdle 5 最小连接池数量
spring.datasource.maxActive 5 最大连接池数量
spring.datasource.maxWait 60000 最大等待时长
spring.datasource.timeBetweenEvictionRunsMillis 60000 连接检测周期
spring.datasource.timeBetweenConnectErrorMillis 60000 重试间隔
spring.datasource.minEvictableIdleTimeMillis 300000 连接保持空闲而不被驱逐的最小时间
spring.datasource.validationQuery SELECT 1 检测连接是否有效的sql
spring.datasource.validationQueryTimeout 3 检测连接是否有效的超时时间[seconds]
spring.datasource.testWhileIdle true 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
spring.datasource.testOnBorrow true 申请连接时执行validationQuery检测连接是否有效
spring.datasource.testOnReturn false 归还连接时执行validationQuery检测连接是否有效
spring.datasource.defaultAutoCommit true 是否开启自动提交
spring.datasource.keepAlive true 连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作。
spring.datasource.poolPreparedStatements true 开启PSCache
spring.datasource.maxPoolPreparedStatementPerConnectionSize 20 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。

3.zookeeper.properties [zookeeper连接配置]

参数 默认值 描述
zookeeper.quorum localhost:2181 zk集群连接信息
zookeeper.dolphinscheduler.root /dolphinscheduler DS在zookeeper存储根目录
zookeeper.session.timeout 60000 session 超时
zookeeper.connection.timeout 30000 连接超时
zookeeper.retry.base.sleep 100 基本重试时间差
zookeeper.retry.max.sleep 30000 最大重试时间
zookeeper.retry.maxtime 10 最大重试次数

4.common.properties [hadoop、s3、yarn配置]

common.properties配置文件目前主要是配置hadoop/s3a相关的配置.

参数 默认值 描述
data.basedir.path /tmp/dolphinscheduler 本地工作目录,用于存放临时文件
resource.storage.type NONE 资源文件存储类型: HDFS,S3,NONE
resource.upload.path /dolphinscheduler 资源文件存储路径
hadoop.security.authentication.startup.state false hadoop是否开启kerberos权限
java.security.krb5.conf.path /opt/krb5.conf kerberos配置目录
login.user.keytab.username hdfs-mycluster@ESZ.COM kerberos登录用户
login.user.keytab.path /opt/hdfs.headless.keytab kerberos登录用户keytab
kerberos.expire.time 2 kerberos过期时间,整数,单位为小时
resource.view.suffixs txt,log,sh,conf,cfg,py,java,sql,hql,xml,properties 资源中心支持的文件格式
hdfs.root.user hdfs 如果存储类型为HDFS,需要配置拥有对应操作权限的用户
fs.defaultFS hdfs://mycluster:8020 请求地址如果resource.storage.type=S3,该值类似为: s3a://dolphinscheduler. 如果resource.storage.type=HDFS, 如果 hadoop 配置了 HA,需要复制core-site.xml 和 hdfs-site.xml 文件到conf目录
fs.s3a.endpoint s3 endpoint地址
fs.s3a.access.key s3 access key
fs.s3a.secret.key s3 secret key
yarn.resourcemanager.ha.rm.ids yarn resourcemanager 地址, 如果resourcemanager开启了HA, 输入HA的IP地址(以逗号分隔),如果resourcemanager为单节点, 该值为空即可
yarn.application.status.address http://ds1:8088/ws/v1/cluster/apps/%s 如果resourcemanager开启了HA或者没有使用resourcemanager,保持默认值即可. 如果resourcemanager为单节点,你需要将ds1 配置为resourcemanager对应的hostname
dolphinscheduler.env.path env/dolphinscheduler_env.sh 运行脚本加载环境变量配置文件[如: JAVA_HOME,HADOOP_HOME, HIVE_HOME ...]
development.state false 是否处于开发模式

5.application-api.properties [API服务配置]

参数 默认值 描述
server.port 12345 api服务通讯端口
server.servlet.session.timeout 7200 session超时时间
server.servlet.context-path /dolphinscheduler 请求路径
spring.servlet.multipart.max-file-size 1024MB 最大上传文件大小
spring.servlet.multipart.max-request-size 1024MB 最大请求大小
server.jetty.max-http-post-size 5000000 jetty服务最大发送请求大小
spring.messages.encoding UTF-8 请求编码
spring.jackson.time-zone GMT+8 设置时区
spring.messages.basename i18n/messages i18n配置
security.authentication.type PASSWORD 权限校验类型

6.master.properties [Master服务配置]

参数 默认值 描述
master.listen.port 5678 master监听端口
master.exec.threads 100 master工作线程数量,用于限制并行的流程实例数量
master.exec.task.num 20 master每个流程实例的并行任务数量
master.dispatch.task.num 3 master每个批次的派发任务数量
master.host.selector LowerWeight master host选择器,用于选择合适的worker执行任务,可选值: Random, RoundRobin, LowerWeight
master.heartbeat.interval 10 master心跳间隔,单位为秒
master.task.commit.retryTimes 5 任务重试次数
master.task.commit.interval 1000 任务提交间隔,单位为毫秒
master.max.cpuload.avg -1 master最大cpuload均值,只有高于系统cpuload均值时,master服务才能调度任务. 默认值为-1: cpu cores * 2
master.reserved.memory 0.3 master预留内存,只有低于系统可用内存时,master服务才能调度任务,单位为G

7.worker.properties [Worker服务配置]

参数 默认值 描述
worker.listen.port 1234 worker监听端口
worker.exec.threads 100 worker工作线程数量,用于限制并行的任务实例数量
worker.heartbeat.interval 10 worker心跳间隔,单位为秒
worker.max.cpuload.avg -1 worker最大cpuload均值,只有高于系统cpuload均值时,worker服务才能被派发任务. 默认值为-1: cpu cores * 2
worker.reserved.memory 0.3 worker预留内存,只有低于系统可用内存时,worker服务才能被派发任务,单位为G
worker.groups default worker分组配置,逗号分隔,例如'worker.groups=default,test'
worker启动时会根据该配置自动加入对应的分组

8.alert.properties [Alert 告警服务配置]

参数 默认值 描述
alert.type EMAIL 告警类型
mail.protocol SMTP 邮件服务器协议
mail.server.host xxx.xxx.com 邮件服务器地址
mail.server.port 25 邮件服务器端口
mail.sender xxx@xxx.com 发送人邮箱
mail.user xxx@xxx.com 发送人邮箱名称
mail.passwd 111111 发送人邮箱密码
mail.smtp.starttls.enable true 邮箱是否开启tls
mail.smtp.ssl.enable false 邮箱是否开启ssl
mail.smtp.ssl.trust xxx.xxx.com 邮箱ssl白名单
xls.file.path /tmp/xls 邮箱附件临时工作目录
以下为企业微信配置[选填]
enterprise.wechat.enable false 企业微信是否启用
enterprise.wechat.corp.id xxxxxxx
enterprise.wechat.secret xxxxxxx
enterprise.wechat.agent.id xxxxxxx
enterprise.wechat.users xxxxxxx
enterprise.wechat.token.url https://qyapi.weixin.qq.com/cgi-bin/gettoken?
corpid=corpId&corpsecret=secret
enterprise.wechat.push.url https://qyapi.weixin.qq.com/cgi-bin/message/send?
access_token=$token
enterprise.wechat.user.send.msg 发送消息格式
enterprise.wechat.team.send.msg 群发消息格式
plugin.dir /Users/xx/your/path/to/plugin/dir 插件目录

9.quartz.properties [Quartz配置]

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

参数 默认值 描述
org.quartz.jobStore.driverDelegateClass org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.driverDelegateClass org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.scheduler.instanceName DolphinScheduler
org.quartz.scheduler.instanceId AUTO
org.quartz.scheduler.makeSchedulerThreadDaemon true
org.quartz.jobStore.useProperties false
org.quartz.threadPool.class org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.makeThreadsDaemons true
org.quartz.threadPool.threadCount 25
org.quartz.threadPool.threadPriority 5
org.quartz.jobStore.class org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.tablePrefix QRTZ_
org.quartz.jobStore.isClustered true
org.quartz.jobStore.misfireThreshold 60000
org.quartz.jobStore.clusterCheckinInterval 5000
org.quartz.jobStore.acquireTriggersWithinLock true
org.quartz.jobStore.dataSource myDs
org.quartz.dataSource.myDs.connectionProvider.class org.apache.dolphinscheduler.service.quartz.DruidConnectionProvider

10.install_config.conf [DS环境变量配置脚本[用于DS安装/启动]]

install_config.conf这个配置文件比较繁琐,这个文件主要有两个地方会用到.

  • 1.DS集群的自动安装.

调用install.sh脚本会自动加载该文件中的配置.并根据该文件中的内容自动配置上述的配置文件中的内容. 比如:dolphinscheduler-daemon.sh、datasource.properties、zookeeper.properties、common.properties、application-api.properties、master.properties、worker.properties、alert.properties、quartz.properties 等文件.

  • 2.DS集群的启动&关闭.

DS集群在启动&关闭的时候,会加载该配置文件中的masters,workers,alertServer,apiServers等参数,启动/关闭DS集群.

文件内容如下:


# 注意: 该配置文件中如果包含特殊字符,如: `.*[]^${}\+?|()@#&`, 请转义,
#      示例: `[` 转义为 `\[`# 数据库类型, 目前仅支持 postgresql 或者 mysql
dbtype="mysql"# 数据库 地址 & 端口
dbhost="192.168.xx.xx:3306"# 数据库 名称
dbname="dolphinscheduler"# 数据库 用户名
username="xx"# 数据库 密码
password="xx"# Zookeeper地址
zkQuorum="192.168.xx.xx:2181,192.168.xx.xx:2181,192.168.xx.xx:2181"# 将DS安装到哪个目录,如: /data1_1T/dolphinscheduler,
installPath="/data1_1T/dolphinscheduler"# 使用哪个用户部署
# 注意: 部署用户需要sudo 权限, 并且可以操作 hdfs .
#     如果使用hdfs的话,根目录必须使用该用户进行创建.否则会有权限相关的问题.
deployUser="dolphinscheduler"# 以下为告警服务配置
# 邮件服务器地址
mailServerHost="smtp.exmail.qq.com"# 邮件服务器 端口
mailServerPort="25"# 发送者
mailSender="xxxxxxxxxx"# 发送用户
mailUser="xxxxxxxxxx"# 邮箱密码
mailPassword="xxxxxxxxxx"# TLS协议的邮箱设置为true,否则设置为false
starttlsEnable="true"# 开启SSL协议的邮箱配置为true,否则为false。注意: starttlsEnable和sslEnable不能同时为true
sslEnable="false"# 邮件服务地址值,同 mailServerHost
sslTrust="smtp.exmail.qq.com"#业务用到的比如sql等资源文件上传到哪里,可以设置:HDFS,S3,NONE。如果想上传到HDFS,请配置为HDFS;如果不需要资源上传功能请选择NONE。
resourceStorageType="NONE"# if S3,write S3 address,HA,for example :s3a://dolphinscheduler,
# Note,s3 be sure to create the root directory /dolphinscheduler
defaultFS="hdfs://mycluster:8020"# 如果resourceStorageType 为S3 需要配置的参数如下:
s3Endpoint="http://192.168.xx.xx:9010"
s3AccessKey="xxxxxxxxxx"
s3SecretKey="xxxxxxxxxx"# 如果ResourceManager是HA,则配置为ResourceManager节点的主备ip或者hostname,比如"192.168.xx.xx,192.168.xx.xx",否则如果是单ResourceManager或者根本没用到yarn,请配置yarnHaIps=""即可,如果没用到yarn,配置为""
yarnHaIps="192.168.xx.xx,192.168.xx.xx"# 如果是单ResourceManager,则配置为ResourceManager节点ip或主机名,否则保持默认值即可。
singleYarnIp="yarnIp1"# 资源文件在 HDFS/S3  存储路径
resourceUploadPath="/dolphinscheduler"# HDFS/S3  操作用户
hdfsRootUser="hdfs"# 以下为 kerberos 配置# kerberos是否开启
kerberosStartUp="false"
# kdc krb5 config file path
krb5ConfPath="$installPath/conf/krb5.conf"
# keytab username
keytabUserName="hdfs-mycluster@ESZ.COM"
# username keytab path
keytabPath="$installPath/conf/hdfs.headless.keytab"# api 服务端口
apiServerPort="12345"# 部署DS的所有主机hostname
ips="ds1,ds2,ds3,ds4,ds5"# ssh 端口 , 默认 22
sshPort="22"# 部署master服务主机
masters="ds1,ds2"# 部署 worker服务的主机
# 注意: 每一个worker都需要设置一个worker 分组的名称,默认值为 "default"
workers="ds1:default,ds2:default,ds3:default,ds4:default,ds5:default"#  部署alert服务主机
alertServer="ds3"# 部署api服务主机
apiServers="ds1"

11.dolphinscheduler_env.sh [环境变量配置]

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

export HADOOP_HOME=/opt/soft/hadoop
export HADOOP_CONF_DIR=/opt/soft/hadoop/etc/hadoop
export SPARK_HOME1=/opt/soft/spark1
export SPARK_HOME2=/opt/soft/spark2
export PYTHON_HOME=/opt/soft/python
export JAVA_HOME=/opt/soft/java
export HIVE_HOME=/opt/soft/hive
export FLINK_HOME=/opt/soft/flink
export DATAX_HOME=/opt/soft/datax/bin/datax.pyexport PATH=$HADOOP_HOME/bin:$SPARK_HOME1/bin:$SPARK_HOME2/bin:$PYTHON_HOME:$JAVA_HOME/bin:$HIVE_HOME/bin:$PATH:$FLINK_HOME/bin:$DATAX_HOME:$PATH

12.各服务日志配置文件

对应服务服务名称 日志文件名
api服务日志配置文件 logback-api.xml
master服务日志配置文件 logback-master.xml
worker服务日志配置文件 logback-worker.xml
alert服务日志配置文件 logback-alert.xml

四、安装部署

Linux 操作系统版本要求

操作系统 版本
Red Hat Enterprise Linux 7.0 及以上
CentOS 7.0 及以上
Oracle Enterprise Linux 7.0 及以上
Ubuntu LTS 16.04 及以上

注意: 以上 Linux 操作系统可运行在物理服务器以及 VMware、KVM、XEN 主流虚拟化环境上。

网络要求

DolphinScheduler正常运行提供如下的网络端口配置:

组件 默认端口 说明
MasterServer 5678 非通信端口,只需本机端口不冲突即可
WorkerServer 1234 非通信端口,只需本机端口不冲突即可
ApiApplicationServer 12345 提供后端通信端口

注意:

  • MasterServer 和 WorkerServer 不需要开启网络间通信,只需本机端口不冲突即可
  • 管理员可根据实际环境中 DolphinScheduler 组件部署方案,在网络侧和主机侧开放相关端口

生产环境

CPU 内存 硬盘类型 网络 实例数量
4核+ 8 GB+ SAS 千兆网卡 1+

注意:

  • 以上建议配置为部署 DolphinScheduler 的最低配置,生产环境强烈推荐使用更高的配置。
  • 硬盘大小配置建议 50GB+ ,系统盘和数据盘分开。

4.1 单机部署(Standalone)

4.1.1 基础软件安装(必装项)

  • PostgreSQL (8.2.15+) or MySQL (5.7系列) : 两者任选其一即可, 如MySQL则需要JDBC Driver 5.1.47+
  • JDK (1.8+) : 必装,请安装好后在/etc/profile下配置 JAVA_HOME 及 PATH 变量
  • ZooKeeper (3.4.6+) :必装
  • Hadoop (2.6+) or MinIO :选装, 如果需要用到资源上传功能,针对单机可以选择本地文件目录作为上传文件夹(此操作不需要部署Hadoop);当然也可以选择上传到Hadoop or MinIO集群上

注意:DolphinScheduler本身不依赖Hadoop、Hive、Spark,仅是会调用他们的Client,用于对应任务的运行。

4.1.2 下载二进制tar.gz包

请下载最新版本的后端安装包至服务器部署目录,比如创建 /opt/dolphinscheduler 做为安装部署目录,下载地址: 下载,下载后上传tar包到该目录中,并进行解压

# 创建部署目录,部署目录请不要创建在/root、/home等高权限目录
mkdir -p /opt/dolphinscheduler;
cd /opt/dolphinscheduler;
# 解压缩
tar -zxvf apache-dolphinscheduler-1.3.6-bin.tar.gz -C /opt/dolphinscheduler;mv apache-dolphinscheduler-1.3.6-bin  dolphinscheduler-bin

4.1.3 创建部署用户并赋予目录操作权限

创建部署用户,并且一定要配置sudo免密。以创建dolphinscheduler用户为例

# 创建用户需使用root登录
useradd dolphinscheduler;# 添加密码
echo "dolphinscheduler" | passwd --stdin dolphinscheduler# 配置sudo免密
sed -i '$adolphinscheduler  ALL=(ALL)  NOPASSWD: NOPASSWD: ALL' /etc/sudoers
sed -i 's/Defaults    requirett/#Defaults    requirett/g' /etc/sudoers# 修改目录权限,使得部署用户对dolphinscheduler-bin目录有操作权限
chown -R dolphinscheduler:dolphinscheduler dolphinscheduler-bin
 注意:- 因为任务执行服务是以 sudo -u {linux-user} 切换不同linux用户的方式来实现多租户运行作业,所以部署用户需要有 sudo 权限,而且是免密的。初学习者不理解的话,完全可以暂时忽略这一点- 如果发现/etc/sudoers文件中有"Default requiretty"这行,也请注释掉- 如果用到资源上传的话,还需要给该部署用户分配操作`本地文件系统或者HDFS或者MinIO`的权限

4.1.4 ssh免密配置

切换到部署用户并配置ssh本机免密登录

su dolphinscheduler;ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

注意:正常设置后,dolphinscheduler用户在执行命令ssh localhost 是不需要再输入密码的

4.1.5 数据库初始化

进入数据库,默认数据库是PostgreSQL,如选择MySQL的话,后续需要添加mysql-connector-java驱动包到DolphinScheduler的lib目录下

mysql -uroot -p

进入数据库命令行窗口后,执行数据库初始化命令,设置访问账号和密码。注: {user} 和 {password} 需要替换为具体的数据库用户名和密码

mysql> CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'%' IDENTIFIED BY '{password}';
mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'localhost' IDENTIFIED BY '{password}';
mysql> flush privileges;

创建表和导入基础数据

  • 修改 conf 目录下 datasource.properties 中的下列配置
vi conf/datasource.properties
  • 如果选择 MySQL,请注释掉 PostgreSQL 相关配置(反之同理), 还需要手动添加 [ mysql-connector-java 驱动 jar ] 包到 lib 目录下,这里下载的是mysql-connector-java-5.1.47.jar,然后正确配置数据库连接相关信息

  # postgre#spring.datasource.driver-class-name=org.postgresql.Driver#spring.datasource.url=jdbc:postgresql://localhost:5432/dolphinscheduler# mysqlspring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://xxx:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true     需要修改ip,本机localhost即可spring.datasource.username=xxx                       需要修改为上面的{user}值spring.datasource.password=xxx                      需要修改为上面的{password}值
  • 修改并保存完后,执行 script 目录下的创建表及导入基础数据脚本

    sh script/create-dolphinscheduler.sh

    注意: 如果执行上述脚本报 ”/bin/java: No such file or directory“ 错误,请在/etc/profile下配置 JAVA_HOME 及 PATH 变量

4.1.6 修改运行参数

  • 修改 conf/env 目录下的 dolphinscheduler_env.sh 环境变量(以相关用到的软件都安装在/opt/soft下为例)
export HADOOP_HOME=/opt/soft/hadoop
export HADOOP_CONF_DIR=/opt/soft/hadoop/etc/hadoop
#export SPARK_HOME1=/opt/soft/spark1
export SPARK_HOME2=/opt/soft/spark2
export PYTHON_HOME=/opt/soft/python
export JAVA_HOME=/opt/soft/java
export HIVE_HOME=/opt/soft/hive
export FLINK_HOME=/opt/soft/flink
export DATAX_HOME=/opt/soft/datax/bin/datax.py
export PATH=$HADOOP_HOME/bin:$SPARK_HOME2/bin:$PYTHON_HOME:$JAVA_HOME/bin:$HIVE_HOME/bin:$FLINK_HOME/bin:$DATAX_HOME:$PATH

注: 这一步非常重要,例如 JAVA_HOME 和 PATH 是必须要配置的,没有用到的可以忽略或者注释掉;如果找不到dolphinscheduler_env.sh, 请运行 ls -a

  • 将jdk软链到/usr/bin/java下(仍以 JAVA_HOME=/opt/soft/java 为例)
sudo ln -s /opt/soft/java/bin/java /usr/bin/java
  • 修改一键部署配置文件 conf/config/install_config.conf中的各参数,特别注意以下参数的配置
# 这里填 mysql or postgresql
dbtype="mysql"# 数据库连接地址
dbhost="localhost:3306"# 数据库名
dbname="dolphinscheduler"# 数据库用户名,此处需要修改为上面设置的{user}具体值
username="xxx"    # 数据库密码, 如果有特殊字符,请使用\转义,需要修改为上面设置的{password}具体值
password="xxx"#Zookeeper地址,单机本机是localhost:2181,记得把2181端口带上
zkQuorum="localhost:2181"#将DS安装到哪个目录,如: /opt/soft/dolphinscheduler,不同于现在的目录
installPath="/opt/soft/dolphinscheduler"#使用哪个用户部署,使用第3节创建的用户
deployUser="dolphinscheduler"# 邮件配置,以qq邮箱为例
# 邮件协议
mailProtocol="SMTP"# 邮件服务地址
mailServerHost="smtp.qq.com"# 邮件服务端口
mailServerPort="25"# mailSender和mailUser配置成一样即可
# 发送者
mailSender="xxx@qq.com"# 发送用户
mailUser="xxx@qq.com"# 邮箱密码
mailPassword="xxx"# TLS协议的邮箱设置为true,否则设置为false
starttlsEnable="true"# 开启SSL协议的邮箱配置为true,否则为false。注意: starttlsEnable和sslEnable不能同时为true
sslEnable="false"# 邮件服务地址值,参考上面 mailServerHost
sslTrust="smtp.qq.com"# 业务用到的比如sql等资源文件上传到哪里,可以设置:HDFS,S3,NONE,单机如果想使用本地文件系统,请配置为HDFS,因为HDFS支持本地文件系统;如果不需要资源上传功能请选择NONE。强调一点:使用本地文件系统不需要部署hadoop
resourceStorageType="HDFS"# 这里以保存到本地文件系统为例
#注:但是如果你想上传到HDFS的话,NameNode启用了HA,则需要将hadoop的配置文件core-site.xml和hdfs-site.xml放到conf目录下,本例即是放到/opt/dolphinscheduler/conf下面,并配置namenode cluster名称;如果NameNode不是HA,则修改为具体的ip或者主机名即可
defaultFS="file:///data/dolphinscheduler"    #hdfs://{具体的ip/主机名}:8020# 如果没有使用到Yarn,保持以下默认值即可;如果ResourceManager是HA,则配置为ResourceManager节点的主备ip或者hostname,比如"192.168.xx.xx,192.168.xx.xx";如果是单ResourceManager请配置yarnHaIps=""即可
# 注:依赖于yarn执行的任务,为了保证执行结果判断成功,需要确保yarn信息配置正确。
yarnHaIps="192.168.xx.xx,192.168.xx.xx"# 如果ResourceManager是HA或者没有使用到Yarn保持默认值即可;如果是单ResourceManager,请配置真实的ResourceManager主机名或者ip
singleYarnIp="yarnIp1"# 资源上传根路径,支持HDFS和S3,由于hdfs支持本地文件系统,需要确保本地文件夹存在且有读写权限
resourceUploadPath="/data/dolphinscheduler"# 具备权限创建resourceUploadPath的用户
hdfsRootUser="hdfs"# 配置 api server port
apiServerPort="12345"#在哪些机器上部署DS服务,本机选localhost
ips="localhost"#ssh端口,默认22
sshPort="22"#master服务部署在哪台机器上
masters="localhost"#worker服务部署在哪台机器上,并指定此worker属于哪一个worker组,下面示例的default即为组名
workers="localhost:default"#报警服务部署在哪台机器上
alertServer="localhost"#后端api服务部署在在哪台机器上
apiServers="localhost"

注:如果打算用到资源中心功能,请执行以下命令:

sudo mkdir /data/dolphinscheduler
sudo chown -R dolphinscheduler:dolphinscheduler /data/dolphinscheduler

4.1.7 一键部署

切换到部署用户,执行一键部署脚本

sh install.sh

注意: 第一次部署的话,在运行中第3步`3,stop server`出现5次以下信息,此信息可以忽略 sh: bin/dolphinscheduler-daemon.sh: No such file or directory

脚本完成后,会启动以下5个服务,使用jps命令查看服务是否启动

MasterServer         ----- master服务
WorkerServer         ----- worker服务
LoggerServer         ----- logger服务
ApiApplicationServer ----- api服务
AlertServer          ----- alert服务

如果以上服务都正常启动,说明自动部署成功

部署成功后,可以进行日志查看,日志统一存放于logs文件夹内

 logs/├── dolphinscheduler-alert-server.log├── dolphinscheduler-master-server.log|—— dolphinscheduler-worker-server.log|—— dolphinscheduler-api-server.log|—— dolphinscheduler-logger-server.log

4.1.8 登录系统

访问前端页面地址,接口ip(自行修改) http://192.168.xx.xx:12345/dolphinscheduler

用户名:admin

密码:dolphinscheduler123

4.1.9 启停服务

  • 一键停止集群所有服务

    sh ./bin/stop-all.sh
  • 一键开启集群所有服务

    sh ./bin/start-all.sh
  • 启停Master

sh ./bin/dolphinscheduler-daemon.sh start master-server
sh ./bin/dolphinscheduler-daemon.sh stop master-server
  • 启停Worker
sh ./bin/dolphinscheduler-daemon.sh start worker-server
sh ./bin/dolphinscheduler-daemon.sh stop worker-server
  • 启停Api
sh ./bin/dolphinscheduler-daemon.sh start api-server
sh ./bin/dolphinscheduler-daemon.sh stop api-server
  • 启停Logger
sh ./bin/dolphinscheduler-daemon.sh start logger-server
sh ./bin/dolphinscheduler-daemon.sh stop logger-server
  • 启停Alert
sh ./bin/dolphinscheduler-daemon.sh start alert-server
sh ./bin/dolphinscheduler-daemon.sh stop alert-server

4.2 集群部署

4.2.1 基础软件安装(必装项请自行安装)

  • PostgreSQL (8.2.15+) or MySQL (5.7系列) : 两者任选其一即可, 如MySQL则需要JDBC Driver 5.1.47+
  • JDK (1.8+) : 必装,请安装好后在/etc/profile下配置 JAVA_HOME 及 PATH 变量
  • ZooKeeper (3.4.6+) :必装
  • Hadoop (2.6+) or MinIO :选装,如果需要用到资源上传功能,可以选择上传到Hadoop or MinIO上
 注意:DolphinScheduler本身不依赖Hadoop、Hive、Spark,仅是会调用他们的Client,用于对应任务的提交。

4.2.2 下载二进制tar.gz包

  • 请下载最新版本的后端安装包至服务器部署目录,比如创建 /opt/dolphinscheduler 做为安装部署目录,下载地址: 下载,下载后上传tar包到该目录中,并进行解压
# 创建部署目录,部署目录请不要创建在/root、/home等高权限目录
mkdir -p /opt/dolphinscheduler;
cd /opt/dolphinscheduler;
# 解压缩
tar -zxvf apache-dolphinscheduler-1.3.6-bin.tar.gz -C /opt/dolphinscheduler;mv apache-dolphinscheduler-1.3.6-bin  dolphinscheduler-bin

4.2.3 创建部署用户和hosts映射

  • 所有部署调度的机器上创建部署用户,并且一定要配置sudo免密。假如我们计划在ds1,ds2,ds3,ds4这4台机器上部署调度,首先需要在每台机器上都创建部署用户
# 创建用户需使用root登录,设置部署用户名,请自行修改,后面以dolphinscheduler为例
useradd dolphinscheduler;# 设置用户密码,请自行修改,后面以dolphinscheduler123为例
echo "dolphinscheduler123" | passwd --stdin dolphinscheduler# 配置sudo免密
echo 'dolphinscheduler  ALL=(ALL)  NOPASSWD: NOPASSWD: ALL' >> /etc/sudoers
sed -i 's/Defaults    requirett/#Defaults    requirett/g' /etc/sudoers
 注意:- 因为是以 sudo -u {linux-user} 切换不同linux用户的方式来实现多租户运行作业,所以部署用户需要有 sudo 权限,而且是免密的。- 如果发现/etc/sudoers文件中有"Default requiretty"这行,也请注释掉- 如果用到资源上传的话,还需要在`HDFS或者MinIO`上给该部署用户分配读写的权限

4.2.4 配置hosts映射和ssh打通及修改目录权限

  • 以第一台机器(hostname为ds1)作为部署机,在ds1上配置所有待部署机器的hosts, 在ds1以root登录

    vi /etc/hosts#add ip hostname
    192.168.xxx.xxx ds1
    192.168.xxx.xxx ds2
    192.168.xxx.xxx ds3
    192.168.xxx.xxx ds4
    

    注意:请删掉或者注释掉127.0.0.1这行

  • 同步ds1上的/etc/hosts到所有部署机器

    for ip in ds2 ds3;     #请将此处ds2 ds3替换为自己要部署的机器的hostname
    dosudo scp -r /etc/hosts  $ip:/etc/          #在运行中需要输入root密码
    done
    

    备注:当然 通过sshpass -p xxx sudo scp -r /etc/hosts $ip:/etc/就可以省去输入密码了

    centos下sshpass的安装:

    1. 先安装epel

      yum install -y epel-release

      yum repolist

    2. 安装完成epel之后,就可以按照sshpass了

      yum install -y sshpass

  • 在ds1上,切换到部署用户并配置ssh本机免密登录

     su dolphinscheduler;ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    

​ 注意:正常设置后,dolphinscheduler用户在执行命令ssh localhost 是不需要再输入密码的

  • 在ds1上,配置部署用户dolphinscheduler ssh打通到其他待部署的机器

    su dolphinscheduler;
    for ip in ds2 ds3;     #请将此处ds2 ds3替换为自己要部署的机器的hostname
    dossh-copy-id  $ip   #该操作执行过程中需要手动输入dolphinscheduler用户的密码
    done
    # 当然 通过 sshpass -p xxx ssh-copy-id $ip 就可以省去输入密码了
    
  • 在ds1上,修改目录权限,使得部署用户对dolphinscheduler-bin目录有操作权限

    sudo chown -R dolphinscheduler:dolphinscheduler dolphinscheduler-bin
    

4.2.5 数据库初始化

  • 进入数据库,默认数据库是PostgreSQL,如选择MySQL的话,后续需要添加mysql-connector-java驱动包到DolphinScheduler的lib目录下,这里以MySQL为例
mysql -h192.168.xx.xx -P3306 -uroot -p
  • 进入数据库命令行窗口后,执行数据库初始化命令,设置访问账号和密码。注: {user} 和 {password} 需要替换为具体的数据库用户名和密码
   mysql> CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'%' IDENTIFIED BY '{password}';mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'localhost' IDENTIFIED BY '{password}';mysql> flush privileges;
  • 创建表和导入基础数据

    • 修改 conf 目录下 datasource.properties 中的下列配置
      vi conf/datasource.properties
    
    • 如果选择 MySQL,请注释掉 PostgreSQL 相关配置(反之同理), 还需要手动添加 [ mysql-connector-java 驱动 jar ] 包到 lib 目录下,这里下载的是mysql-connector-java-5.1.47.jar,然后正确配置数据库连接相关信息
      #postgre#spring.datasource.driver-class-name=org.postgresql.Driver#spring.datasource.url=jdbc:postgresql://localhost:5432/dolphinscheduler# mysqlspring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://xxx:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true     需要修改ipspring.datasource.username=xxx                     需要修改为上面的{user}值spring.datasource.password=xxx                      需要修改为上面的{password}值
    
    • 修改并保存完后,执行 script 目录下的创建表及导入基础数据脚本
    sh script/create-dolphinscheduler.sh
    

​ 注意: 如果执行上述脚本报 ”/bin/java: No such file or directory“ 错误,请在/etc/profile下配置 JAVA_HOME 及 PATH 变量

4.2.6 修改运行参数

  • 修改 conf/env 目录下的 dolphinscheduler_env.sh 环境变量(以相关用到的软件都安装在/opt/soft下为例)

        export HADOOP_HOME=/opt/soft/hadoopexport HADOOP_CONF_DIR=/opt/soft/hadoop/etc/hadoop#export SPARK_HOME1=/opt/soft/spark1export SPARK_HOME2=/opt/soft/spark2export PYTHON_HOME=/opt/soft/pythonexport JAVA_HOME=/opt/soft/javaexport HIVE_HOME=/opt/soft/hiveexport FLINK_HOME=/opt/soft/flinkexport DATAX_HOME=/opt/soft/datax/bin/datax.pyexport PATH=$HADOOP_HOME/bin:$SPARK_HOME2/bin:$PYTHON_HOME:$JAVA_HOME/bin:$HIVE_HOME/bin:$FLINK_HOME/bin:$DATAX_HOME:$PATH````注: 这一步非常重要,例如 JAVA_HOME 和 PATH 是必须要配置的,没有用到的可以忽略或者注释掉`
  • 将jdk软链到/usr/bin/java下(仍以 JAVA_HOME=/opt/soft/java 为例)

    sudo ln -s /opt/soft/java/bin/java /usr/bin/java
    
  • 修改一键部署配置文件 conf/config/install_config.conf中的各参数,特别注意以下参数的配置

    # 这里填 mysql or postgresql
    dbtype="mysql"# 数据库连接地址
    dbhost="192.168.xx.xx:3306"# 数据库名
    dbname="dolphinscheduler"# 数据库用户名,此处需要修改为上面设置的{user}具体值
    username="xxx"# 数据库密码, 如果有特殊字符,请使用\转义,需要修改为上面设置的{password}具体值
    password="xxx"#Zookeeper地址
    zkQuorum="192.168.xx.xx:2181,192.168.xx.xx:2181,192.168.xx.xx:2181"#将DS安装到哪个目录,如: /opt/soft/dolphinscheduler,不同于现在的目录
    installPath="/opt/soft/dolphinscheduler"#使用哪个用户部署,使用第3节创建的用户
    deployUser="dolphinscheduler"# 邮件配置,以qq邮箱为例
    # 邮件协议
    mailProtocol="SMTP"# 邮件服务地址
    mailServerHost="smtp.qq.com"# 邮件服务端口
    mailServerPort="25"# mailSender和mailUser配置成一样即可
    # 发送者
    mailSender="xxx@qq.com"# 发送用户
    mailUser="xxx@qq.com"# 邮箱密码
    mailPassword="xxx"# TLS协议的邮箱设置为true,否则设置为false
    starttlsEnable="true"# 开启SSL协议的邮箱配置为true,否则为false。注意: starttlsEnable和sslEnable不能同时为true
    sslEnable="false"# 邮件服务地址值,参考上面 mailServerHost
    sslTrust="smtp.qq.com"# 业务用到的比如sql等资源文件上传到哪里,可以设置:HDFS,S3,NONE,单机如果想使用本地文件系统,请配置为HDFS,因为HDFS支持本地文件系统;如果不需要资源上传功能请选择NONE。强调一点:使用本地文件系统不需要部署hadoop
    resourceStorageType="HDFS"#如果上传资源保存想保存在hadoop上,hadoop集群的NameNode启用了HA的话,需要将hadoop的配置文件core-site.xml和hdfs-site.xml放到安装路径的conf目录下,本例即是放到/opt/soft/dolphinscheduler/conf下面,并配置namenode cluster名称;如果NameNode不是HA,则只需要将mycluster修改为具体的ip或者主机名即可
    defaultFS="hdfs://mycluster:8020"# 如果没有使用到Yarn,保持以下默认值即可;如果ResourceManager是HA,则配置为ResourceManager节点的主备ip或者hostname,比如"192.168.xx.xx,192.168.xx.xx";如果是单ResourceManager请配置yarnHaIps=""即可
    yarnHaIps="192.168.xx.xx,192.168.xx.xx"# 如果ResourceManager是HA或者没有使用到Yarn保持默认值即可;如果是单ResourceManager,请配置真实的ResourceManager主机名或者ip
    singleYarnIp="yarnIp1"# 资源上传根路径,主持HDFS和S3,由于hdfs支持本地文件系统,需要确保本地文件夹存在且有读写权限
    resourceUploadPath="/data/dolphinscheduler"# 具备权限创建resourceUploadPath的用户
    hdfsRootUser="hdfs"#在哪些机器上部署DS服务,本机选localhost
    ips="ds1,ds2,ds3,ds4"#ssh端口,默认22
    sshPort="22"#master服务部署在哪台机器上
    masters="ds1,ds2"#worker服务部署在哪台机器上,并指定此worker属于哪一个worker组,下面示例的default即为组名
    workers="ds3:default,ds4:default"#报警服务部署在哪台机器上
    alertServer="ds2"#后端api服务部署在在哪台机器上
    apiServers="ds1"

    特别注意:

    • 如果需要用资源上传到Hadoop集群功能, 并且Hadoop集群的NameNode 配置了 HA的话 ,需要开启 HDFS类型的资源上传,同时需要将Hadoop集群下的core-site.xml和hdfs-site.xml复制到/opt/dolphinscheduler/conf,非NameNode HA跳过次步骤

4.2.7 一键部署

  • 切换到部署用户dolphinscheduler,然后执行一键部署脚本

    sh install.sh

    注意:
    第一次部署的话,在运行中第3步`3,stop server`出现5次以下信息,此信息可以忽略
    sh: bin/dolphinscheduler-daemon.sh: No such file or directory
    
  • 脚本完成后,会启动以下5个服务,使用jps命令查看服务是否启动(jpsjava JDK自带)

    MasterServer         ----- master服务WorkerServer         ----- worker服务LoggerServer         ----- logger服务ApiApplicationServer ----- api服务AlertServer          ----- alert服务

如果以上服务都正常启动,说明自动部署成功

部署成功后,可以进行日志查看,日志统一存放于logs文件夹内

 logs/├── dolphinscheduler-alert-server.log├── dolphinscheduler-master-server.log|—— dolphinscheduler-worker-server.log|—— dolphinscheduler-api-server.log|—— dolphinscheduler-logger-server.log

4.2.8 登录系统

  • 访问前端页面地址,接口ip(自行修改) http://192.168.xx.xx:12345/dolphinscheduler

4.2.9 启停服务

  • 一键停止集群所有服务

    sh ./bin/stop-all.sh

  • 一键开启集群所有服务

    sh ./bin/start-all.sh

  • 启停Master

sh ./bin/dolphinscheduler-daemon.sh start master-server
sh ./bin/dolphinscheduler-daemon.sh stop master-server
  • 启停Worker
sh ./bin/dolphinscheduler-daemon.sh start worker-server
sh ./bin/dolphinscheduler-daemon.sh stop worker-server
  • 启停Api
sh ./bin/dolphinscheduler-daemon.sh start api-server
sh ./bin/dolphinscheduler-daemon.sh stop api-server
  • 启停Logger
sh ./bin/dolphinscheduler-daemon.sh start logger-server
sh ./bin/dolphinscheduler-daemon.sh stop logger-server
  • 启停Alert
sh ./bin/dolphinscheduler-daemon.sh start alert-server
sh ./bin/dolphinscheduler-daemon.sh stop alert-server

告警信息同样可以往企业微信中发送,这个需要单独配置。

DolphinScheduler大数据调度系统相关推荐

  1. 荔枝机器学习平台与大数据调度系统“双剑合璧”,打造未来数据处理新模式!...

    点击上方 蓝字关注我们 ✎ 编 者 按 在线音频行业在中国仍是蓝海一片.根据 CIC 数据显示,中国在线音频行业市场规模由 2016 年的 16 亿元增长至 2020 年的 131 亿元,复合年增长率 ...

  2. 当我们在聊「开源大数据调度系统Taier」的数据开发功能时,到底在讨论什么?

    原文链接:当我们在聊「开源大数据调度系统Taier」的数据开发功能时,到底在讨论什么? 课件获取:关注公众号__ "数栈研习社",后台私信 "Taier"__ ...

  3. 大数据调度系统为什么选型Apache DolphinScheduler ?

    table of contents 一 .背景 二 .定位 三 .案例 四 .竟品对比 五 .DolphinScheduler简介 六 .社区发展 七.性能数据参考 一 .背景 今天跟客户聊天的时候, ...

  4. Apache DolphinScheduler 大数据工作流调度系统

    [本文正在参与 "拥抱开源 - Apache DolphinScheduler 有奖征稿活动],活动地址 Apache DolphinScheduler 大数据工作流调度系统 一.背景 二. ...

  5. 主流大数据调度工具对比(DolphinScheduler特点)

    大数据环境下,调度工具比不可少,离线批任务和准实时任务都需要调度去驱动.下文介绍主流大数据调度工具对比DolphinScheduler .Azkaban.Airflow.Oozie.Xxl-job A ...

  6. 主流大数据调度工具对比

    大数据环境下,调度工具比不可少,离线批任务和准实时任务都需要调度去驱动.下文介绍主流大数据调度工具对比DolphinScheduler .Azkaban.Airflow.Oozie.Xxl-job 非 ...

  7. 承载每天10万级任务的数据调度系统的架构是如何设计的

    消息:分布式工作流任务调度系统Apache DolphinScheduler开源地址:https://github.com/apache/incubator-dolphinscheduler , 欢迎 ...

  8. 面向大数据异构系统的神威并行存储系统

    点击上方蓝字关注我们 面向大数据异构系统的神威并行存储系统 何晓斌1, 蒋金虎2 1 国家并行计算工程技术研究中心,北京 100080 2 复旦大学计算机科学技术学院,上海 200433 论文引用格式 ...

  9. 智慧公安雪亮工程大数据平台系统

    雪亮工程主要通过视频监控等收集大量信息,在通过大数据分析,及时应对紧急情况,预防突发事件.目前公安对大数据的探索还是存在许多问题.对于大数据建设缺少认识,布局和定位不能统一,存在信息孤岛问题等.智慧公 ...

  10. java 有向无环图_数据调度系统中有向无环图的无环检测

    点击上方蓝字关注DolphinScheduler(海豚调度) |作者:鲍亮 |编辑:卢凯瑞 1 名词解释 DAG,全称:Directed Acyclic Graph,中文:有向无环图 入度:有向图中某 ...

最新文章

  1. 陌陌一面,为什么SpringBoot的 jar 可以独立运行?
  2. postmessage and sendmessage
  3. Apache Kafka源码分析 – Log Management
  4. [原创]基于Extjs的开源控件库 - http://extaspnet.codeplex.com/
  5. 运用Handler.post()方法进行数据更新跟用Message对比(18)
  6. 11计算机,11-计算机科学与技术
  7. java_IO流之 NIO
  8. java浅度克隆_java对象 深度克隆(不实现Cloneable接口)和浅度克隆
  9. 自己构造公共程序(3)--DataGrid小方法
  10. python难学吗-Python为什么那么受欢迎?学习Python难不难?
  11. Tableau系列软件概况
  12. 计算机网络电子邮件的基本格式,怎样的格式才是正确的电子邮件格式?
  13. 刘易斯拐点对中国经济的影响
  14. Vue - 路由导航守卫控制访问权限,设置 localStorage 过期时间
  15. Java二分法查找数组中某个数的下标
  16. 【机房收费个人版】DataTable 与泛型集合的较量
  17. C# Microsoft.Office.Interop.Excel Could not load file Error
  18. PHP生成带图片的Excel
  19. windows C++生成二维码图片
  20. Git - git push origin master 报错的解决方法

热门文章

  1. 【课程总结】软件工程经济学简答题总结
  2. OJDBC版本区别nbsp;[ojdbc14.jar…
  3. html中车牌号省份简称输入键盘
  4. 系统动力学 matlab,MATLAB引擎在系统动力学仿真中的应用.pdf
  5. 精品软件 推荐 Acme CAD Converter 全能 CAD 文件转换器和免费 DWG 查看器
  6. 蓝桥杯2019c语言b组试题,2020年7月B组C++蓝桥杯真题试水
  7. python解压并另存 .bz2文件的方法
  8. 这才是真相,“轻点,疼”被禁却另有玄机
  9. java递归生成无限层级的树--分类管理
  10. 多目标优化系列1---NSGA2的非支配排序函数的讲解