当前位置:   article > 正文

12-海豚调度器DolphinScheduler

海豚调度器

一、概述

跟之前学习过的Azkaban非常的相似,两者二选一。架构师就是老中医(同样的病,抓不同的药)。

  1. Azkaban 能做任务调度,任务编排 A --> B
  2. 还可以做定时任务,还能预警(发邮件,发钉钉,打电话)

image.png

  1. 数仓项目因为是分层的,分层的数据之间,是有先后顺序的。所以可以编写
  2. ods.sh dwd.sh dws.sh dim.sh ads.sh 编排好顺序,每天执行一次,每天自动分析,自动导出指标,可视化界面一刷新就是新的指标数据。

DolphinScheduler是2019年中国易观公司开源的一个调度系统。目前是apache顶级项目之一:https://dolphinscheduler.apache.org/zh-cn/index.html

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

DAG --有向无环图,有顺序,但是不会形成环的图表。

二、DS架构图(了解即可)

  1. DolphinScheduler的主要角色如下:
  2. MasterServer采用分布式无中心设计理念,MasterServer主要负责 DAG 任务切分任务提交任务监控,并同时监听其它MasterServer和WorkerServer的健康状态
  3. WorkerServer也采用分布式无中心设计理念,WorkerServer主要负责任务的执行和提供日志服务
  4. ZooKeeper服务,系统中的MasterServer和WorkerServer节点都通过ZooKeeper来进行集群管理和容错
  5. Alert服务,提供告警相关服务
  6. API接口层,主要负责处理前端UI层的请求
  7. UI,系统的前端页面,提供系统的各种可视化操作界面

 三、DolphinScheduler部署说明

  1. DS是一个大型的,专业的调度工具,非常的耗内存。
  2. 到公司一定要看好是什么操作系统:
  3. CentOS 6.x和7.x 命令有所变化 7.x systemctl restart 服务名
  4. 6.x service mysql restart等
  5. Unbantu 或者 redhat 命令也不一样。

四、安装部署

DolphinScheduler支持多种部署模式,包括单机模式(Standalone)、伪集群模式(Pseudo-Cluster)、集群模式(Cluster)等。

虚拟机的准备工作:

如果是集群的话(至少 8G+3G+3G),如果是单台的(10G+)

4.1 单机模式

单机模式(standalone)模式下,所有服务均集中于一个StandaloneServer进程中,并且其中内置了注册中心Zookeeper和数据库H2。只需配置JDK环境,就可一键启动DolphinScheduler,快速体验其功能。

配置链接:

https://dolphinscheduler.apache.org/zh-cn/docs/latest/user_doc/guide/installation/standalone.html

  1. 注意: Standalone 仅建议 20 个以下工作流使用,因为其采用内存式的 H2 Database, Zookeeper Testing Server,任务过多可能导致不稳定,并且如果重启或者停止 standalone-server 会导致内存中数据库里的数据清空。
  2. 如何启动和关闭单机版:
  3. # 启动 Standalone Server 服务
  4. bash ./bin/dolphinscheduler-daemon.sh start standalone-server
  5. # 停止 Standalone Server 服务
  6. bash ./bin/dolphinscheduler-daemon.sh stop standalone-server
  7. # 查看 Standalone Server 状态
  8. bash ./bin/dolphinscheduler-daemon.sh status standalone-server

image.png

单机启动,不需要zk,它内置了zk,把我们自己的zk服务停掉。

 单机模式比较省内存:

  1. 访问地址:http://bigdata01:12345/dolphinscheduler
  2. 账号和密码: admin dolphinscheduler123

4.2 伪集群模式

伪集群模式(Pseudo-Cluster)是在单台机器部署 DolphinScheduler 各项服务,该模式下master、worker、api server、logger server等服务都只在同一台机器上。Zookeeper和数据库需单独安装并进行相应配置。

配置链接:

https://dolphinscheduler.apache.org/zh-cn/docs/latest/user_doc/guide/installation/pseudo-cluster.html

4.3 集群模式

集群模式(Cluster)与伪集群模式的区别就是在多台机器部署 DolphinScheduler各项服务,并且可以配置多个Master及多个Worker。

五、 DolphinScheduler伪分布部署

5.1 前期准备工作

  1. 1)节点均需部署JDK(1.8+),并配置相关环境变量。
  2. 2)需部署数据库,支持MySQL(8.0+)或者PostgreSQL(8.2.15+)。
  3. 3)需部署Zookeeper(3.4.6+)。
  4. 4)需安装进程管理工具包psmisc
  5. yum install -y psmisc
  1. 把没有用的服务可以停掉了。
  2. 停止azkban : azkaban.sh 0
  3. 停止datax-web服务:
  4. [root@bigdata01 bin]# cd /opt/installs/datax-web-2.1.2/
  5. [root@bigdata01 datax-web-2.1.2]# cd bin
  6. [root@bigdata01 bin]# ./stop-all.sh
  7. 停止hive服务:
  8. hive-server-manager.sh stop
  9. 停止hdfs以及yarn:
  10. stop-all.sh
  11. 停止单机模式:
  12. [root@bigdata01 bin]# cd /opt/modules/apache-dolphinscheduler-1.3.9-bin/bin
  13. [root@bigdata01 bin]# ./dolphinscheduler-daemon.sh stop standalone-server
  1. 原生的命令:
  2. zkServer.sh start
  3. 关闭:
  4. zkServer.sh stop
  5. 查看状态:
  6. zkServer.sh status
  7. 使用脚本命令:
  8. zk.sh start

初始化数据库:

  1. 创建一个用户,设置密码:
  2. CREATE USER 'dolphinscheduler'@'%' IDENTIFIED BY '123456';
  3. 需要设置数据库的密码规则:
  4. set global validate_password.policy=LOW;
  5. set global validate_password.length=4;
  6. set global validate_password.mixed_case_count=0;
  7. set global validate_password.number_count=0;
  8. set global validate_password.special_char_count=0;
  9. 开始创建一个数据库:
  10. CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
  11. 创建用户之后,赋予权限:
  12. GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'dolphinscheduler'@'%';
  13. flush privileges;

连接数据库:

  1. ALTER USER 'dolphinscheduler'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
  2. 为什么不需要设置远程连接?
  3. 因为创建用户的时候,这个% 就是所有IP的意思。

 开始修改数据库连接:

cd /opt/modules/apache-dolphinscheduler-1.3.9-bin/conf

修改:datasource.properties

  1. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  2. spring.datasource.url=jdbc:mysql://bigdata01:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8
  3. spring.datasource.username=dolphinscheduler
  4. spring.datasource.password=123456

拷贝一个mysql的驱动包:

  1. 第一次安装:
  2. cp /opt/modules/mysql-connector-java-8.0.26.jar /opt/modules/apache-dolphinscheduler-1.3.9-bin/lib/
  3. 如果没有这个jar,从hive中拷贝一个:
  4. cp /opt/installs/hive/lib/mysql-connector-java-8.0.26.jar /opt/modules/apache-dolphinscheduler-1.3.9-bin/lib/
  5. 假如已经安装过,需要修复:
  6. cp /opt/modules/mysql-connector-java-8.0.26.jar /opt/installs/dolphinscheduler/lib/

初始化数据库:

  1. 进入 /opt/modules/apache-dolphinscheduler-1.3.9-bin/script
  2. 执行脚本:create-dolphinscheduler.sh
  3. ./create-dolphinscheduler.sh

5.2 配置一键部署脚本

该软件由于不是一解压就能使用的,所以,需要进行一键部署,在部署之前需要配置脚本中的数据

1)先上传

2)解压

  1. tar -zxvf apache-dolphinscheduler-1.3.9-bin.tar.gz
  2. 不要解压到 /opt/installs 下,因为还没有安装呢。

3)修改一键部署脚本
 

cd /opt/modules/apache-dolphinscheduler-1.3.9-bin/conf/config

修改解压目录下的conf/config目录下的install_config.conf文件

  1. #
  2. # Licensed to the Apache Software Foundation (ASF) under one or more
  3. # contributor license agreements. See the NOTICE file distributed with
  4. # this work for additional information regarding copyright ownership.
  5. # The ASF licenses this file to You under the Apache License, Version 2.0
  6. # (the "License"); you may not use this file except in compliance with
  7. # the License. You may obtain a copy of the License at
  8. #
  9. # http://www.apache.org/licenses/LICENSE-2.0
  10. #
  11. # Unless required by applicable law or agreed to in writing, software
  12. # distributed under the License is distributed on an "AS IS" BASIS,
  13. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. # See the License for the specific language governing permissions and
  15. # limitations under the License.
  16. #
  17. # NOTICE : If the following config has special characters in the variable `.*[]^${}\+?|()@#&`, Please escape, for example, `[` escape to `\[`
  18. # postgresql or mysql
  19. dbtype="mysql"
  20. # db config
  21. # db address and port
  22. dbhost="bigdata01:3306"
  23. # db username
  24. username="dolphinscheduler"
  25. # database name
  26. dbname="dolphinscheduler"
  27. # db passwprd
  28. # NOTICE: if there are special characters, please use the \ to escape, for example, `[` escape to `\[`
  29. password="123456"
  30. # zk cluster
  31. zkQuorum="bigdata01:2181,bigdata02:2181,bigdata03:2181"
  32. # Note: the target installation path for dolphinscheduler, please not config as the same as the current path (pwd)
  33. installPath="/opt/installs/dolphinscheduler"
  34. # deployment user
  35. # 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
  36. deployUser="root"
  37. # alert config
  38. # mail server host
  39. mailServerHost="smtp.exmail.qq.com"
  40. # mail server port
  41. # note: Different protocols and encryption methods correspond to different ports, when SSL/TLS is enabled, make sure the port is correct.
  42. mailServerPort="25"
  43. # sender
  44. mailSender="xxxxxxxxxx"
  45. # user
  46. mailUser="xxxxxxxxxx"
  47. # sender password
  48. # note: The mail.passwd is email service authorization code, not the email login password.
  49. mailPassword="xxxxxxxxxx"
  50. # TLS mail protocol support
  51. starttlsEnable="true"
  52. # SSL mail protocol support
  53. # only one of TLS and SSL can be in the true state.
  54. sslEnable="false"
  55. #note: sslTrust is the same as mailServerHost
  56. sslTrust="smtp.exmail.qq.com"
  57. # user data local directory path, please make sure the directory exists and have read write permissions
  58. dataBasedirPath="/tmp/dolphinscheduler"
  59. # resource storage type: HDFS, S3, NONE
  60. resourceStorageType="HDFS"
  61. # 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
  62. resourceUploadPath="/dolphinscheduler"
  63. # if resourceStorageType is HDFS,defaultFS write namenode address,HA you need to put core-site.xml and hdfs-site.xml in the conf directory.
  64. # if S3,write S3 address,HA,for example :s3a://dolphinscheduler,
  65. # Note,s3 be sure to create the root directory /dolphinscheduler
  66. defaultFS="hdfs://bigdata01:9820"
  67. # if resourceStorageType is S3, the following three configuration is required, otherwise please ignore
  68. s3Endpoint="http://192.168.xx.xx:9010"
  69. s3AccessKey="xxxxxxxxxx"
  70. s3SecretKey="xxxxxxxxxx"
  71. # resourcemanager port, the default value is 8088 if not specified
  72. resourceManagerHttpAddressPort="8088"
  73. # if resourcemanager HA is enabled, please set the HA IPs; if resourcemanager is single, keep this value empty
  74. yarnHaIps=
  75. # if resourcemanager HA is enabled or not use resourcemanager, please keep the default value; If resourcemanager is single, you only need to replace ds1 to actual resourcemanager hostname
  76. singleYarnIp="bigdata01"
  77. # who have permissions to create directory under HDFS/S3 root path
  78. # Note: if kerberos is enabled, please config hdfsRootUser=
  79. hdfsRootUser="root"
  80. # kerberos config
  81. # whether kerberos starts, if kerberos starts, following four items need to config, otherwise please ignore
  82. kerberosStartUp="false"
  83. # kdc krb5 config file path
  84. krb5ConfPath="$installPath/conf/krb5.conf"
  85. # keytab username
  86. keytabUserName="hdfs-mycluster@ESZ.COM"
  87. # username keytab path
  88. keytabPath="$installPath/conf/hdfs.headless.keytab"
  89. # kerberos expire time, the unit is hour
  90. kerberosExpireTime="2"
  91. # api server port
  92. apiServerPort="12345"
  93. # install hosts
  94. # Note: install the scheduled hostname list. If it is pseudo-distributed, just write a pseudo-distributed hostname
  95. ips="bigdata01"
  96. # ssh port, default 22
  97. # Note: if ssh port is not default, modify here
  98. sshPort="22"
  99. # run master machine
  100. # Note: list of hosts hostname for deploying master
  101. masters="bigdata01"
  102. # run worker machine
  103. # note: need to write the worker group name of each worker, the default value is "default"
  104. workers="bigdata01:default"
  105. # run alert machine
  106. # note: list of machine hostnames for deploying alert server
  107. alertServer="bigdata01"
  108. # run api machine
  109. # note: list of machine hostnames for deploying api server
  110. apiServers="bigdata01"

 开始进行安装:

  1. 安装之前先启动zk,因为安装完会自动启动,启动过程需要zk,否则启动失败
  2. 因为这个软件比较大,所以需要先停止到没有用的服务。
  3. cd /opt/modules/apache-dolphinscheduler-1.3.9-bin
  4. 执行一键安装脚本: ./install.sh

image.png

  1. 以下操作都是在安装目录下:
  2. 1)一键启停所有服务
  3. ./bin/start-all.sh
  4. ./bin/stop-all.sh
  5. 注意同Hadoop的启停脚本进行区分。
  6. 2)启停 Master
  7. ./bin/dolphinscheduler-daemon.sh start master-server
  8. ./bin/dolphinscheduler-daemon.sh stop master-server
  9. 3)启停 Worker
  10. ./bin/dolphinscheduler-daemon.sh start worker-server
  11. ./bin/dolphinscheduler-daemon.sh stop worker-server
  12. 4)启停 Api
  13. ./bin/dolphinscheduler-daemon.sh start api-server
  14. ./bin/dolphinscheduler-daemon.sh stop api-server
  15. 5)启停 Logger
  16. ./bin/dolphinscheduler-daemon.sh start logger-server
  17. ./bin/dolphinscheduler-daemon.sh stop logger-server
  18. 6)启停 Alert
  19. ./bin/dolphinscheduler-daemon.sh start alert-server
  20. ./bin/dolphinscheduler-daemon.sh stop alert-server

进入:

  1. DolphinScheduler UI地址为http://bigdata01:12345/dolphinscheduler
  2. 初始用户的用户名为:admin,密码为dolphinscheduler123

查看安装路径:

/opt/installs/dolphinscheduler    以后都使用这个文件夹下的命令或者配置文件

安装原理图:

  1. 假如zookeeper 在安装的时候,你安装的是集群的话,启动的时候也必须是集群,否则会zk 有可能没启动,这个错误。
  2. 假如启动完成后连接不上:
  3. 检查你的数据库连接是否初始化成功了。
  4. 去查看日志:/opt/installs 这个文件夹下的ds中的logs 查看
  5. 检查zk状态是否正常(如果是集群,就要启动集群)
  6. 查看防火墙是否关系

 

六、使用DS

1、安全中心

1)队列(了解一下)

2)租户管理--执行任务的

租户对应的是Linux系统用户,是Worker执行任务使用的用户。如果Worker所在节点没有这个用户,Worker会在执行任务时创建这个用户。比如Linux中 root , 还可以创建laoyan,假如你使用了一个Linux中不存在的用户,会在linux中创建该用户。

一看上面的错误,就知道hadoop没有启动hdfs

start-all.sh  启动hadoop集群

3)创建用户--操作ds的

可以使用普通用户登录ds

4) 创建worker分组--工作的worker节点

5)告警组-- 任务执行情况通知谁

添加组内成员:

2 如何使用ds执行任务

切换普通用户

1) 创建项目

2)创建任务

  1. 下图为工作流配置页面,共包含三个模快,分别为工作流定义、工作流实例和任务实例。
  2. 工作流定义:用于定义工作流,包括工作流各节点任务详情及各节点依赖关系等。
  3. 工作流实例:工作流每执行一次就会生成一个工作流示例。此处可查看正在运行的工作流以及已经完成的工作流。
  4. 任务实例:工作流中的一个节点任务,每执行一次就会生成一个任务实例。此处可用于查看正在执行的节点任务以及已经完成的节点任务。

定义工作流:

依次创建B任务,和C任务

将这三个任务,进行任务编排:

点击保存按钮,出现保存界面:

定义任务结束:

3)执行任务

任务必须先上线才能执行,只有下线才能编辑

点击上线,并没有运行,需要点击--执行

此时任务实例就会出现:

  1. 假如你的任务运行了,但是没有工作流实例,只提示成功,可以查看一下是否为内存不够了。
  2. worker 192.168.233.128:1234 current cpu load average 0.43 is too high or available memory 0.17G is too low
  3. 提升一下内存即可。

 

4)定时任务

创建好的定时任务需要将定时任务上线才可以运行。

查看定时任务是否运行了:

  1. 当Linux的系统时间,不对的时候,定时任务,普通任务都会受到影响
  2. 同步时间的两个命令:
  3. systemctl restart chronyd
  4. ntpdate time1.aliyun.com

七、进阶

1、传参数

此处的传参,有两种,一个是局部变量,一个是全局变量

1)局部变量--只针对一个任务

将工作流上线,执行,查看A的日志,发现打印了:

2)全局变量--多个任务中都需要一个字段

目前 A\B\C 任务都需要一个变量 dt。

在保存工作流的时候,弹出来的界面可以指定全局变量。

执行结果:

  1. B和C都是打印的2023-7-20,唯独A打印的是2023-7-18
  2. 因为A设置了局部变量,当一个任务有局部变量又有全局变量的时候,以局部变量的值为准(就近原则)

 3)日期

  1. Linux中获取前一天数据的命令:date -d '1 day ago' +'%y%m%d'
  2. date1=`date -d '1 day ago' +'%y%m%d'`

DolphinScheduler提供了一些时间相关的系统参数,方便定时调度使用

1)系统参数--格式太固定,没法自定义

实战:

查看B的日志:

4)自定义时间

 

在C任务中:

自定义日期格式

  1. $[yyyyMMdd], $[HHmmss], $[yyyy-MM-dd]
  2. $[yyyyMMdd]也可以写成$[yyyy-MM-dd]
  3. $[HHmmss] 也可以添加: $[HH:mm:ss]

2、资源中心

保存之后其实本质上是上传到了hdfs路径下。

资源如何使用?

3、告警通知

DS默认支持两种告警:邮件和SMS(短信),短信这个功能有点Bug,可以演示邮件。

  1. DS是一个任务调度工具,任务执行很慢,所以我们不需要一个告警通知,不管是成功还是失败,都需要第一时间通知我。
  2. 联想到Azkaban 里面有 邮箱、电话、钉钉

 需要一个能够发送邮件的邮箱(这个邮箱是一个发送方,需要将信息发送给需要的人)

  1. vi /opt/installs/dolphinscheduler/conf/alert.properties
  2. 不要修改/opt/modules下的dolphinscheduler,这个文件夹下的内容在你安装完之后的那一刻已经没有任何价值了。
  1. 修改alert.properties中的文件:
  2. # mail server configuration
  3. mail.protocol=SMTP
  4. mail.server.host=smtp.163.com
  5. mail.server.port=25
  6. mail.sender=邮箱
  7. mail.user=邮箱
  8. mail.passwd=授权码
  9. # TLS
  10. mail.smtp.starttls.enable=false
  11. # SSL
  12. mail.smtp.ssl.enable=false
  13. mail.smtp.ssl.trust=smtp.exmail.qq.com

重启alert服务:
 

  1. ./bin/dolphinscheduler-daemon.sh start alert-server
  2. ./bin/dolphinscheduler-daemon.sh stop alert-server

记得同步一下时间,在ds中,同步时间有奇效。

假如需要你做一个电话通知,怎么办?默认不支持。

  1. 使用第三方平台 -- 睿象云
  2. 只需要获取一个睿象云的邮箱即可得到电话通知。

 4、工作流重跑

当一个工作流特长,任务特别复杂的时候,执行到某一处失败了,下一次想从失败的地方开始运行,而不是重新开始。

修改任务,将失败的地方修复一下,开始运行。

  1. 重跑:从头开始,再来一遍
  2. 恢复失败:从失败的节点开始运行,直到运行结束。

 

八、如何在项目中使用 

  1. 数仓项目中,其实只统计了一天的数据 20230711
  2. 真实的数仓,应该是每天都会将我们编写的SQL语句执行一遍,手动执行的效率太低了,占用大量的时间。
  3. 可以使用ds将任务进行编排。
  4. 可以编写4个脚本:
  5. ods.sh dwd.sh dws.sh ads.sh
  6. 这四个脚本依次执行,有先后顺序的。
  7. 每一个脚本中:
  8. 以ods.sh 为例:
  9. 第一:执行sqoopJob.sh
  10. 第二:采集本地的数据到hdfs上(flume)执行导入语句
  11. 第三:广告数据每天都在采集中,所以不用管了。
  12. dwd.sh 干点:
  13. /opt/installs/hive/bin/hive -f dwd.hql
  14. dwd.hql语句:
  15. 比如这样的语句:
  16. insert overwrite table dwd_nshop.dwd_nshop_actlog_launch partition(bdp_day='20230711')
  17. select
  18. customer_id ,
  19. device_num ,
  20. device_type ,
  21. os ,
  22. os_version ,
  23. manufacturer,
  24. carrier,
  25. network_type,
  26. area_code,
  27. case
  28. when from_unixtime(cast(ct/1000 as int) + 3600*8,'HH') between 0 and 6 then 1
  29. when from_unixtime(cast(ct/1000 as int) + 3600*8,'HH') between 7 and 12 then 2
  30. when from_unixtime(cast(ct/1000 as int) + 3600*8,'HH') between 13 and 18 then 3
  31. when from_unixtime(cast(ct/1000 as int) + 3600*8,'HH') between 19 and 24 then 4
  32. end launch_time_segment,
  33. ct
  34. from ods_nshop.ods_nshop_01_useractlog where action='02'
  35. and bdp_day='20230711';
  36. 一个文件中,写一堆这样的语句,后缀名修改为hql即可。hql语句中需要动态传参,每日日期不一样。
  37. 将4个任务编写完之后,还有定时执行,一般 在12:30, 因为12点之后,还有一些采集数据的任务没有执行完。

九、如何关闭linux中的提醒

image.png

  1. cat /dev/null > /var/spool/mail/root
  2. echo "unset MAILCHECK" >> /etc/profile
  3. source /etc/profile

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号