1. DolphinScheduler的安装
1.1 安装环境
1. hadoop2.9.2java
2. CentOS7.5node
3. JDK1.8python
4. Mysql5.7mysql
5. Zookeeper-3.4.14linux
1.2 安装说明
1. 这里直接使用root用户进行安装,若是是使用普通用户安装,须要开启sudo免密和集群各节点之间实现ssh免密.web
2. 配置/etc/hosts文件,作好主机名与ip之间的映射.面试
3. 安装ds的各台机器之间须要作ssh免密登录(安装ds的用户之间的免密)spring
4. ds的安装节点与hdfs和yarn所在节点没有关系,只须要保证ds的worker所在节点有hadoop的安装目录并配置环境变量便可,由于要做为客户端提交命令.sql
5. 使用阿里云与本地虚拟机安装时配置有一点点区别,后面安装时配置有备注.shell
1.3 节点规划
主机名称 |
master-server |
worker-server |
api-server |
logger-server |
alertserver |
linux121 |
√ |
√ |
× |
√ |
× |
linux122 |
√ |
√ |
√ |
√ |
√ |
linux123 |
× |
√ |
× |
√ |
× |
1.4 具体安装步骤
1. 下载最新版的二进制安装包
wget https://www.apache.org/dyn/closer.cgi/incubator/dolphinscheduler/1.3.2/apache-dolphinscheduler-incubating-1.3.2-dolphinscheduler-bin.tar.gz |
2. 解压,重命名
[root@linux122 software]# tar -zvxf apache-dolphinscheduler-incubating-1.3.2-dolphinscheduler-bin.tar.gz [root@linux122 software]# mv apache-dolphinscheduler-incubating-1.3.2-dolphinscheduler-bin dolphinscheduler-bin |
3. 将MySQL的驱动包放到dolphinscheduler-bin/lib目录下(使用超连接的方式)
[root@linux122 software]# ln -s /opt/servers/hive-2.3.7/lib/mysql-connector-java-5.1.46.jar /opt/software/dolphinscheduler-bin/lib/mysql-connector-java.jar |
4. 在MySQL中建立dolphinscheduler数据库
mysql> create database dolphinscheduler; |
5. 修改dolphinscheduler-bin/conf/datasource.properties配置文件,将数据库改成mysql(默认是postgresql)
[root@linux122 dolphinscheduler-bin]# vim conf/datasource.properties #mysql spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://linux123:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true spring.datasource.username=root spring.datasource.password=12345678 |
6. 执行ds自带的脚本
[root@linux122 dolphinscheduler-bin]# sh script/create-dolphinscheduler.sh |
7. 修改ds运行时的参数(即conf/env/dolphinscheduler_env.sh文件)
[root@linux122 dolphinscheduler-bin]# vim conf/env/dolphinscheduler_env.sh #根据自身实际状况设置,暂时用不到的组件能够先注释掉或不设置 export HADOOP_HOME=/opt/servers/hadoop-2.9.2/ export HADOOP_CONF_DIR=/opt/servers/hadoop-2.9.2/etc/hadoop #export SPARK_HOME2=/opt/servers/spark-2.4.1 #export PYTHON_HOME=/opt/soft/python export JAVA_HOME=/opt/servers/jdk1.8.0_231/ export HIVE_HOME=/opt/servers/hive-2.3.7/ #export FLINK_HOME=/opt/servers/flink-1.10 #export DATAX_HOME=/opt/servers/datax/bin/datax.py export PATH=$HADOOP_HOME/bin:$JAVA_HOME/bin:$HIVE_HOME/bin:$PATH |
8. 在准备安装ds的全部节点上执行下面的命令(将java命令超连接到本身安装的jdk下)
[root@linux122 dolphinscheduler-bin]# rm -rf /usr/bin/java [root@linux121 dolphinscheduler-1.3.2]# ln -s /opt/servers/jdk1.8.0_231/bin/java /usr/bin/java [root@linux122 dolphinscheduler-1.3.2]# ln -s /opt/servers/jdk1.8.0_231/bin/java /usr/bin/java [root@linux123 dolphinscheduler-1.3.2]# ln -s /opt/servers/jdk1.8.0_231/bin/java /usr/bin/java |
说明:若是/usr/bin/java已经存在,先删除掉,从新创建超连接.
9. 修改一键部署的相关配置文件(具体内容根据本身的实际规划进行修改)
[root@linux122 dolphinscheduler-bin]# vim conf/config/install_config.conf # postgresql or mysql (这里咱们把元数据放在mysql)
dbtype="mysql"
# db config
# db address and port (mysql所在机器的ip和端口)
dbhost="linux123:3306"
# db username(链接mysql的用户名)
username="root"
# database name(存放ds元数据的数据库名,与上面建立的保持一致)
dbname="dolphinscheduler"
# db passwprd(链接mysql的密码)
# NOTICE: if there are special characters, please use the \ to escape, for example, `[` escape to `\[`
password="12345678"
# zk cluster. (Zookeeper所在的节点)
zkQuorum="linux121:2181,linux122:2181,linux123:2181"
# Note: the target installation path for dolphinscheduler, please not config as the same as the current path (pwd)
#指定ds的安装目录 (能够在每台节点提早建立该目录并保证安装ds的用户有读写权限)
installPath="/opt/servers/dolphinscheduler-1.3.2"
# deployment user(部署用户须要有sudo和操做hdfs的权限)
# 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="root"
# alert config(这里告警以qq邮箱为例,实测可用)
# mail server host
mailServerHost="smtp.qq.com"
# mail server port
# note: Different protocols and encryption methods correspond to different ports, when SSL/TLS is enabled, make sure the port is correct.
#若是是公司内网机器或虚拟机,默认的25端口号是可使用的(且能够不加ssl认证的).若是使用的是阿里云,若是不加ssl认证25端口是用不了的,能够修改端口号为460等 ,且后面须要加ssl认证
mailServerPort="25"
# sender
mailSender="xxxx@qq.com"
# user
mailUser="xxxx@qq.com"
# sender password(这里是受权码,不是邮箱登录)
# note: The mail.passwd is email service authorization code, not the email login password.
mailPassword="phkgigdykiunxxxx"
# TLS mail protocol support
starttlsEnable="true"
# SSL mail protocol support
# only one of TLS and SSL can be in the true state.
#阿里云环境必须启用ssl认证,若是是内网,虚拟机能够设置为false .
sslEnable="false"
#note: sslTrust is the same as mailServerHost
sslTrust="smtp.qq.com"
# resource storage type:HDFS,S3,NONE(资源存储通常选用HDFS,注意必定是大写)
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
# 这里是单节点的namenode.若是是HA的必须还要将上面说的core-site.xml和hdfs-site.xml文件放在对应目录下(单节点的也能够放)
defaultFS="hdfs://linux121:9000"
# 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 resourcemanager HA enable, please type the HA ips ; if resourcemanager is single, make this value empty
#这里的resourcemanager是单节点的,注释掉.若是是HA要写对应的主机名,多台节点逗号分隔
#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. #单节点的rm,写rm所在的主机名
singleYarnIp="linux123"
# 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
#将你的shell脚本,或jar包等执行的资源放在hdfs指定的目录下.该目录会在hdfs上自动建立
resourceUploadPath="/dolphinscheduler"
# who have permissions to create directory under HDFS/S3 root path
# Note: if kerberos is enabled, please config hdfsRootUser=
#这是在hdfs建立目录的用户(注意权限问题),能够经过ps -ef | grep datanode查看拥有建立目录的权限的用户
hdfsRootUser="root"
# 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(安装ds的全部主机)
# Note: install the scheduled hostname list. If it is pseudo-distributed, just write a pseudo-distributed hostname
ips="linux121,linux122,linux123"
# ssh port, default 22
# Note: if ssh port is not default, modify here
sshPort="22"
# run master machine(指定master-server所在的节点)
# Note: list of hosts hostname for deploying master
masters="linux121,linux122"
# run worker machine(指定work所在的节点,后面的default是给机器打标签,针对不一样的机器能够打不一样的标签,这里就打同一个标签)
# note: need to write the worker group name of each worker, the default value is "default"
workers="linux121:default,linux122:default,linux123:default"
# run alert machine(alert-server所在的节点,指定一个节点就行)
# note: list of machine hostnames for deploying alert server
alertServer="linux122"
# run api machine(指定api-server所在节点,一个节点就行)
# note: list of machine hostnames for deploying api server
apiServers="linux122"
|
说明: 机器打标签能够按照机器不一样的性能打不一样的标签,好比机器性能高的打high的标签,将重要任务就能够放在性能高的机器执行.性能低的low标签,通常任务就指定在性能低的机器执行.
10. 将core-site.xml和hdfs-site.xml文件拷贝到conf目录下(以超连接的方式)
[root@linux122 dolphinscheduler-bin]# ln -s /opt/servers/hadoop-2.9.2/etc/hadoop/core-site.xml ./conf/core-site.xml [root@linux122 dolphinscheduler-bin]# ln -s /opt/servers/hadoop-2.9.2/etc/hadoop/hdfs-site.xml ./conf/hdfs-site.xml |
11. 修改各个服务日志的存放目录(这里所有修改成存放在/logs/ds目录下)
[root@linux122 conf]# vim logback-master.xml [root@linux122 conf]# vim logback-worker.xml [root@linux122 conf]# vim logback-api.xml [root@linux122 conf]# vim logback-alert.xml <property name="log.base" value="/logs/ds"/>(第22行) |
12. 切换到部署ds的用户(这里是root),执行一键部署脚本
[root@linux122 dolphinscheduler-bin]# sh install.sh |
说明: 须要部署过程当中没有任何报错信息.
13. 部署完成后,服务会自动启动.查看ds各节点的进程状况
[root@linux121 dolphinscheduler-1.3.2]# jps 16116 LoggerServer 16056 WorkerServer 15995 MasterServer
[root@linux122 dolphinscheduler-1.3.2]# jps 12535 ApiApplicationServer 12282 MasterServer 12474 AlertServer 12413 LoggerServer 12351 WorkerServer
[root@linux123 logs]# jps 13549 WorkerServer 13613 LoggerServer |
14. 登录WebUI界面(api-server所在的ip地址)
http://linux122:12345/dolphinscheduler
登录名: admin
登录密码: dolphinscheduler123
1.5 ds的启动和中止命令(首先须要给脚本文件可执行权限)
#根据配置文件中指定的角色群起/群停进程
[root@linux122 dolphinscheduler-1.3.2]# bin/start-all.sh
[root@linux122 dolphinscheduler-1.3.2]# bin/stop-all.sh
#单独起/停某个进程
[root@linux122 dolphinscheduler-1.3.2]# bin/dolphinscheduler-daemon.sh start master-server
[root@linux122 dolphinscheduler-1.3.2]# bin/dolphinscheduler-daemon.sh stop master-server
[root@linux122 dolphinscheduler-1.3.2]# bin/dolphinscheduler-daemon.sh start worker-server
[root@linux122 dolphinscheduler-1.3.2]# bin/dolphinscheduler-daemon.sh stop worker-server
[root@linux122 dolphinscheduler-1.3.2]# bin/dolphinscheduler-daemon.sh start api-server
[root@linux122 dolphinscheduler-1.3.2]# bin/dolphinscheduler-daemon.sh stop api-server |
2.DolphinScheduler的基本使用(有中文版操做界面)
2.1 安全中心(安全中心的设置须要使用admin用户来操做)
2.1.1 指定yarn调度器中存在的队列
2.1.2 worker分组
若是ds的worker节点数量不少,能够将不一样的机器划分为不一样的组,以便后期不一样优先级的任务调度在不一样的组,能够配置多个.(这里在安装时只配了一个default组)
2.1.3 告警组管理
增长告警组:
为不一样的告警组添加用户(须要先在用户管理界面使用admin帐户添加该用户):
说明:这样操做以后该告警组就与这个用户的邮箱进行绑定了,只要后面像该告警组发邮件,就会发给告警组里面的全部用户.
2.1.4 租户管理
这里租户至关于就是linux上的用户,当关联这个租户时就是指定了以linux上的哪一个用户来提交任务,若是这个用户在linux上存在则直接切换到该用户,若是不存在则建立该用户.
2.1.5 用户管理
2.2 ds建立项目
这里以xiaobai这个用户在作演示,通常实际生产中admin用户也只负责管理,也不会操做具体项目.且这里xiaobai关联的是root这个租户.
2.2.1 建立一个项目
2.2.2 为项目建立具体工做和task并运行
工做流,任务相关说明:
建立一个工做流程:
2.2.3 查看运行的结果及相关信息
2.2.4 查看工做流中具体的task实例
说明:若是上面有选择告警的话查看邮箱就可看到邮件了
2.2.5 针对失败的工做流的处理
2.3 链接外部数据源
2.3.1 链接hive的数据源
2.3.2 测试使用hive的数据源进行sql查询
建立一个项目用来测试Hive的sql查询:
说明: 最下面贴执行的sql语句时最后不要加分号.且只能执行一整段sql语句.
2.4 执行包含hql的shell脚本
2.4.1 在资源中心建立文件夹
首先建立一个文件夹,能够用来管理同一模块下的许多脚本,jar包以及用到的其它文件.
2.4.2 在文件夹下建立或上传脚本
2.4.3 建立文件
1. 将shell脚本的内容所有粘贴到文件内容中(文件名称不用带.sh的后缀)
说明: 执行hql命令有2种方式,一种是cli的方式,另外一种是beeline的方式.生产上基本都是使用beeline的方式.
能够看到在该目录下获得了一个新的文件
2.4.4 建立并执行工做流
1. 根据步骤2.2中的说明建立项目(并定义工做流)
2. 调用建立好的资源文件来建立task,且是使用shell的方式
3. 点击左下角确认添加
4. 点击右上角的保存
5. 设置工做流DAG图的相关信息
6. 将建立好的工做流上线
7. 选择立刻运行或定时调度
8. 每一次运行就会获得一个工做流实例
9. 每一个工做流实例中有1个或多个task实例
2.5 子节点(sub_process)
子节点只能选择同一个项目下的工做流,即实现同一个项目下工做流之间的依赖.能够在一个工做流中引入其它工做流做为子节点.当运行当前工做流时,会先运行子节点,子节点运行成功后才继续执行后面的工做流.
2.6 依赖节点(denpency)
依赖节点能够实现项目之间的依赖.B项目依赖A项目,那么只有A项目执行成功后才会继续执行B项目.
2.7 重试机制
调度判断一个shell脚本执行成功仍是失败的标识: exit 0表示成功(执行完成后默认为exit 0),exit 1表示失败(有时能够手动将正常的脚本最后显性执行exit 1,则会被标记为失败).能够在定义task时开启重试.
2.8 补数机制
在补数的时候会根据调度日期日后推迟一天,因此若是须要补10月1号到10月8号的数据,须要选择的调度日期是9月30号到10月7号进行补数.固然这个能够经过在传递全局参数时经过给全局变量的值为$[yyyy-MM-dd-1],选择的调度日期就是补数的日期了.
2.8.1 实际场景中的应用(针对的是一个工做流中全部task的补数)
在执行shell脚本时经过${date}来获取外界传入的日期.
点击右上角保存,将该变量设置为全局变量,value值设置为$[yyyy-MM-dd-1]或不给值.这样在调度该脚本时那么脚本里面获取的日期就是当前时间的前一天.可是若是须要使用后的补数机制时必须给value的值,这里建议给$[yyyy-MM-dd-1],那么在选择调度日期时就是补数的日期.
经过设置value的值为$[yyyy-MM-dd-1],那么脚本传入的日期就是选择的调度日期(不存在加1天的状况).
补数的工做流:
2.9 中止,暂停,重跑的机制
l 重跑: 从新执行已经终止的流程。
l 恢复失败: 针对失败的流程,能够执行恢复失败操做,从失败的节点开始执行。
l 中止: 对正在运行的流程进行中止操做,后台会先killworker进程,再执行kill -9操做
l 暂停: 对正在运行的流程进行暂停操做,系统状态变为等待执行,会等待正在执行的任务结束,暂停下一个要执行的任务。
l 恢复暂停: 对暂停的流程恢复,直接从暂停的节点开始运行
l 删除: 删除工做流实例及工做流实例下的任务实例
2.10 定时任务调度(针对工做流)
1. 进入定时配置界面
2. 配置调度相关参数
3. 上线任务调度(须要修改调度任务时要先下线,再修改,再上线)
4. 从工做流中进入已经设定好的调度任务
注意:
当咱们下线工做流时,定时任务调度会跟着下线.而再次上线工做流时,里面定时任务调度不会跟着上线,须要咱们手动上线.
2.11 失败策略机制
在运行以前设置失败策略:
当一个工做流中,若是有一个或几个task执行失败,能够有继续和结束两种处理策略.
继续策略:当其中一个或几个节点失败时,只有依赖它的节点会所有中止执行.而与它没有依赖关系,并行的节点仍将继续执行.
结束策略:当工做流中有1个节点失败时,整个工做流的全部后续的其它节点都会中止执行.
3.ds的企业微信告警
3.1 修改配置文件
在alert-server所在的机器上修改conf/alert.properties配置文件
3.2 配置文件参数说明以及获取方式
1. 开启企业微信报警
# 设置企业微信告警功能是否开启:开启为 true,不然为 false。
enterprise.wechat.enable=true |
2. 设置corp.id配置参数
# 设置 corpid,每一个企业都拥有惟一的corpid,获取此信息可在管理后台“个人企业”-“企业信息”下查看“企业 ID”(须要有管理员权限)
enterprise.wechat.corp.id=xxxxx |
3. 将图片中所示的secret和agentid填入配置文件中
# 设置secret,secret是企业应用里面用于保障数据安全的“钥匙”,每个应用都有一个独立的访问密钥。
enterprise.wechat.secret=xxxx |
# 设置 agentid,每一个应用都有惟一的 agentid。在管理后台->“应用与小程序”->“应用”,点进某个应用,便可看到 agentid。
enterprise.wechat.agent.id="xxxx" |
4. 在配置文件中增长userid,表示哪些用户能够看到这个应用的推送消息(这些用户必须在上面图中所示该应用的可见范围中)
# 设置 userid,多个用逗号分隔。每一个成员都有惟一的 userid,即所谓“账号”。在管理后台->“通信录”->点进某个成员的详情页,能够看到。
enterprise.wechat.users=zhangsan,lisi,wangwu |
5. 其它配置项无需改动
# 获取 access_token 的地址,无需修改 enterprise.wechat.token.url=https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$corpId&corpsecret=$secret # 发送应用消息地址,无需修改 enterprise.wechat.push.url=https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$token # 无需修改 enterprise.wechat.team.send.msg={\"toparty\":\"$toParty\",\"agentid\":\"$agentId\",\"msgtype\":\"text\",\"text\":{\"con tent\":\"$msg\"},\"safe\":\"0\"} # 无需修改 enterprise.wechat.user.send.msg={\"touser\":\"$toUser\",\"agentid\":\"$agentId\",\"msgtype\":\"markdown\",\"markdown\": {\"content\":\"$msg\"}} |
6. 重启配置文件所在机器的alert-server服务,而后进行测试
[root@linux122 dolphinscheduler-1.3.2]# bin/dolphinscheduler-daemon.sh stop alert-server [root@linux122 dolphinscheduler-1.3.2]# bin/dolphinscheduler-daemon.sh start alert-server |
4.常见问题说明
1. 默认状况下,admin用户是没有关联任何租户的,若是是使用admin来上传文件,建立工做流这些,须要先关联已有的租户.但通常生产中admin不会关联租户,由于不须要建立具体的项目.
2. 使用admin帐户对普通用户进行项目,资源文件等进行受权
3. 修改工做流或工做流里面的task须要先将工做流下线
说明:每次修改完以后记得保存.
4. 对于失败的任务进行重跑的方法
说明: 选择恢复失败时已成功的节点再也不执行.
5. 工做流下线后再上线时,设置的定时任务并无跟着上线,须要手动上线定时任务.
6. 任务优先级,在线程数不足的时候会根据任务优先级来进行处理.
7. 超时告警,若是在指定的时间内task没有执行完成就会告警,且将该task置为失败
8. 在脚本里面引用参数: ${name}
9. 针对整个工做流的超时告警:
10. 要从新编辑工做流定义时,须要先将工做流下线
11. 引用资源中心文件的语法,写相对路径sh test/test_shell.sh
12. 能够不一样的条件筛选工做流实例和任务实例
13. 对于同一个工做流里面的多个task,根据状况也会分配到不一样的节点上执行.
14. 重试2次就表明第一次执行失败后最多还会重试2次,总共执行最多3次.
15. 执行脚本的后面写${date_exec}后,若是参数不定义value则脚本里面的时间仍是当前日期减1,不传入任何参数就是个空,至关于没有传入时间,脚本就会获取当前时间的前一天了.
16. 子工做流的使用,当B工做流依赖于A这个子工做流时,咱们执行B工做流便可,它会先执行A工做流,只有A工做流执行成功,才会继续执行B工做流.注意:不要先把A工做流本身执行一遍,而后再去执行B工做流,这样的话A工做流会被执行2次,会致使错误的结果.
17. 用shell脚本封装的hql里面必定不能用--来写注释,不少可能碰到任务一直处于运行状态,一直卡在那里.
18. 依赖的使用,依赖能够跨项目,依赖某个项目,某个工做流甚至到某个节点.
19. 上传文件到资源中心时不能批量上传文件.只能一个个上传.不过当文件确实太多时能够将文件先上传到hdfs对应的目录,而后修改mysql中的表来实现批量上传.
20. 当定义task,一次加载资源中心太多文件的话,会报工做流建立失败,这时要么减小资源中心的文件,要么经过修改mysql中表字段的值来解决.
21. yarn队列是跟着用户指定的队列走的(不是租户关联的)
鸣谢:感谢可爱群友大象哥提供资料
pdf目录:

你要悄悄学会HBase,而后惊艳全部人(1.7万字建议收藏)
一文带你深刻了解kafka并提供52道企业常见面试题(1.8W字建议收藏)
本文分享自微信公众号 - 大数据私房菜(datagogogo)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。