一、简述
Apache DolphinScheduler是一个分布式去中心化,易扩展的可视化DAG工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。有如下特性:
高可靠性
去中心化的多Master和多Worker, 自身支持HA功能, 采用任务队列来避免过载,不会造成机器卡死
简单易用
DAG监控界面,所有流程定义都是可视化,通过拖拽任务定制DAG,通过API方式与第三方系统对接, 一键部署
丰富的使用场景
支持暂停恢复操作. 支持多租户,更好的应对大数据的使用场景. 支持更多的任务类型,如 spark, hive, mr, python, sub_process, shell
高扩展性
支持自定义任务类型,调度器使用分布式调度,调度能力随集群线性增长,Master和Worker支持动态上下线
二、搭建过程
1.环境配置
集群服务划分:
192.168.30.141 s141 (master)
192.168.30.142 s142 (master)
192.168.30.143 s143 (api)
192.168.30.144 s144 (worker)
192.168.30.145 s145 (worker)
192.168.30.146 s146 (worker)
192.168.30.147 s147 (worker)
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,用于对应任务的提交。
2>创建部署用户
# 创建用户需使用root登录,设置部署用户名,请自行修改,后面以dolphinscheduler为例 useradd dolphinscheduler; # 设置用户密码,请自行修改,后面以111111为例 echo "111111" | 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`上给该部署用户分配读写的权限
3>配置host映射和ssh打通
vim /etc/hosts 192.168.30.141 s141 192.168.30.142 s142 192.168.30.143 s143 192.168.30.144 s144 192.168.30.145 s145 192.168.30.146 s146 192.168.30.147 s147
在s141上,切换到部署用户并配置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
是不需要再输入密码的
在s141上,配置部署用户dolphinscheduler ssh打通到其他待部署的机器(其他机器同理)
su dolphinscheduler; for ip in s142 s143 s144 s145 s146 s147; #请将此处s142 s143等替换为自己要部署的机器的hostname do ssh-copy-id $ip #该操作执行过程中需要手动输入dolphinscheduler用户的密码 done # 当然 通过 sshpass -p xxx ssh-copy-id $ip 就可以省去输入密码了
在s141上,修改目录权限,创建并使得部署用户对/opt/dolphinscheduler目录有操作权限(其他机器同理)
cd /opt
mkdir dolphinscheduler
sudo chown -R dolphinscheduler:dolphinscheduler dolphinscheduler
2.安装包获取
可以下载最新版本的后端安装包,也可以从github上clone源代码自己打包,推荐后者,可以先把datasource.properties中数据库连接修改为对应的,把dolphinscheduler_env.sh中环境变量修改自己对应的位置,将代码包上传至服务器 /opt/dolphinscheduler 下
3.安装脚本
该脚本只启动了worker,如果要启动其他服务,可以解开注释或添加对应服务的命令即可,划分好集群中各机器部署的服务,对应相应的脚本
#!/bin/sh workDir=`dirname $0` workDir=`cd ${workDir};pwd` files=$(ls -l /opt/dolphinscheduler/ |awk '/^-/ {print $NF}' | grep 'apache-dolphinscheduler-incubating') file='' for i in $files do file=$i done tar -zxvf $workDir/$file -C $workDir ds_dir=${file%%.tar.gz*} #sh $workDir/dolphinscheduler/bin/dolphinscheduler-daemon.sh stop master-server sh $workDir/dolphinscheduler/bin/dolphinscheduler-daemon.sh stop worker-server #sh $workDir/dolphinscheduler/bin/dolphinscheduler-daemon.sh stop api-server rm -rf $workDir/dolphinscheduler echo "mv $workDir/$ds_dir to $workDir/dolphinscheduler" mv $workDir/$ds_dir $workDir/dolphinscheduler chmod 755 $workDir/dolphinscheduler/bin/* sed -i 's/ $//' $workDir/dolphinscheduler/bin/dolphinscheduler-daemon.sh sed -i 's/ $//' $workDir/dolphinscheduler/conf/env/dolphinscheduler_env.sh #sh $workDir/dolphinscheduler/bin/dolphinscheduler-daemon.sh start master-server sh $workDir/dolphinscheduler/bin/dolphinscheduler-daemon.sh start worker-server #sh $workDir/dolphinscheduler/bin/dolphinscheduler-daemon.sh start api-server
4.部署
这里使用Alibaba Cloud Toolkit插件,可以很方便部署到多台机器上
查看服务:
集群服务启动成功
访问页面:http://192.168.30.143:12345/dolphinscheduler
部署成功