Apache DolphinScheduler 共同成长历程使用心得

 【本文正在参与 “拥抱开源 — Apache DolphinScheduler 有奖征稿活动】

拥开源—DolphinScheduler 有奖征稿活动 -CSDN

1.安装篇

安装提醒,多看官网,官网写的很详细,多看几遍官网,基本问题都能解决,毕竟国人开源的项目,整体官网还是很友好的,相关安装文档参考官网。

Apache DolphinScheduler | 首页

以下根据本人解决问题思路处理,可能根据实际有些差异,供大家参考。

以使用CDH 6.3.2为平台,DolphinScheduler 1.3.3 从2020年12月到使用到现在。

1.运行参数修改

dolphinscheduler_env.sh参数改成:

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/cloudera/parcels/CDH/lib/spark1
#export SPARK_HOME2=/opt/cloudera/parcels/CDH/lib/spark2
#export PYTHON_HOME=/usr/local/python3
export JAVA_HOME=/usr/java/jdk1.8.0_172-amd64
export HIVE_HOME=/opt/cloudera/parcels/CDH/lib/hive

export PATH=$HADOOP_HOME/bin:$SPARK_HOME1/bin:$SPARK_HOME2/bin:$PYTHON_HOME:$JAVA_HOME/bin:$HIVE_HOME/bin:$PATH:$FLINK_HOME/bin:$DATAX_HOME:$PATH

我们只使用shell调度模式,没有使用dolphin自带的spark 之类的,所以就没配置,有需要按照这样配置,这样dolphin才能正常识别环境,运行相关脚本,需要特别注意

2.安装过程中如果遇到脚本正常执行,doplphin却显示失败可能原因:

a.zookeeper配置错误

#Zookeeper地址
zkQuorum="192.168.xx.xx:2181,192.168.xx.xx:2181,192.168.xx.xx:2181"

b.yarn配置错误

HA 和 单 ResourceManager 需要注意以下两个参数配置,认真读完官网文档

官网参数:

# 如果没有使用到Yarn,保持以下默认值即可;如果ResourceManager是HA,则配置为ResourceManager节点的主备ip或者hostname,比如"192.168.xx.xx,192.168.xx.xx";如果是单ResourceManager请配置yarnHaIps=""即可
yarnHaIps="192.168.xx.xx,192.168.xx.xx"

# 如果ResourceManager是HA或者没有使用到Yarn保持默认值即可;如果是单ResourceManager,请配置真实的ResourceManager主机名或者ip
singleYarnIp="yarnIp1"

#####按照以下方式配置#####

如果ResourceManager是HA
yarnHaIps=""即可
yarnHaIps="192.168.xx.xx,192.168.xx.xx"
singleYarnIp="yarnIp1"(默认不要更改)

如果如果ResourceManager是HA或者没有使用到Yarn保持默认值即可;如果是单ResourceManager,把第一个参数注释掉
#yarnHaIps="192.168.xx.xx,192.168.xx.xx"
singleYarnIp="yarnIp1"

3.安装邮箱报警无法正常使用,可能原因:

以下是官网文档里的 我这边添加注释注意事项

# 邮件配置,以qq邮箱为例
# 邮件协议
mailProtocol="SMTP"

# 邮件服务地址
mailServerHost="smtp.qq.com"

(这个地址注意查找下,不要配置错)

# 邮件服务端口
mailServerPort="25"

(如果使用阿里云这个端口默认是关闭的,需要注意,采用在自己电脑 telnet 主机ip 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"

(需要注意:
服务器端口如果是465 
starttlsEnable="false"
sslEnable="true"
服务器端口是:587
starttlsEnable="true"
sslEnable="false")

# 邮件服务地址值,参考上面 mailServerHost
sslTrust="smtp.qq.com"

4.特别注意项

安装好dolphinscheduler后,后期需要更改配置文件参数,都要先停止dolphinscheduler所以的服务,

在bin/目录下,然后在原始安装文件里进行更改,就是第一次解压安装的文件,不需要到每个服务器里去更改已经安装的目录,更改后再执行sh install.sh,这样所有的机器服务器都正常配置了,这样才能避免很多坑。

2.使用配置篇

我这里只补充写使用的问题,正式介绍参考官网的文档,很详细的

https://dolphinscheduler.apache.org/zh-cn/docs/latest/user_doc/system-manual.html

1.租户配置问题

进入安全中心配置租户,租户这个就是对应Liunx 用户,这个配置的租户在Liunx 需要给予相关权限,这个需要注意,好多时候会报权限问题,例如我们配置的调度文件在/mnt/XXX/目录下,我们使用 dolphinscheduler租户调度时,会给这个目录 dolphinscheduler用户权限,其他同理。

img

2.用户配置

这里用户就是登录DolphinScheduler 用户,这里尽可能配置个主要维护人用户,加上用户的邮箱,用于添加在报警功能,这样加在报警组里,整个服务挂掉,会邮件报警的。

img

3.告警组配置

这里把上面用户加进来,这样服务就可以正常报警了,此报警配置组,用户在工作流中报警显示,所以请认真配置

img

4.Worker分组管理

这里就是的这个配置控制,它决定worker提交的机器位置。

#在哪些机器上部署DS服务,本机选localhost
ips="ds1,ds2,ds3,ds4"

#ssh端口,默认22
sshPort="22"

#master服务部署在哪台机器上
masters="ds1,ds2"

#worker服务部署在哪台机器上,并指定此worker属于哪一个worker组,下面示例的default即为组名
workers="ds3:default,ds4:default"

#报警服务部署在哪台机器上
alertServer="ds2"

#后端api服务部署在在哪台机器上
apiServers="ds1"

这里会体现在节点配置中

img

3.项目管理

我们采用迭代方式进行维护,不同大家可按照不同业务部门进行维护各项目是相互独立,是可以进行依赖的,不过不建议跨项目依赖。

以下仅供参考:

1.工作流定义维护

目前我们调度的项目是整个离线数仓项目

按照标准的分层 ODS, DWD ,DWS ,ADS 进行调度,

按照传统方式把各层都放在一个工作流中,通过一个总工作流进行依赖调度

img

这样整体维护行较差,所以我们这边采用按照分层信息不同类型的表按照不同的用处

这样做了具体细分,做到解耦。

ods层和dwd层脚本较多 ,可以根据业务进行划分 ,让他们相关依赖,这样 你在添加先脚本的时候 不需要再考虑 跨层依赖

再进行采用sub_process 进行组个 全部上线后,只需要定时调度 ods_dwd_dws_ads 这个sub_process任务

如果ods层或者其他层 层级间依赖过多 ,存在一种现象

我们可以使用sub_process 进行单层依赖,这样细分进行解耦合

制作成这样

然后再配合上上面的总任务调度使用 ,

这样整个项目关系比较清晰,减少了不少依赖的情况,添加新脚本时候只需要按照分类加进去就行,维护起来比较方便。

要充分使用sub_process 功能 。

2.工作流脚本维护

我们这边脚本都是采用shell方式调度,相关sqoop 脚本也是自己写好的,这样方便整个数仓ETL脚本维护,

只需要把项目脚本当在/mnt/下就行,通过git进行脚本更新迭代,

我们做了全局变量

image-20210609164008267

参考事例

在全局变量中设置例如 project_address    /mnt/xx/    变量用${project_address}引用

image-20210609163923674

这样方便维护使用。

3.判断CONDITIONS使用

img

此时跑的情况为 000 成功 1-23 成功 走222

img

此时 000成功 1-23失败 走333

4.解决跨项目的依赖问题

如果出现相关需要项目的情况

使用DEPENDENT功能

image-20210609164954314

此项可以解决许多问题,比如脚本一个小时跑一次,前一个显示没有跑完,后一个小时不跑情况,就利用这个功能做个判断,检测前一小时任务是否成功就行了,这是个很好的功能。

5.任务启动参数配置

1.失败策略

继续:

image-20210609170419302

如果此时A成功 ,D失败了, 依然会运行C ;

结束:

如果此时A 成功,(B,C同时跑),D失败了,就会暂停整个工作里,不管C 是否正常跑完。

5.资源使用情况:

DolphinScheduler调度,如果资源不足情况,会无法正常调度,相关参数在配置中,所以请保证服务器的资源充足

image-20210609174653335

image-20210609174731134

4.相关延伸

由于DolphinScheduler没有对工作流具体脚本的用时整体排序统计,不利于团队对脚本的优化,所以我们做了两张表以下是相关SQL ,使用相关报表工具进行展示

1.最近XXX个任务排名:

SELECT name,
       DATE_FORMAT(start_time, '%Y-%m-%d')                  AS date_time,
       DATE_FORMAT(start_time, '%H:%i:%s')                  AS start_time,
       DATE_FORMAT(end_time, '%H:%i:%s')                    AS end_time,
       CONCAT(
               CONCAT(TIMESTAMPDIFF(SECOND, start_time, end_time) DIV 3600, '时'),
               CONCAT(TIMESTAMPDIFF(SECOND, start_time, end_time) MOD 3600 DIV 60, '分'),
               CONCAT(TIMESTAMPDIFF(SECOND, start_time, end_time) MOD 3600 MOD 60 DIV 1, '秒')
           )                                                AS time,
       TIMESTAMPDIFF(SECOND, start_time, end_time) MOD 3600 AS s_time
FROM dolphinscheduler.t_ds_task_instance
WHERE task_type = "SHELL"
  and state = 7
  and TO_DAYS(submit_time) = TO_DAYS(now())
ORDER BY s_time DESC
limit XXX;

2.最近5天任务用时排名

SELECT name,
       DATE_FORMAT(start_time, '%Y-%m-%d')                  AS date_time,
       DATE_FORMAT(start_time, '%H:%i:%s')                  AS start_time,
       DATE_FORMAT(end_time, '%H:%i:%s')                    AS end_time,
       CONCAT(
               CONCAT(TIMESTAMPDIFF(SECOND, start_time, end_time) DIV 3600, '时'),
               CONCAT(TIMESTAMPDIFF(SECOND, start_time, end_time) MOD 3600 DIV 60, '分'),
               CONCAT(TIMESTAMPDIFF(SECOND, start_time, end_time) MOD 3600 MOD 60 DIV 1, '秒')
           )                                                AS time,
       TIMESTAMPDIFF(SECOND, start_time, end_time) MOD 3600 AS s_time
FROM dolphinscheduler.t_ds_task_instance
WHERE
  task_type = "SHELL"
  and state = 7
  and date_sub(curdate(), INTERVAL 5 DAY) <= start_time
ORDER BY s_time DESC

5.相关吐槽

由于目前版本任务才分json拆分问题,导致导出工作流到新环境中出出现问题,需要手动重新对应工作流处理上线,目前只能人工解决,对整体维护起来不太舒服,官方说2.0版本以后会拆分处理,解决此问题,其他的问题基本都能解决。

以上是使用的相关经验总结和吐槽,希望DolphinScheduler越来越好。

【本文正在参与 “拥抱开源 — Apache DolphinScheduler 有奖征稿活动】

拥开源—DolphinScheduler 有奖征稿活动 -CSDN

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值