前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DolphinScheduler-1.3.0-dev新功能尝鲜

DolphinScheduler-1.3.0-dev新功能尝鲜

作者头像
Eights
发布2020-07-10 14:31:47
1.7K0
发布2020-07-10 14:31:47
举报
文章被收录于专栏:Eights做数据Eights做数据

1

DolphinScheduler是什么

Apache DolphinScheduler是一个分布式去中心化,易扩展的可视化DAG工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。

DS曾用名称EasyScheduler,在进入Apache孵化器后,更名为DolphinScheduler。DS-1.2.0版本是进入Apache基金会后发布的第一个Apache版本,也是目前生产环境使用较多的版本。

最近,DS-1.3.0在封版进行测试和bug修复工作,即将ga,各位敬请期待。

本文较长,前半部分是组件部署,功能测试在后半部分,木有耐心的老铁可以直接阅读后面的内容。

官网

https://dolphinscheduler.apache.org/en-us/

github

https://github.com/apache/incubator-dolphinscheduler

ds-1.3.0特性及RoadMap录播

https://www.slidestalk.com/DolphinScheduler/Dolphin_Scheduler_Roadmap?video

2

DS-1.3.0新特性

架构调整

  • Master-Worker直接通信,降低延迟
  • 去除Worker的DB操作,职责更单一
  • 减轻DB元数据库的压力,减少极端情况下可能的调度延时
  • Master添加多种任务分发策略
    • 随机
    • 轮询
    • CPU和内存线性加权

新增任务类型

  • 数据同步节点
    • DataX
    • Sqoop
  • 条件分支节点

易用性

  • 提供Ambari插件
  • 支持k8s
  • 资源中心目录化

其他特性(部分)

  • 适配Windows任务
  • 工作流复制
  • 删流程实例级联删除任务日志
  • 简化配置,优化部署体验

3

DS-1.3.0部署(CDH5.16.2)

集群环境

  • CDH5.16.2

DS源码编译

代码拉取
代码语言:javascript
复制
git clone https://github.com/apache/incubator-dolphinscheduler.git
适配CDH5.16.2

创建CDH分支

代码语言:javascript
复制
git checkout dev-1.3.0
git checkout -b dev-1.3.0-cdh5.16.2

适配CDH5.16.2

  • 修改外层pom文件
代码语言:javascript
复制
# 修改hadoop版本,也可以不修改
<hadoop.version>2.6.0</hadoop.version>
# 修改hive版本,必须进行调整
<hive.jdbc.version>1.1.0</hive.jdbc.version>
# 修改打包的version(所有模块均需要进行修改)
<version>1.3.0-cdh5.16.2</version>
源码编译
代码语言:javascript
复制
mvn -U clean package -Prelease -Dmaven.test.skip=true

正常编译完成后,会在dolphinscheduler-dist下生成:

apache-dolphinscheduler-incubting-1.3.0-cdh5.16.2-dolphinscheduler-bin.tar.gz。从1.2.1开始,ds打包之后并不会生成前端的tar.gz文件

组件部署

准备工作

创建部署用户免密(部署机都需要做)
代码语言:javascript
复制
# 添加部署用户
useradd dscheduler;
# 设置密码
echo "dscheduler" | passwd --stdin dscheduler
# 配置免密
echo 'dscheduler ALL=(ALL) NOPASSWD: NOPASSWD: ALL' >> /etc/sudoers

# 切换到部署用户并生成ssh key
su dscheduler;
ssh-keygen -t rsa;
ssh-copy-id -i ~/.ssh/id_rsa.pub dscheduler@[hostname];
创建MySQL数据库
代码语言:javascript
复制
CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE
utf8_general_ci;
CREATE USER 'dscheduler'@'%' IDENTIFIED BY 'dscheduler';
GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'dscheduler'@'%' IDENTIFIED BY 'dscheduler';
flush privileges;

部署实施

上传安装包
解压安装包&修改权限
代码语言:javascript
复制
# /u01 为存放ds安装包的目录,跟根据实际情况进行调整
tar -zxvf apache-dolphinscheduler-incubating-1.3.0-cdh5.16.2-dolphinscheduler-bin.tar.gz -C /u01

# 改一波目录名称
mv apache-dolphinscheduler-incubating-1.3.0-cdh5.16.2-dolphinscheduler-bin.tar.gz ds-130-backend

# 修改所属用户和权限
chmod -R 755 ds-130-backend;
chown -R dscheduler:dscheduler ds-130-backend;

ds安装包各目录功能如下

代码语言:javascript
复制
bin - 服务启动脚本
conf - 配置文件目录
DISCLAIMER
install.sh - 一键部署脚本
lib - 依赖的jar包
LICENSE
licenses
NOTICE
script - 集群启动停止,更新数据库等脚本
sql - sql文件
ui - 前端UI
初始化元数据库
  • ds默认的元数据库是pg,Hadoop平台一般使用mysql作为元数据,这里使用mysql
    • 需要上传mysql的连接jar到ds的lib目录下,必须要做
  • 修改数据库配置
代码语言:javascript
复制
vi /u01/ds-130-backend/conf/datasource.properties;

# 修改pg为mysql 填写刚才配置的数据库用户密码
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://xxxxxx:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=xxxxxx
spring.datasource.password=xxxxxx
  • 初始化数据库
代码语言:javascript
复制
./script/create-dolphinscheduler.sh
配置ds的环境变量
代码语言:javascript
复制
vi /u01/ds-130--backend/conf/env/dolphinscheduler_env.sh

# 测试集群上没有datax和flink请忽略相关配置
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/spark
export SPARK_HOME2=/opt/cloudera/parcels/SPARK2/lib/spark2
export PYTHON_HOME=/usr/local/anaconda3/bin/python
export JAVA_HOME=/usr/java/jdk1.8.0_131
export HIVE_HOME=/opt/cloudera/parcels/CDH/lib/hive
export FLINK_HOME=/opt/soft/flink
export DATAX_HOME=/opt/soft/datax/bin/datax.py
集群部署参数配置
  • ds在1.3.0之前,一键部署的配置文件在install.sh中。1.3.0版本的install.sh脚本只是一个部署脚本,部署配置文件在conf/config/install_config.conf中
  • 下面是1.3.0的配置文件,与之前版本的配置文件相比,精简了不少,只保留了必要的配置,如果是从老版本升级,需要自行去对应的模块配置文件中进行修改
  • 对比1.2.0配置文件中去除的配置如下(升级需要关注,新版本建议各位老铁细看一下配置的变更项,这次测试的1.3.0的dev版本,正式版本ga之后会出一个详细的配置解读)
    • excel文件路径 xlsFilePath -> alert.properties | xls.file.path
    • alert master worker api模块的配置 -> 对应模块的properties文件修改
    • 执行任务配置 -> conf/common.properties修改
      • programPath
      • downloadPath
      • execPath
    • 开发状态 devState -> conf/common.properties修改
    • zk的连接配置和znode相关配置,如果使用一套zk托管了多套ds,需要自行修改配置 -> conf/zookeeper.properties
    • 配置文件中,在配置worker机器的时候,需要在后面配置上worker的所属worker group,这是因为在新版本中,worker group分组信息从mysql移动到了zk中
代码语言:javascript
复制
代码语言:javascript
复制
# NOTICE : If the following config has special characters in the variable `.*[]^${}\+?|()@#&`, Please escape, for example, `[` escape to `\[`
# postgresql or mysql
dbtype="mysql"

# db config
# db address and port
dbhost="xxxx:3306"

# db username
username="xxxx"

# database name
dbname="dolphinscheduler"

# db passwprd
# NOTICE: if there are special characters, please use the \ to escape, for example, `[` escape to `\[`
password="xxxx"

# zk cluster
zkQuorum="xxx:2181,xxx:2181,xxx:2181"

# Note: the target installation path for dolphinscheduler, please not config as the same as the current path (pwd)
installPath="/opt/ds-1.3.0-dev-agent"

# deployment user
# Note: the deployment user needs to have sudo privileges and permissions to operate hdfs. If hdfs is enabled, the root directory needs to be created by itself
deployUser="dscheduler"


# alert config
# mail server host
mailServerHost="xxx"

# mail server port
# note: Different protocols and encryption methods correspond to different ports, when SSL/TLS is enabled, make sure the port is correct.
mailServerPort="25"

# sender
mailSender="xxx"

# user
mailUser="xxx"

# sender password
# note: The mail.passwd is email service authorization code, not the email login password.
mailPassword="xxx"

# TLS mail protocol support
starttlsEnable="false"

# SSL mail protocol support
# only one of TLS and SSL can be in the true state.
sslEnable="false"

#note: sslTrust is the same as mailServerHost
sslTrust="xxx"


# resource storage type:HDFS,S3,NONE
resourceStorageType="HDFS"

# if resourceStorageType is HDFS,defaultFS write namenode address,HA you need to put core-site.xml and hdfs-site.xml in the conf directory.
# if S3,write S3 address,HA,for example :s3a://dolphinscheduler,
# Note,s3 be sure to create the root directory /dolphinscheduler
defaultFS="hdfs://master.eights.com:8020"

# if resourceStorageType is S3, the following three configuration is required, otherwise please ignore
s3Endpoint="http://192.168.xx.xx:9010"
s3AccessKey="xxxxxxxxxx"
s3SecretKey="xxxxxxxxxx"

# if not use hadoop resourcemanager, please keep default value; if resourcemanager HA enable, please type the HA ips ; if resourcemanager is single, make this value empty
yarnHaIps="192.168.xx.xx,192.168.xx.xx"

# if resourcemanager HA enable or not use resourcemanager, please skip this value setting; If resourcemanager is single, you only need to replace yarnIp1 to actual resourcemanager hostname.
singleYarnIp="master.eights.com"

# resource store on HDFS/S3 path, resource file will store to this hadoop hdfs path, self configuration, please make sure the directory exists on hdfs and have read write permissions。/dolphinscheduler is recommended
resourceUploadPath="/dscheduler"

# who have permissions to create directory under HDFS/S3 root path
# Note: if kerberos is enabled, please config hdfsRootUser=
hdfsRootUser="hdfs"

# kerberos config
# whether kerberos starts, if kerberos starts, following four items need to config, otherwise please ignore
kerberosStartUp="false"
# kdc krb5 config file path
krb5ConfPath="$installPath/conf/krb5.conf"
# keytab username
keytabUserName="hdfs-mycluster@ESZ.COM"
# username keytab path
keytabPath="$installPath/conf/hdfs.headless.keytab"


# api server port
apiServerPort="12345"


# install hosts
# Note: install the scheduled hostname list. If it is pseudo-distributed, just write a pseudo-distributed hostname
ips="master.eights.com"

# ssh port, default 22
# Note: if ssh port is not default, modify here
sshPort="22"

# run master machine
# Note: list of hosts hostname for deploying master
masters="master.eights.com"

# run worker machine
# note: need to write the worker group name of each worker, the default value is "default"
workers="master.eights.com:default"

# run alert machine
# note: list of machine hostnames for deploying alert server
alertServer="master.eights.com"

# run api machine
# note: list of machine hostnames for deploying api server
apiServers="master.eights.com"

# whether to start monitoring self-starting scripts
monitorServerState="false"
添加Hadoop集群配置文件
  • 如果集群未启用HA,直接在install_config.conf文件中进行编写
  • 如果集群启用了HA,请将hadoop的hdfs-site.xml和core-site.xml拷贝到/conf目录下
修改JVM参数
  • 两个文件
    • /bin/dolphinscheduler-daemon.sh
    • /scripts/dolphinscheduler-daemon.sh
代码语言:javascript
复制
export DOLPHINSCHEDULER_OPTS="-server -Xmx16g -Xms1g -Xss512k
-XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled
-XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods
-XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70"
一键部署&进程检查&单服务启停
  • 一键部署
代码语言:javascript
复制
sh install.sh
  • 进程检查
代码语言:javascript
复制
su dscheduler;
jps;
  • 服务启停
代码语言:javascript
复制
# 一键停止
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-server
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

前端访问

  • 1.3.0中的前端不需使用nginx
  • 直接使用[api-server]:12345/dolphinscheduler进行访问
  • 访问成功 - 账号admin,密码dolphinscheduler123

4

新增组件功能测试

shell使用资源文件

  • 在资源中心中创建一个文件夹-文件夹测试,然后创建一个资源文件-这是一个文件测试.sh
  • 文件内容,打印简单的字符串
  • 新建shell任务,按照老版本的方式引用资源文件
  • 运行任务,出现找不到文件的异常
  • 找到worker机器,查看生成的执行文件,发现创建资源文件的时候,新建了资源的上级目录文件夹
  • 修改shell中引用资源文件的方式,加上上级资源目录
  • 重新运行任务,成功

总结:ds-1.3.0引入了资源目录,在任务节点应用的时候,需要加上对应资源的目录层级!!!

条件分支任务

  • 创建一个条件分支任务,每个shell都是简单打印1,2,3
  • 根据shell-1的执行情况,决定执行shell-2还是shell-3
  • 条件节点的配置如下,这里特别注意,条件节点中的自定义参数,自定义的是前置任务的状态判断!!!这个自定义参数必须要选的,不然条件分支会一直处于成功状态。

shell-1执行成功测试

执行结果,1节点执行成功,然后执行2节点,3节点未执行

shell-1执行失败测试

执行结果,1节点执行失败,执行3节点,2节点未执行

总结:条件节点!这个真的可以。

Sqoop

  • 目前的Sqoop任务基本满足需求,单表导入|查询接入|Hive导出这里就不进行测试了
  • 下面是槽点(手动狗头

  • 接入和导出不支持-D类型的Hadoop自定义参数,如设置MR任务的名称,MR的内存和数量等自定义参数
    • 导入大表的时候有可能OOM,目前不支持设置Map和Reduce的内存
  • 不支持split-by字段。在-m大于1的条件下,如果关系库表的主键不是自增的,Sqoop有可能会造成导入Hadoop的数据重复,一般的解决方案是指定一个split-by字段。因此,split-by需要支持。
  • 不可自定义参数,比如导入mysql,某些表可以加上--direct加快导入速度

  • 解决方案
    • 任务名称是通用的,需要在Sqoop页面上补充作为必选项
    • 增加两个自定义参数框,用于用户编写所需的自定义参数
      • MR任务级别的参数,如设置MR的内存,Mapper数量和Reducer数量等
      • Sqoop任务级别的参数,类似--direct和--fetch-size这些在特定场景下使用的参数
    • 类似DataX节点,直接增加一个自定义配置

5

新功能-点点点

工作流复制

DAG格式化

美化前

美化后

6

总结

  1. DS-1.3.0架构大的变动就是任务队列的变化,在之前的版本中任务队列是存到zk上的,worker去抢锁,然后消费对应znode中累积的任务数据,而1.3.0引入了netty框架进行master-worker之间的任务数据传输。减少了分布式锁的竞争,降低任务触发延迟
  2. 引入了数据同步节点,DataX和Sqoop,虽然封装的程度还不算很完善,但是能用。当然,为了好用需要更多的社区用户提交issue,提pr!!!
  3. 条件分支节点真的可以,不过建议大家多尝试一下条件节点的逻辑组合,有点绕,需要多尝试!!!
  4. 资源目录终于是有了,但是还有进步的空间。点击按钮创建目录,还是没有右键来得自然
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Eights做数据 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 官网
  • github
  • ds-1.3.0特性及RoadMap录播
  • 新增任务类型
  • 易用性
  • 其他特性(部分)
  • DS源码编译
    • 代码拉取
      • 适配CDH5.16.2
        • 源码编译
        • 组件部署
          • 准备工作
            • 创建部署用户免密(部署机都需要做)
            • 创建MySQL数据库
          • 部署实施
            • 上传安装包
            • 解压安装包&修改权限
            • 初始化元数据库
            • 配置ds的环境变量
            • 集群部署参数配置
            • 添加Hadoop集群配置文件
            • 修改JVM参数
            • 一键部署&进程检查&单服务启停
          • 前端访问
            • 条件分支任务
              • Sqoop
                • 工作流复制
                  • DAG格式化
                  相关产品与服务
                  专用宿主机
                  专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档