DolphinSchedule 简介
Apache DolphinScheduler是一个分布式去中心化,易扩展的可视化DAG工作流任务调度平台。解决数据研发ETL 错综复杂的依赖关系,不能直观监控任务健康状态等问题。DolphinScheduler以DAG流式的方式将Task组装起来,可实时监控任务的运行状态,同时支持重试、从指定节点恢复失败、暂停及Kill任务等操作
官网:https://dolphinscheduler.apache.org/zh-cn/index.html
DolphinSchedule 几种特点
简单易用
DAG监控界面,所有流程定义都是可视化,通过拖拽任务定制DAG,通过API方式与第三方系统对接, 一键部署
高可靠性
去中心化的多Master和多Worker, 自身支持HA功能, 采用任务队列来避免过载,不会造成机器卡死
丰富的使用场景
支持暂停恢复操作.支持多租户,更好的应对大数据的使用场景. 支持更多的任务类型,如 spark, hive, mr, python, sub_process, shell
高扩展性
支持自定义任务类型,调度器使用分布式调度,调度能力随集群线性增长,Master和Worker支持动态上下线
安装所需环境
Mysql (5.5+) : 必装
JDK (1.8+) : 必装
ZooKeeper(3.4.6+) :必装
Hadoop(2.6+) 选装, 如果需要使用到资源上传功能,MapReduce任务提交则需要配置Hadoop(上传的资源文件目前保存在Hdfs上)
Hive(1.2.1) : 选装,hive任务提交需要安装
Spark(1.x,2.x) : 选装,Spark任务提交需要安装
一、安装 zookeeper(window)
- 链接:apache-zookeeper-3.6.3-bin.tar.gz 下载 提取码:0213
- 在解压后的zookeeper中创建data和log文件夹以便收集数据和日志
- 将conf目录下的zoo_sample.cfg文件,复制一份,重命名为zoo.cfg,修改其中数据和日志的配置,如:
- 并添加如下配置
- 在bin中先运行 zkServer.cmd,然后运行zkCli.cmd 查看zk运行状态,可以查看zk节点信息即代表安装成功。(最后启动的时候记得启动 zkServer.sh )
zkServer.cmd - zkCli.cmd
- 最后不要忘了点击 zkServer.sh 不然启动项目后会报连接zookeeper报错
二、搭建后端环境
- 下载dolphinscheduler源码
官网 :https://dolphinscheduler.apache.org/zh-cn/index.html
地址 :https://github.com/apache/dolphinscheduler.git
这里选用 1.3.6-release 分支。
导入idea中
- 搭建数据库(项目中默认是pgsql,如果选择pgsql择无需以下数据库配置,咱们这里已mysql为列)
—>1:本地mysql数据库创建 这里为:dolphinscheduler
—>2:修改 dolphinscheduler-dao 模块的 datasource.properties(注释掉pgsql,放开mysql并修改成自己的mysql数据库)
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
—>3:修改根项目中 pom.xml,将 mysql-connector-java 依赖的 text 修改为 compile
—>4:刷新 dao 模块,运行org.apache.dolphinscheduler.dao.upgrade.shell.CreateDolphinScheduler 的 main 方法,自动插入项目所需的表和数据
备注:控制台会有执行语句打印,执行完成去本地数据库查看表是否生成。
- 修改zookeeper连接(一般是不需要修改的,不过还是需要查看一下配置是否对)
—>1:修改 dolphinscheduler-service 模块的 zookeeper.properties
4.修改日志控制层输出,在logback-worker.xml、logback-master.xml、logback-api.xml中添加控制台输出
<appender-ref ref="STDOUT"/>
—>1:ogback-worker.xml、logback-master.xml 修改在dolphinscheduler-server
—>2:logback-api.xml 在 dolphinscheduler-api 中
- 设置MasterServer,WorkerServer以及ApiApplicationServer文件运行的Applicatio
—>1:MasterServer,WorkerServer以及ApiApplicationServer文件位置
ApiApplicationServer 位置
—>2:配置三个文件为启动项
1:复制文件路径
2:添加启动项
3:添加 ApiApplicationServer
4:添加 MasterServer,WorkerServer
序号4 设置 VM Options:
MaseterServer:
-Dlogging.config=classpath:logback-master.xml -Ddruid.mysql.usePingMethod=false
WorkerServer:
-Dlogging.config=classpath:logback-worker.xml -Ddruid.mysql.usePingMethod=false
ApiApplicationServer:
-Dlogging.config=classpath:logback-api.xml -Dspring.profiles.active=api
- 修改 api中的application-api.properties改成application.properties
三、运行后端环境
- 顺序启动 MasterServer–>WorkerServer–>ApiApplicationServer
- 如果需要用到日志功能,执行 org.apache.dolphinscheduler.server.log.LoggerServer 的main 方法。
- 后端swagger地址 :http://localhost:12345/dolphinscheduler/doc.html?language=zh_CN&lang=cn
四、搭建前端环境
- 安装node.js
- 点击安装node.js
五、启动前端环境
- 进去本地 dolphinscheduler-ui,运行 (也可使用前端工具运行)
- 输入命令
npm install
npm run start
显示如下启动成功
- 浏览器访问:http://localhost:8888
- 用户名密码
用户:admin
密码:dolphinscheduler123
访问成功:
六、DolphinSchedule 简单上手
快速上手
喜欢看视频的伙伴可以参见手把手教你如何《快速上手 Apache DolphinScheduler 教程》
创建队列
创建租户
创建普通用户
创建告警组
创建Worker分组
创建环境
创建token令牌
使用普通用户登录
点击右上角用户名“退出”,重新使用普通用户登录。
项目管理->创建项目->点击项目名称
点击工作流定义->创建工作流定义->上线工作流定义
运行工作流定义->点击工作流实例->点击工作流实例名称->双击任务节点->查看任务执行日志
七、安装及运行过程中会遇到的问题
- 执行时zookeeper启动报错
2022-03-22 00:30:54.006 INFO 28800 --- [localhost:2181)] org.apache.zookeeper.ClientCnxn : Socket error occurred: localhost/0:0:0:0:0:0:0:1:2181: Connection refused: no further information
2022-03-22 00:30:55.115 INFO 28800 --- [localhost:2181)] org.apache.zookeeper.ClientCnxn : Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181. Will not attempt to authenticate using SASL (unknown error)
解决方法:执行bin/zkServer.sh start,启动zookeeper.
- 可以启动DolphinScheduler的,但是12345端口无法访问。
解决方法:
dolphinscheduler-api这个歌module的resource文件下application-api.properties的名称问题,导致springboot扫描不到app的port配置,所以需要把application-api.properties改成application.properties。
如有问题,欢迎各位朋友下方留言讨论