0 背景
Apache DolphinScheduler是一个由国人主导的任务调度框架,可以很好的支持Spark、Flink、Shell、DataX等业务场景。
Apache DolphinScheduler是一个分布式去中心化,易扩展的可视化DAG工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。——来自Apache DolphinScheduler官网
Apache DolphinScheduler有着高可靠、简单易用、使用场景丰富、高扩展性等特征,碰巧公司最近在搭建新的大数据集群,所以决定来尝尝鲜。
公司目前使用Clouderamanager对集群进行统一管理,Hadoop、Spark等组件采用CM部署,Flink也做了CDH编译并集成在CM中,DolphinScheduler要对各种组件进行集成。
1 DolphinScheduler集群规划
此处我们选择集群模式(Cluster)部署,根据官方推荐的最佳实践,我们选择三个节点部署。节点规划如下:
节点 | 角色 |
---|---|
node1 | master/api |
node2 | worker/alert |
node3 | worker |
- master:MasterServer 主要负责DAG的切分,任务的提交、监控,监控其他节点的健康状况等任务。
- woker:WorkerServer 主要负责执行任务和提供日志服务。
- alert:AlertServer 提供告警相关服务,可以提供邮件告警。
- api:APIServer API接口服务,提供RESTful API与UI界面。
2 安装准备
2.1 前提
- 安装PostgreSQL (8.2.15+) or MySQL (5.7系列),在此我选择使用Mysql,使用Mysql还需要准备mysql驱动jar包
- 安装JDK (1.8+) ,并配置好环境变量
- 安装ZooKeeper (3.4.6+) ,DolphinScheduler是强依赖于zookepper的,在此我们需要事先准备好zookepper集群:node2:2181,node3:2181,node4:2181 若需要资源上传功能,还需要安装Hadoop (2.6+) or MinIO
- 配置hosts文件,为各机器设置hostname
2.2 下载
下载DolphinScheduler二进制安装包并解压。 dolphinscheduler.apache.org/zh-cn/downl…
mv apache-dolphinscheduler-incubating-1.3.5-dolphinscheduler-bin dolphinscheduler-bin
3 创建dolphinscheduler用户
3.1 创建用户
在所有要部署的机器上创建新用户,并赋予用户免密sudo权限。
# 使用root用户创建新用户,用户名可自行修改
useradd dolphinscheduler;
# 设置用户密码,请自行修改,后面以dolphinscheduler123为例
echo "dolphinscheduler123" | passwd --stdin dolphinscheduler
3.2 sudo免密
为用户设置sudo免密步骤略 可自行网上搜索
3.3 设置目录权限
为之前解压得到的目录修改权限
sudo chown -R dolphinscheduler:dolphinscheduler dolphinscheduler-bin
4 初始化数据库
4.1 创建dolphinscheduler库并添加对应用户权限
在mysql中执行以下SQL:
CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'dolphinscheduler'@'%' IDENTIFIED BY 'dolphinscheduler123';
GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'dolphinscheduler'@'localhost' IDENTIFIED BY 'dolphinscheduler';
flush privileges;
其中用户和密码可自行替换。
4.2 导入MySQL驱动jar包
将mysql-connector-java-5.1.47.jar(或其他版本)拷贝到lib目录下。
4.3 修改数据库配置文件
vim conf/datasource.properties
#注释掉pstgre的部分
#postgre
#spring.datasource.driver-class-name=org.postgresql.Driver
#spring.datasource.url=jdbc:postgresql://localhost:5432/dolphinscheduler
#添加mysql配置
#mysql
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://xxx:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
spring.datasource.username=dolphinscheduler
spring.datasource.password=dolphinscheduler123
4.4 执行创建表脚本
sh script/create-dolphinscheduler.sh
5 修改环境变量配置文件
vim conf/env/dolphinscheduler_env.sh
将各CDH相关组件的安装目录修改为opt/cloudera/parcels/CDH/lib/
目录下的地址。
将不需要使用的组件进行注释。
export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop
export HADOOP_CONF_DIR=/opt/cloudera/parcels/CDH/lib/hadoop/etc/hadoop
#export SPARK_HOME1=/opt/soft/spark1
export SPARK_HOME2=/opt/cloudera/parcels/CDH/lib/spark
#export PYTHON_HOME=/opt/soft/python
export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
export HIVE_HOME=/opt/cloudera/parcels/CDH/lib/hive
export FLINK_HOME=/opt/cloudera/parcels/FLINK/lib/flink
export DATAX_HOME=/export/datax/bin/datax.py
将jdk软链到/usr/bin/java下
sudo ln -s /usr/java/jdk1.8.0_181-cloudera/bin/java /usr/bin/java
6 修改部署配置文件
vim conf/config/install_config.conf
# 这里填 mysql or postgresql
dbtype="mysql"
# 数据库连接地址
dbhost="node1:3306"
# 数据库名
dbname="dolphinscheduler"
# 数据库用户名,此处需要修改为上面设置的{user}具体值
username="dolphinscheduler"
# 数据库密码, 如果有特殊字符,请使用\转义,需要修改为上面设置的{password}具体值
password="dolphinscheduler12"
#Zookeeper地址
zkQuorum="node2:2181,node3:2181,node4:2181"
#将DS安装到哪个目录,如: /opt/soft/dolphinscheduler,不同于现在的目录
installPath="/export/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://node1:8020"
# 如果没有使用到Yarn,保持以下默认值即可;如果ResourceManager是HA,则配置为ResourceManager节点的主备ip或者hostname,比如"192.168.xx.xx,192.168.xx.xx";如果是单ResourceManager请配置yarnHaIps=""即可
yarnHaIps=""
# 如果ResourceManager是HA或者没有使用到Yarn保持默认值即可;如果是单ResourceManager,请配置真实的ResourceManager主机名或者ip
singleYarnIp="node1"
# 资源上传根路径,主持HDFS和S3,由于hdfs支持本地文件系统,需要确保本地文件夹存在且有读写权限
resourceUploadPath="/data/dolphinscheduler"
# 具备权限创建resourceUploadPath的用户
hdfsRootUser="hdfs"
#在哪些机器上部署DS服务,本机选localhost
ips="node1,node2,node3"
#ssh端口,默认22
sshPort="22"
#master服务部署在哪台机器上
masters="node1"
#worker服务部署在哪台机器上,并指定此worker属于哪一个worker组,下面示例的default即为组名
workers="node2:default,node3:default"
#报警服务部署在哪台机器上
alertServer="node2"
#后端api服务部署在在哪台机器上
apiServers="node1"
如果HDFS的NameNode配置了高可用,此处要将core-site.xml
和hdfs-site.xml
复制到/conf
目录下。
CDH安装的配置文件所在目录为:/opt/cloudera/parcels/CDH/lib/hadoop/etc/hadoop
还需要修改一下zookeeper.properties文件
vim conf/zookeeper.properties
添加zookepper的集群信息
zookeeper.quorum=node2:2181,node3:2181,node4:2181
7 安装
切换到部署用户dolphinscheduler
执行一键部署脚本
sh install.sh
脚本执行完成后使用jps命令可以查看到服务启动情况:
MasterServer ----- master服务
WorkerServer ----- worker服务
LoggerServer ----- logger服务
ApiApplicationServer ----- api服务
AlertServer ----- alert服务
根据节点规划不同,不同节点看到的服务不同,具体情况视自身集群规划而定。
8 登录
安装完成后可以通过web页面登录系统 http://node1:12345/dolphinscheduler 默认管理员账号为: admin/dolphinscheduler123
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