暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Apache DolphinScheduler-3.1.3 版本安装部署详细教程

海豚调度 2023-09-08
1610

0 背景

本文基于Ambari集群搭建最新版本的Apache DolphinScheduler-3.1.3版本,后续会尝试整合到Ambari中。

1 安装准备

安装Apache DolphinScheduler需要在环境中安装如下依赖
① 
JDK8
下载JDK (1.8+),安装并配置 JAVA_HOME 环境变量,并将其下的 bin 目录追加到 PATH 环境变量中
② 数据库:
PostgreSQL (8.2.15+) 或者 MySQL (5.7+),两者任选其一即可,如 MySQL 则需要 JDBC Driver 8.0.16
③ 注册中心:ZooKeeper (3.4.6+)

2 安装集群

节点IP服务角色
Ambari-1
192.168.x.31
ds-master ds-api ds-alert
Ambari-2
192.168.x.32
ds-master
Ambari-3
192.168.x.33
ds-worker
Ambari-4
192.168.x.34
ds-worker
Ambari-5
192.168.x.35
ds-worker


2.1 配置Apache DolphinScheduler用户

新建Apache DolphinScheduler用户,并且一定要配置 sudo 免密.
    # 创建用户需使用 root 登录useradd dolphinscheduler# 添加密码echo "dolphinscheduler" | passwd --stdin dolphinscheduler# 配置 sudo 免密sed -i '$adolphinscheduler  ALL=(ALL)  NOPASSWD: NOPASSWD: ALL' etc/sudoerssed -i 's/Defaults    requirett/#Defaults    requirett/g' /etc/sudoers# 修改目录权限,使得部署用户对二进制包解压后的 apache-dolphinscheduler-*-bin 目录有操作权限chown -R dolphinscheduler:dolphinscheduler apache-dolphinscheduler-*-bin
    配置免密
      su dolphinschedulerssh-keygen -t rsa -P '' -f ~/.ssh/id_rsacat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keys
      集群之间完成免密
        ssh-copy-id -i ~/.ssh/id_rsa.pub dolphinscheduler@主机

        2.2 配置mysql

        DolphinScheduler 元数据存储在关系型数据库中,故需创建相应的数据库和用户。注:这里根据Mysql安装版本的不同选择不同的执行方式。
        mysql5.6/5.7
          mysql -uroot -pmysql> CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;# 修改 {user} 和 {password} 为你希望的用户名和密码mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'%' IDENTIFIED BY '{password}';mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'localhost' IDENTIFIED BY '{password}';mysql> flush privileges;
          mysql8:
          创建数据库并指定编码格式
            mysql> CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
            开启权限
              # 修改 {user} 和 {password} 为你希望的用户名和密码mysql> CREATE USER '{user}'@'%' IDENTIFIED BY '{password}';mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'%';mysql> CREATE USER '{user}'@'localhost' IDENTIFIED BY '{password}';mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'localhost';mysql> FLUSH PRIVILEGES;
              执行过程中可能出现如下报错:
              ERROR 1819 (HY000): Your password does not satisfy the current policy requiremen
              执行如下命令查看mysql密码要求规则
                show variables like 'validate_password%';
                修改校验登记为LOW,重新设置即可
                  set global validate_password.policy=LOW;

                  2.3 启动zk

                  2.4 修改ds配置文件

                  2.4.1 mysql的JDBC驱动放入ds的lib目录下


                  包括 api-server/libs 和 alert-server/libs 和 master-server/libs 和 worker-server/libs
                    cp ../mysql-connector-java-8.0.16.jar ./libcp ../mysql-connector-java-8.0.16.jar ./api-server/libs/cp ../mysql-connector-java-8.0.16.jar ./alert-server/libs/cp ../mysql-connector-java-8.0.16.jar ./master-server/libs/cp ../mysql-connector-java-8.0.16.jar ./worker-server/libs/


                    2.4. 2 修改bin/env目录下的install_env.sh配置文件


                    我们仅需修改INSTALL MACHINE,DolphinScheduler ENV、Database、Registry Server


                    2.4.3 修改dolphinscheduler_env.sh 文件


                    bin/env/dolphinscheduler_env.sh 中配置JAVA_HOME、数据库、注册中心等相关配置


                    2.5 初始化数据库

                      bash tools/bin/upgrade-schema.sh

                      2.6 启动DS
                        sh install.sh
                        报错如下 查看具体生成日志发现如下报错:
                          Caused by: org.apache.dolphinscheduler.registry.api.RegistryException: Failed to put registry key: nodes/master
                          239 at org.apache.dolphinscheduler.plugin.registry.zookeeper.ZookeeperRegistry.put(ZookeeperRegistry.java:186)
                          240 at org.apache.dolphinscheduler.service.registry.RegistryClient.initNodes(RegistryClient.java:247)
                          241 at org.apache.dolphinscheduler.service.registry.RegistryClient.afterConstruct(RegistryClient.java:77)
                          242 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                          243 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                          244 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                          245 at java.lang.reflect.Method.invoke(Method.java:498)
                          246 at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessorL i f e c y c l e E l e m e n t . i n v o k e ( I n i t D e s t r o y A n n o t a t i o n B e a n P o s t P r o c e s s o r . j a v a : 389 ) 247 a t o r g . s p r i n g f r a m e w o r k . b e a n s . f a c t o r y . a n n o t a t i o n . I n i t D e s t r o y A n n o t a t i o n B e a n P o s t P r o c e s s o r LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) 247 at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessorLifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389)247atorg.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessorLifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333)
                          248 at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157)
                          249 … 46 common frames omitted
                          250 Caused by: org.apache.zookeeper.KeeperException
                            18.call(CreateBuilderImpl.java:1216)
                            255 at org.apache.curator.framework.imps.CreateBuilderImpl$18.call(CreateBuilderImpl.java:1193)
                            256 at org.apache.curator.RetryLoop.callWithRetry(RetryLoop.java:93)
                            257 at org.apache.curator.framework.imps.CreateBuilderImpl.pathInForeground(CreateBuilderImpl.java:1190)
                            258 at org.apache.curator.framework.imps.CreateBuilderImpl.protectedPathInForeground(CreateBuilderImpl.java:605)
                            259 at org.apache.curator.framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:595)
                            260 at org.apache.curator.framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:48)
                            261 at org.apache.dolphinscheduler.plugin.registry.zookeeper.ZookeeperRegistry.put(ZookeeperRegistry.java:184)


                            这里最新版本的ds与zk版本不兼容,最新版本的ds需要最新版本的zk,即3.8版本,当前环境安装的是3.4.6。通过查看ds依赖的zk的jarb包也能验证这一点


                            解决思路:下载3.8版本的zk并安装
                            下载地址:
                            https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz
                            安装方法可以看这篇文章《zookeeper快速入门》[1]
                            安装完成并启动zk,然后再重新启动ds成功。

                            访问master节点url连

                              http://<your_ip>:12345/dolphinscheduler/ui/login
                              默认账户密码:admin/dolphinscheduler123


                              3 [附加]DS源码修改与打包

                              当前DS-3.1.3版本数据源还不支持trino,可以修改源码,增加对trino数据源的支持,修改完成后使用如下命令重新编译并完成打包。
                                ./mvnw clean install -Prelease -DskipTests=true
                                这里的-DskipTests=true指跳过测试,如果不加该参数,整个耗时会特别长。编译完成后可看到如下成功页面。

                                然后进入你的maven仓库即可发现已经打包的ds-3.1.3安装包
                                  cd /root/.m2/repository/org/apache/dolphinscheduler/dolphinscheduler-dist/3.1.3ll -h


                                  参考资料

                                  [1]

                                  《zookeeper快速入门》: https://blog.csdn.net/Keyuchen_01/article/details/108372008

                                  参与贡献


                                  随着国内开源的迅猛崛起,Apache DolphinScheduler 社区迎来蓬勃发展,为了做更好用、易用的调度,真诚欢迎热爱开源的伙伴加入到开源社区中来,为中国开源崛起献上一份自己的力量,让本土开源走向全球。


                                  参与 DolphinScheduler 社区有非常多的参与贡献的方式,包括:


                                  贡献第一个PR(文档、代码) 我们也希望是简单的,第一个PR用于熟悉提交的流程和社区协作以及感受社区的友好度。


                                  社区汇总了以下适合新手的问题列表:https://github.com/apache/dolphinscheduler/issues/5689


                                  非新手问题列表:https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A%22volunteer+wanted%22


                                  如何参与贡献链接:https://dolphinscheduler.apache.org/zh-cn/community/development/contribute.html


                                  来吧,DolphinScheduler开源社区需要您的参与,为中国开源崛起添砖加瓦吧,哪怕只是小小的一块瓦,汇聚起来的力量也是巨大的。


                                  参与开源可以近距离与各路高手切磋,迅速提升自己的技能,如果您想参与贡献,我们有个贡献者种子孵化群,可以添加社区小助手微信(Leonard-ds) ,手把手教会您( 贡献者不分水平高低,有问必答,关键是有一颗愿意贡献的心 )。

                                  添加社区小助手微信(Leonard-ds,好友申请注明“入交流群+姓名+公司+职位信息“,群里是实名制,仅用于验证身份) 


                                  添加小助手微信时请说明想参与贡献。


                                  来吧,开源社区非常期待您的参与。



                                  < 🐬🐬 >
                                  更多精彩推荐

                                  优秀用户案例有奖征集 | 活动火热开启,快来投稿!

                                  用一杯星巴克的钱,训练自己私有化的ChatGPT

                                  Apache DolphinScheduler 在腾讯音乐的应用实践

                                  ☞去年办了这么多场Meetup都没有你,2023年赶紧安排起来!

                                  助力长城汽车数据管道平台连接“数据孤岛”,加强数据一元化,Apache DolphinScheduler 的角色定位

                                  使用 Apache DolphinScheduler 进行 EMR 任务调度



                                  点击阅读转发在看


                                  文章转载自海豚调度,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                  评论