前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0865-5.16.2-如何搭建DolphinScheduler集群并与安全的CDH集成

0865-5.16.2-如何搭建DolphinScheduler集群并与安全的CDH集成

作者头像
Fayson
发布2021-11-02 15:24:40
2.5K0
发布2021-11-02 15:24:40
举报
文章被收录于专栏:Hadoop实操Hadoop实操

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安装包地址如下:

代码语言:javascript
复制
https://dolphinscheduler.apache.org/zh-cn/download/download.html

将下载好的安装包上传至cdh02.fayson.com节点的/root目录下。

2.在集群所有节点修改/etc/profile配置文件,添加JDK环境变量,配置如下:

代码语言:javascript
复制
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包,安装命令如下:

代码语言:javascript
复制
yum -y install psmisc

4.DS集群安装依赖Zookeeper,由于Fayson的DS是与CDH集群集成,因此使用集群内的ZK,不独立安装

5.创建DS的部署用户和集群所有节点的hosts映射,在集群所有节点配置/etc/hosts映射文件,内容如下:

在集群所有节点使用root用户执行如下命令,向操作系统添加一个dolphin用户,设置用户密码为dolphin123,并为该用户配置sudo免密权限

代码语言:javascript
复制
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免密权限配置是否成功

代码语言:javascript
复制
su - dolphin
sudo ls /root/

注意:此处必须创建部署用户dolphin,且为该用户配置sudo免密,否则该用户无法通过sudo -u的方式切换不同的Linux用户的方式来实现多租户运行作业。

6.选择cdh02.fayosn.com节点作为主节点,配置02节点本机ssh免密登录及到03和04节点的免密登录(这里使用dolphin用户配置)

在集群所有节点执行如下命令为dolphin用户生成秘钥文件:

代码语言:javascript
复制
su - dolphin
ssh-keygen -t rsa

将dolphin用户/home/dolphin/.ssh目录下的公钥文件内容添加到authorized_keys文件中,并修改文件权限为600

代码语言:javascript
复制
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
ll ~/.ssh/authorized_keys 

测试02节点免密登录配置是否成功

代码语言:javascript
复制
ssh localhost

将02节点生成的authorized_keys文件拷贝至其他节点的/home/dolphin/.ssh目录下:

代码语言:javascript
复制
scp ~/.ssh/authorized_keys dolphin@cdh[03-04].fayson.com:/home/dolphin/.ssh/

完成上述操作后,验证02到其他节点的免密登录配置是否成功,不需要配置密码则表示配置成功。

7.将上传到02节点的DolphinScheduler安装包拷贝解压至/home/dolphin目录下

代码语言:javascript
复制
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用户

代码语言:javascript
复制
useradd mysql
id mysql

3.将MySQL的安装包解压并移至/var/lib目录下

代码语言:javascript
复制
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的数据目录

代码语言:javascript
复制
mkdir -p /var/lib/mysql/data
chown mysql. /var/lib/mysql/data/

5.修改MYSQL的配置文件/etc/my.cnf,内容如下:

代码语言:javascript
复制
[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服务

代码语言:javascript
复制
cd /var/lib/mysql/
./bin/mysqld --initialize --user=mysql --basedir=/var/lib/mysql/ --datadir=/var/lib/mysql/data/

注意:在初始的过程中会随机产生root用户密码,需要记录,便于后面登录时使用。

7.执行如下命令,将MySQL命令添加到系统自启动服务列表中

代码语言:javascript
复制
cp /var/lib/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod + /etc/init.d/mysqld

8.执行如下命令将mysqld服务添加到自启动列表,并启动MySQL服务

代码语言:javascript
复制
systemctl enable mysqld
systemctl start mysqld
systemctl status mysqld

9.使用root用户登录MySQL服务并创建dolphin数据库

代码语言:javascript
复制
./bin/mysql -uroot -p

执行如下SQL语句修改root用户密码

代码语言:javascript
复制
set password=password('!@!Q123456');
flush privileges;

5.初始化DolphinScheduler数据库

1.由于数据库选择的是MySQL,在初始化前,需要将MySQL的JDBC驱动拷贝至解压后的/home/dolphin/apache-dolphinscheduler-1.3.8-bin/lib/目录下

代码语言:javascript
复制
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的数据库

代码语言:javascript
复制
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的数据库访问信息

代码语言:javascript
复制
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.完成上述配置修改后,执行如下命令初始化数据库

代码语言:javascript
复制
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

代码语言:javascript
复制
[root@cdh01 ~]# kadmin.local 
kadmin.local:  addprinc hdfs@FAYSON.COM

2.执行如下命令生成一个hdfs 的keytab文件(keytab文件默认在当前目录)

代码语言:javascript
复制
xst -norandkey -k hdfs.keytab hdfs

3.执行如下命令测试生成的keytab文件是否可用

代码语言:javascript
复制
kinit -kt hdfs.keytab hdfs
klist

4.将生成的keytab文件拷贝至集群所有节点/opt/keytabs目录下,并修改文件的目录属主为dolphin用户

代码语言:javascript
复制
sudo mkdir /opt/keytabs
sudo chown -R dolphin. /opt/keytabs/

注意:确保keytabs目录在集群所有节点保持一致,且目录属主与部署用户一致。

6.2修改配置文件

由于安装包放置在02节点上,因此所有的配置均以02节点的修改为准,接下来主要介绍涉及到配置参数修改。

1.修改./conf/env/dolphinscheduler_env.sh环境变量脚本,环境变量根据实际情况进行相应的调整,本文档只保留Java相关环境变量,屏蔽大数据相关的环境变量

代码语言:javascript
复制
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,根据提示修改相应为相应的配置

数据库相关配置参数:

代码语言:javascript
复制
# postgresql or mysql
dbtype="mysql"
dbhost="192.168.0.120:3306"
username="dolphins"
dbname="dolphinscheduler"
password="password"

配置Zookeeper信息、部署路径和部署用户参数:

代码语言:javascript
复制
zkQuorum="cdh01.fayson.com:2181,cdh03.fayson.com:2181,cdh03.fayson.com:2181"
installPath="/opt/dolphinscheduler"
deployUser="dolphin"

配置用户本地数据目录、资源存储类型及存储路径配置:

代码语言:javascript
复制
dataBasedirPath="/data3/dolphinscheduler"
resourceStorageType="HDFS"
resourceUploadPath="/dolphinscheduler"
defaultFS="hdfs://nameservice1"

CDH集群Yarn信息配置参数:

代码语言:javascript
复制
resourceManagerHttpAddressPort="8088"
yarnHaIps="cdh01.fayson.com,cdh03.fayson.com"

Kerberos相关配置参数:

代码语言:javascript
复制
hdfsRootUser="hdfs"
kerberosStartUp="true"
keytabUserName="hdfs@FAYSON.COM"
keytabPath="/opt/keytabs/hdfs.keytab"
kerberosExpireTime="2"

角色分配相关参数:(以生产环境为标准,需要考虑到各个角色的高可用问题,因此需要做相应的调整配置)

代码语言:javascript
复制
# 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目录下

代码语言:javascript
复制
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目录(即部署目录)

代码语言:javascript
复制
mkdir /opt/dolphinscheduler
chown dolphin. /opt/dolphinscheduler
ll /opt/

2.在集群所有节点创建DolphinScheduler的用户数据目录(与前面配置文件中配置的路径保持一致)

代码语言:javascript
复制
mkdir -p /data3/dolphinscheduler
chown dolphin. /data3/dolphinscheduler
ll /data3/

3.在02节点的/home/dolphin/apache-dolphinscheduler-1.3.8-bin目录下,执行如下命令进行安装

代码语言:javascript
复制
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来判断任务运行是否成功)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档