前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >dolphinscheduler单机化改造

dolphinscheduler单机化改造

作者头像
上帝
发布2022-07-30 11:25:35
7630
发布2022-07-30 11:25:35
举报
文章被收录于专栏:影子影子

dolphinscheduler单机化改造

转载请注明出处: https://cloud.tencent.com/developer/article/2062650

前面

其实如果单机的话直接走standalone-server就可以了,简单又快捷,如果更改的话 后期要升级可能又需要维护个版本才可,所以简单用standalone-server是最合适的。

好了,就说说我碰到的standalone-server模式下的一些不便的地方以及解决思路,还有种种折腾😓

standalone-server下没有日志

这是个很坑的问题,非常不利于调试,以下这是官方 dolphinscheduler-daemon.sh 的代码片段

代码语言:javascript
复制
elif [ "$command" = "standalone-server" ]; then
 CLASS=org.apache.dolphinscheduler.server.StandaloneServer
 export SPRING_PROFILES_ACTIVE="${SPRING_PROFILES_ACTIVE},standalone,${DATABASE_TYPE}"

所以你大概需要改成这样:

代码语言:javascript
复制
elif [ "$command" = "standalone-server" ]; then
 LOG_FILE="-Dlogging.config=classpath:logback-master.xml"
 CLASS=org.apache.dolphinscheduler.server.StandaloneServer
 export SPRING_PROFILES_ACTIVE="${SPRING_PROFILES_ACTIVE},standalone,${DATABASE_TYPE}"

对于ide调试需要添加此参数:

任务执行用户与系统用户强绑定问题

你是不是系统搭建起来了,也创建worker账户了 而且也正确创建任务了 发现任务总执行失败呢😂,这个时候就该注意是不是linux没有创建对应worker同名的账户呢/(ㄒoㄒ)/~~ ,我也碰到了,也是看源码才知道的,所以在单机模式下有必要将这个限制去掉哈😂

(TaskExecuteThread)

这样下来,以后不管什么账户都是可以执行任务了,注意这功能不要在集群模式下去掉,至少为了安全吧~

standalone-server下用的是h2数据库

这是个坑,h2你可以理解为应用级别的内存表,很显然当你重启应用了数据就全丢失啦😂,刺不刺激意不意外🤣

对于这个问题,很显然需要将数据库改为mysql或者postgresql(主要是目前官方只支持这两款数据库作为项目数据库),需要改的地方大致有两处:

  • 一个地方是配置文件,在部署服务器config目录下
  • 还一个地方是启动类 StandaloneServer

对于配置文件肯定是要改的,至于这个配置文件也可以在启动命令行中指定此配置文件,以上只是个投机取巧的做法,也避免了修改启动脚本😂

去掉zookeeper client及依赖

因为集群环境的复杂性,所以需要任务有zookeeper,但对于单机也就冗余复杂了,所以就索性去掉之

这里是从MasterServer开始移除zk支持,所以代码也是大改,所有关联的全部被我去掉了,太麻烦了。。。具体你们可以试试

日志可以不用rpc

本来到这一步应该也结束了,跑了几个任务发现没得日志,检查了下才发现代码告诉我他们是用 netty 实现了个rpc,使用前需要启动日志模块(standalone-server下默认不会启动此模块),日志用rpc调用logger模块来查询日志。。。,咋办,继续改。。。

主要也就以上两个地方需要修改,具体的可以参见我的源码(开头有提~)

简化不必要的启动模块

这其实是顺带做的,启动类 StandaloneServer 我去掉了TestingServerAlertServerPythonGatewayServer ,去掉后启动速度及资源占用有提升😉😉

下面是具体代码:

代码语言:javascript
复制
 @EnableAutoConfiguration
@ComponentScan
public class StandaloneServer {
   public static void main(String[] args) throws Exception {
//        final TestingServer server = new TestingServer(true);
//        System.setProperty("registry.servers", server.getConnectString());

       new SpringApplicationBuilder(
           ApiApplicationServer.class,
           MasterServer.class,
           WorkerServer.class
//            AlertServer.class
//            PythonGatewayServer.class
       ).profiles("master", "worker", "api",/* "alert", "python-gateway", "h2",*/ "standalone","postgresql").run(args);
   }
}

修改worker执行主机host获取方式

这也是个坑,主要是源码基于集群考虑这个问题,单机还是得修改才可:

以上两处只是关键部分,对于此问题修改的地方不止以上两处,具体可以参见我源码哈😝😝

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • dolphinscheduler单机化改造
    • 前面
      • standalone-server下没有日志
        • 任务执行用户与系统用户强绑定问题
          • standalone-server下用的是h2数据库
            • 去掉zookeeper client及依赖
              • 日志可以不用rpc
                • 简化不必要的启动模块
                  • 修改worker执行主机host获取方式
                  相关产品与服务
                  数据库
                  云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档