今天运维的同事说调度有好几个显示失败但是实际任务已经执行完成的问题,看了下work日志,
发现有 报错空指针问题。最后定位到是commo包下面在执行任务的时候会寻找状态是active的资源,一般配置是3台,资源会自动切换3台中的一台为active,目前DolphinScheduler版本用的是1.3.3。
下载源码分析后发现是源码中的坑,只会找到前两台测试所以失败的情况很多。改源码换加第三台。打包部署ok。问题解决
github不稳定自己fork了一份到;gitee地址/jflang/dolphinschedulerhttps:///jflang/dolphinscheduler
改动地方:
//HadoopUtils
//getAcitveRMName
/**
* get active resourcemanager
*
* @param rmIds
* @return
*/
public static String getAcitveRMName(String rmIds) {
String[] rmIdArr = ();
int activeResourceManagerPort = (Constants.HADOOP_RESOURCE_MANAGER_HTTPADDRESS_PORT, 8088);
String yarnUrl = "http://%s:" + activeResourceManagerPort + "/ws/v1/cluster/info";
String state = null;
try {
/**
* send http get request to rm1
*/
state = getRMState((yarnUrl, rmIdArr[0]));
if (Constants.HADOOP_RM_STATE_ACTIVE.equals(state)) {
return rmIdArr[0];
} else if (Constants.HADOOP_RM_STATE_STANDBY.equals(state)) {
state = getRMState((yarnUrl, rmIdArr[1]));
if (Constants.HADOOP_RM_STATE_ACTIVE.equals(state)) {
return rmIdArr[1];
}else {
//这里加入下面代码
state = getRMState((yarnUrl, rmIdArr[2]));
if (Constants.HADOOP_RM_STATE_ACTIVE.equals(state)) {
return rmIdArr[2];
}
}
} else {
return null;
}
} catch (Exception e) {
state = getRMState((yarnUrl, rmIdArr[1]));
if (Constants.HADOOP_RM_STATE_ACTIVE.equals(state)) {
return rmIdArr[0];
}
}
return null;
}
今天不在状态简单记录一下吧
懒得打包自己下载吧