最近出差忙项目,一直没更新,现在项目结尾了。回来继续搞集群
公司因为CDH升级为CDP,两套环境数据和任务慢慢迁移,但是调度任务需要同时跑批。
而我们的海豚调度是单节点的,master和worker等服务都在一台节点上。
之前我有说过海豚每次执行完都会去yarn上检查一下任务状态。去判断这个任务是成功还是失败。
但是配置文件中,只能设置一套大数据环境。
这时候就有3种解决办法了:
1、新增worker节点,单独设置租户和worker组。每个任务需要单独拆分出来。时间成本过高。
2、新搭建一套集群,两套集群各跑各的。浪费资源。需要单独copy一套环境。
3、改海豚的源码。
当然涉及到技术问题,当然是改源码了。否则不真成了码农了。。
海豚版本:1.3.9
改源码前
。因为我是做了提交脚本的,两套提交脚本提交到不同的集群。那么他会报错如下
因为在 common.properties 中设置了
而且没办法设置多套。所以改配置的想法不行。当然我也试过在 yarn.resourcemanager.ha.rm.ids 参数后面加上新集群地址,也是不行的。
那么现在只有改源码了
改源码后
根据报错信息很容易定位问题。
一共修改3个地方:
1、把final 去掉
public static String rmHaIds = PropertyUtils.getString(Constants.YARN_RESOURCEMANAGER_HA_RM_IDS);
2、新增,如果不新增,老集群会受到影响。因为 rmHaIds 地址已经变成新集群了
rmHaIds = PropertyUtils.getString(Constants.YARN_RESOURCEMANAGER_HA_RM_IDS);
3、新增判断,用于切换Yarn集群地址
if (StringUtils.isBlank(responseContent)) {
rmHaIds = "新集群yarn的RM地址";
logger.warn("yarn集群RM转换成功,当前RM节点为: "+rmHaIds);
applicationUrl = getApplicationUrl(applicationId);
logger.warn("applicationUrl-2地址为:{}",applicationUrl);
responseContent = HttpUtils.get(applicationUrl);
logger.warn("responseContent-2状态: "+responseContent);
打包服务重启
1、将jar包打包后上传到服务器上。
替换的包:$DOLPHINSCHEDULER_HOME/lib/dolphinscheduler-common-1.3.9.jar
2、将原生包给备份
我是备份到海豚目录了。方便出问题回滚
3、将自己的包放到lib目录下
4、重启服务
sh 海豚根目录/bin/dolphinscheduler-daemon.sh stop worker-server
sh 海豚根目录/bin/dolphinscheduler-daemon.sh start worker-server
jps
执行两套环境的脚本。
打印日志
结尾
没注意后续版本是否支持。但是目前我用的1.3.9貌似是不支持的。
有什么问题欢迎反馈。