来自java代码的工作流已挂起
我正在运行一个包含java代码的工作流,而java代码又会启动另一个oozie工作流。主工作流工作正常,但从java代码启动的工作流始终处于挂起状态。我无法恢复它,因为它的用户已映射,而不是我。知道有什么问题吗 这是我的主要工作流程来自java代码的工作流已挂起,java,hadoop,workflow,oozie,Java,Hadoop,Workflow,Oozie,我正在运行一个包含java代码的工作流,而java代码又会启动另一个oozie工作流。主工作流工作正常,但从java代码启动的工作流始终处于挂起状态。我无法恢复它,因为它的用户已映射,而不是我。知道有什么问题吗 这是我的主要工作流程 <java> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node>
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<main-class>com.last.play.LaunchJob</main-class>
<arg>currentUser=${currentUser}</arg>
</java>
${jobTracker}
${nameNode}
com.last.play.LaunchJob
currentUser=${currentUser}
下面是java代码:
Map<String, String> commandArgs = getActionArgs(args);
Path appPropertyPath = new Path("/user/cmahajan/app.properties");
Path jobPropertyPath = new Path("/user/cmahajan/job.properties");
OozieClient wc = new OozieClient("http://host07.com:11000/oozie");
String userName = commandArgs.get("currentUser");
System.out.println("User Name recieved ::" + userName);
Configuration trial = new Configuration();
FileSystem fs = FileSystem.get(trial);
Properties conf = wc.createConfiguration();
Properties jobProperties = new Properties();
Properties appProperties = new Properties();
appProperties.load(fs.open(appPropertyPath));
String version = appProperties.getProperty("version");
jobProperties.load(fs.open(jobPropertyPath));
for (Object key : jobProperties.keySet()) {
String propValue = jobProperties.getProperty((String) key);
propValue = propValue.replaceAll("\\$\\{user.name\\}", userName);
conf.setProperty((String) key, propValue);
System.out.println("Key ::" + key);
System.out.println("Value ::" + propValue);
System.out.println(" ===================");
}
String appsRoot = "${wfsBasePath}/" + version + "/apps";
conf.setProperty("appsRoot", appsRoot);
try {
String jobId = wc.run(conf);
System.out.println("Workflow job submitted");
while (wc.getJobInfo(jobId).getStatus() == WorkflowJob.Status.RUNNING) {
System.out.println("Workflow job running ...");
Thread.sleep(10 * 1000);
}
System.out.println("Workflow job completed ...");
System.out.println(wc.getJobInfo(jobId));
} catch (OozieClientException oozieClientException) {
oozieClientException.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
Map commandArgs=getActionArgs(args);
路径appPropertyPath=新路径(“/user/cmahajan/app.properties”);
路径jobPropertyPath=新路径(“/user/cmahajan/job.properties”);
OozieClient wc=新的OozieClient(“http://host07.com:11000/oozie");
字符串userName=commandArgs.get(“当前用户”);
System.out.println(“收到的用户名::”+用户名);
配置试用=新配置();
FileSystem fs=FileSystem.get(试用版);
Properties conf=wc.createConfiguration();
属性jobProperties=新属性();
Properties appProperties=新属性();
load(fs.open(appPropertyPath));
String version=appProperties.getProperty(“version”);
加载(fs.open(jobPropertyPath));
for(对象键:jobProperties.keySet()){
String propValue=jobProperties.getProperty((字符串)键);
propValue=propValue.replaceAll(\\$\{user.name\\},用户名);
conf.setProperty((字符串)键,propValue);
System.out.println(“键::”+Key);
System.out.println(“值::”+propValue);
System.out.println(“===============================”);
}
字符串appsRoot=“${wfsBasePath}/”+version+“/apps”;
conf.setProperty(“appsRoot”,appsRoot);
试一试{
字符串jobId=wc.run(conf);
System.out.println(“提交的工作流作业”);
while(wc.getJobInfo(jobId.getStatus()==WorkflowJob.Status.RUNNING){
System.out.println(“工作流作业运行…”);
线程。睡眠(10*1000);
}
System.out.println(“工作流作业已完成…”);
System.out.println(wc.getJobInfo(jobId));
}捕获(OozieClientException OozieClientException){
oozieClientException.printStackTrace();
}捕捉(中断异常e){
e、 printStackTrace();
}
您可以使用UserGroupInformation设置用户
UserGroupInformation ugi = UserGroupInformation.createRemoteUser(username);
ugi.doAs(new PrivilegedExceptionAction<MyMapReduceWrapperClass>() {
public Object run() throws Exception {
MyMapReduceWrapperClass mr = new MyMapReduceWrapperClass();
ToolRunner.run(mr, null);
return mr;
}
});
UserGroupInformation ugi=UserGroupInformation.createRemoteUser(用户名);
ugi.doAs(新特权接受行动){
公共对象run()引发异常{
MyMapReduceWrapperClass mr=新的MyMapReduceWrapperClass();
ToolRunner.run(mr,null);
返回mr;
}
});