1.文档编写目的
Apache DolphinScheduler(以下简称:DS)是一个分布式去中心化,易扩展的可视化DAG工作流任务调度平台。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。本篇文档主要介绍如何搭建DolphinScheduler集群并与安全的CDH集群集成。
高可靠性:去中心化的多Master和多Worker服务对等架构, 避免单Master压力过大,另外采用任务缓冲队列来避免过载。
简单易用:DAG监控界面,所有流程定义都是可视化,通过拖拽任务完成定制DAG,通过API方式与第三方系统集成, 一键部署。
丰富的使用场景:支持多租户,支持暂停恢复操作. 紧密贴合大数据生态,提供Spark, Hive, M/R, Python, Sub_process, Shell等近20种任务类型。
高扩展性:支持自定义任务类型,调度器使用分布式调度,调度能力随集群线性增长,Master和Worker支持动态上下线。
1.CM和CDH版本为5.16.2
2.集群启用Kerberos
3.DolphinScheduler版本为1.3.8
4.集群HDFS和Yarn服务已启用HA
5.操作系统为RedHat7.6
2.部署环境说明
本次使用3个节点来部署DolphinScheduler集群,搭建一个具备高可用性的集群,具体部署节点及角色分配如下:
3.前置条件准备
1.准备最新的DolphinScheduler安装包地址如下:
https://dolphinscheduler.apache.org/zh-cn/download/download.html
将下载好的安装包上传至cdh02.fayson.com节点的/root目录下。
2.在集群所有节点修改/etc/profile配置文件,添加JDK环境变量,配置如下:
export JAVA_HOME=/usr/java/jdk1.8.0_232-cloudera/
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tool.jar:$CLASSPATH
执行source /etc/profile命令使其立即生效
注意:在DolphinScheduler集群的所有节点配置Java环境变量。
3.确保集群所有节点安装了psmisc包,安装命令如下:
yum -y install psmisc
4.DS集群安装依赖Zookeeper,由于Fayson的DS是与CDH集群集成,因此使用集群内的ZK,不独立安装
5.创建DS的部署用户和集群所有节点的hosts映射,在集群所有节点配置/etc/hosts映射文件,内容如下:
在集群所有节点使用root用户执行如下命令,向操作系统添加一个dolphin用户,设置用户密码为dolphin123,并为该用户配置sudo免密权限
useradd dolphin
echo "dolphin123" | passwd --stdin dolphin
echo 'dolphin ALL=(ALL) NOPASSWD: NOPASSWD: ALL' >> /etc/sudoers
sed -i 's/Defaults requirett/#Defaults requirett/g' /etc/sudoers
在所有节点执行如下命令切换只dolphin用户下验证sudo免密权限配置是否成功
su - dolphin
sudo ls /root/
注意:此处必须创建部署用户dolphin,且为该用户配置sudo免密,否则该用户无法通过sudo -u的方式切换不同的Linux用户的方式来实现多租户运行作业。
6.选择cdh02.fayosn.com节点作为主节点,配置02节点本机ssh免密登录及到03和04节点的免密登录(这里使用dolphin用户配置)
在集群所有节点执行如下命令为dolphin用户生成秘钥文件:
su - dolphin
ssh-keygen -t rsa
将dolphin用户/home/dolphin/.ssh目录下的公钥文件内容添加到authorized_keys文件中,并修改文件权限为600
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
ll ~/.ssh/authorized_keys
测试02节点免密登录配置是否成功
ssh localhost
将02节点生成的authorized_keys文件拷贝至其他节点的/home/dolphin/.ssh目录下:
scp ~/.ssh/authorized_keys dolphin@cdh[03-04].fayson.com:/home/dolphin/.ssh/
完成上述操作后,验证02到其他节点的免密登录配置是否成功,不需要配置密码则表示配置成功。
7.将上传到02节点的DolphinScheduler安装包拷贝解压至/home/dolphin目录下
cd /home/dolphin
tar -zxvf apache-dolphinscheduler-1.3.8-bin.tar.gz
chown -R dolphin. apache-dolphinscheduler-1.3.8-bin
4.安装MySQL服务
1.从MySQL官网下载5.7.32的安装包,并上传至cdh02.fayson.com的root目录下
2.在安装MYSQL服务的节点上执行如下命令添加mysql用户
useradd mysql
id mysql
3.将MySQL的安装包解压并移至/var/lib目录下
tar -zxvf mysql-5.7.32-el7-x86_64.tar.gz
mv mysql-5.7.32-el7-x86_64 /var/lib/mysql
chown -R mysql. /var/lib/mysql
4.创建过MySQL的数据目录
mkdir -p /var/lib/mysql/data
chown mysql. /var/lib/mysql/data/
5.修改MYSQL的配置文件/etc/my.cnf,内容如下:
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
socket=/var/lib/mysql/mysql.sock
[mysqld]
symbolic-links=0
#skip-grant-tables=1
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=/var/lib/mysql
# 设置mysql数据库的数据的存放目录
datadir=/var/lib/mysql/data
# 允许最大连接数
max_connections=1000
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
max_allowed_packet=16M
socket=/var/lib/mysql/mysql.sock
log-bin=mysql-bin
server-id=36
binlog_format=ROW
explicit_defaults_for_timestamp = 1
log_bin_trust_function_creators=1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#慢日志位置
slow_query_log_file=/var/log/mysql/slow_query.log
#慢日志时间
long_query_time=1
#开启慢日志
slow_query_log=TRUE
[client]
socket=/var/lib/mysql/mysql.sock
6.进入到MySQL的安装目录,执行如下命令初始化MySQL服务
cd /var/lib/mysql/
./bin/mysqld --initialize --user=mysql --basedir=/var/lib/mysql/ --datadir=/var/lib/mysql/data/
注意:在初始的过程中会随机产生root用户密码,需要记录,便于后面登录时使用。
7.执行如下命令,将MySQL命令添加到系统自启动服务列表中
cp /var/lib/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod + /etc/init.d/mysqld
8.执行如下命令将mysqld服务添加到自启动列表,并启动MySQL服务
systemctl enable mysqld
systemctl start mysqld
systemctl status mysqld
9.使用root用户登录MySQL服务并创建dolphin数据库
./bin/mysql -uroot -p
执行如下SQL语句修改root用户密码
set password=password('!@!Q123456');
flush privileges;
5.初始化DolphinScheduler数据库
1.由于数据库选择的是MySQL,在初始化前,需要将MySQL的JDBC驱动拷贝至解压后的/home/dolphin/apache-dolphinscheduler-1.3.8-bin/lib/目录下
sudo chown dolphin. mysql-connector-java-5.1.49-bin.jar
mv mysql-connector-java-5.1.49-bin.jar ./apache-dolphinscheduler-1.3.8-bin/lib/
2.使用root用户登录,执行如下SQL语句创建DS的数据库
CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'dolphins'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'dolphins'@'localhost' IDENTIFIED BY 'password';
flush privileges;
3.修改./apache-dolphinscheduler-1.3.8-bin/conf/datasource.properties 配置文件,配置DolphinScheduler的数据库访问信息
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.0.120:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=dolphins
spring.datasource.password=password
注意:配置文件中默认是postgresql,需要修改为MySQL配置。
4.完成上述配置修改后,执行如下命令初始化数据库
sh apache-dolphinscheduler-1.3.8-bin/script/create-dolphinscheduler.sh
注意:出现上述日志则表示数据库初始化成功。
6.DolphinScheduler集群部署
在前面完成了DS集群部署的前置准备工作,接下来需要将对集群的配置进行相应的修改,并将安装包下发至集群所有节点。
6.1 keytab文件准备
由于DS对接的是安全的CDH集群,需要用到Keytab文件,因此需要准备keytab文件并拷贝到集群所有节点的相同的安装目录下。这里的keytab文件主要用来访问HDFS服务,利用HDFS的存储能力存放一些脚本文件、数据文件等资源。
1.在kdc服务中添加一个hdfs的principal
[root@cdh01 ~]# kadmin.local
kadmin.local: addprinc hdfs@FAYSON.COM
2.执行如下命令生成一个hdfs 的keytab文件(keytab文件默认在当前目录)
xst -norandkey -k hdfs.keytab hdfs
3.执行如下命令测试生成的keytab文件是否可用
kinit -kt hdfs.keytab hdfs
klist
4.将生成的keytab文件拷贝至集群所有节点/opt/keytabs目录下,并修改文件的目录属主为dolphin用户
sudo mkdir /opt/keytabs
sudo chown -R dolphin. /opt/keytabs/
注意:确保keytabs目录在集群所有节点保持一致,且目录属主与部署用户一致。
6.2修改配置文件
由于安装包放置在02节点上,因此所有的配置均以02节点的修改为准,接下来主要介绍涉及到配置参数修改。
1.修改./conf/env/dolphinscheduler_env.sh环境变量脚本,环境变量根据实际情况进行相应的调整,本文档只保留Java相关环境变量,屏蔽大数据相关的环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_232-cloudera
export PATH=$JAVA_HOME/bin:$PATH
当前暂时未考虑使用DolphinScheduler自带的Spark、Flink相关Task,因此不考虑配置大数据相关的环境变量配置。
2.修改一键部署配置文件./conf/config/install_config.conf,根据提示修改相应为相应的配置
数据库相关配置参数:
# postgresql or mysql
dbtype="mysql"
dbhost="192.168.0.120:3306"
username="dolphins"
dbname="dolphinscheduler"
password="password"
配置Zookeeper信息、部署路径和部署用户参数:
zkQuorum="cdh01.fayson.com:2181,cdh03.fayson.com:2181,cdh03.fayson.com:2181"
installPath="/opt/dolphinscheduler"
deployUser="dolphin"
配置用户本地数据目录、资源存储类型及存储路径配置:
dataBasedirPath="/data3/dolphinscheduler"
resourceStorageType="HDFS"
resourceUploadPath="/dolphinscheduler"
defaultFS="hdfs://nameservice1"
CDH集群Yarn信息配置参数:
resourceManagerHttpAddressPort="8088"
yarnHaIps="cdh01.fayson.com,cdh03.fayson.com"
Kerberos相关配置参数:
hdfsRootUser="hdfs"
kerberosStartUp="true"
keytabUserName="hdfs@FAYSON.COM"
keytabPath="/opt/keytabs/hdfs.keytab"
kerberosExpireTime="2"
角色分配相关参数:(以生产环境为标准,需要考虑到各个角色的高可用问题,因此需要做相应的调整配置)
# api server port
apiServerPort="12345"
ips="cdh02.fayson.com,cdh03.fayson.com,cdh04.fayson.com"
sshPort="22"
masters="cdh02.fayson.com,cdh03.fayson.com,cdh04.fayson.com"
workers="cdh02.fayson.com:default,cdh03.fayson.com:default,cdh04.fayson.com:default"
alertServer="cdh02.fayson.com"
apiServers="cdh02.fayson.com,cdh03.fayson.com"
3.由于HDFS服务启用了HA,因此需要将CDH集群的HDFS的客户配置文件core-site.xml和hdfs-site.xml配置文件拷贝至/home/dolphin/apache-dolphinscheduler-1.3.8-bin/conf目录下
cp /etc/hadoop/conf/core-site.xml /home/dolphin/apache-dolphinscheduler-1.3.8-bin/conf
cp /etc/hadoop/conf/hdfs-site.xml /home/dolphin/apache-dolphinscheduler-1.3.8-bin/conf
6.3分发安装包并启动
1.使用dolphin用户在集群所有节点的创建/opt/dolphinscheduler目录(即部署目录)
mkdir /opt/dolphinscheduler
chown dolphin. /opt/dolphinscheduler
ll /opt/
2.在集群所有节点创建DolphinScheduler的用户数据目录(与前面配置文件中配置的路径保持一致)
mkdir -p /data3/dolphinscheduler
chown dolphin. /data3/dolphinscheduler
ll /data3/
3.在02节点的/home/dolphin/apache-dolphinscheduler-1.3.8-bin目录下,执行如下命令进行安装
sh install.sh
等待脚本运行成功,日志提示服务已启动
7.DolphinScheduler功能验证
1.服务启动成功后,在浏览器输入http://192.168.0.120:12345/dolphinscheduler
2.输入admin/dolphinscheduler123登录进入
3.创建一个fayson租户(该租户的明对应到集群Linux的用户,如果用户不存则ds会自动创建)
4.添加一个普通用户testa,并将用户绑定到fayosn租户下,该用户主要是用来登录DS的前端页面
5.使用testa用户登录DS平台
6.进入资源中心,创建一个文件夹或者上传一个文件,测试该功能基于HDFS存储功能是否正常
目录与文件均可也正常的创建,命令行确认是否以存在在HDFS
7.创建一个测试项目
8.进入新建的test-project项目中,创建一个工作流
9.创建一个测试的shell任务,进行一个简单的kinit认证
10.保存后,点击上线并运行测试
11.任务运行成功
8.总结
1.DolphinScheduler选择使用HDFS作为资源中心存储时,则需要配置CDH集群相关的配置参数, 如果HDFS启用HA则需要将相应的core-site.xml和hdfs-site.xml配置文件拷贝至DolphinScheduler部署目录的conf目录下
2.在使用一键部署脚本时,如果使用的非root用户,则需要确保在集群所有节点已存在该部署目录,且部署目录的属主为,运行一键部署脚本的用户,否则会造成部署时无法正常的拷贝部署文件到集群所有节点。
3.DolphinScheduler部署时需要配置用户本地数据目录,该目录需要手动创建且目录的属主与部署及服务启动用户一致,否则会导致在使用资源中心的上传等功能时失败。
4.进入DolphinScheduler界面进行使用时,必须要有相应的租户信息,且DS平台上的租户信息与集群的Linux用户一致,当用户不存在时DS会自动创建。
5.用户绑定了租户后,该用户提交的所有作业均是以sudo -u ${租户}的方式运行任务,因此在使用本地的资源文件时,需要确保租户又相应的访问权限,否则会导致作业运行失败。
6.在通过shell脚本或其他方式跑Hive作业、MapReduce等运行在集群的作业时,需要确保Yarn的配置信息无误,否则会导致作业运行失败(运行在Yarn上的作业,DS会根据作业的ApplicationID来判断任务运行是否成功)