使用Java代码运行Oozie工作流程

3

我是Java的新手,尝试使用Java代码运行Oozie作业时遇到了一些问题。我无法找出代码中的问题,需要帮助。以下是我的代码:

import java.util.Properties;

import org.apache.oozie.client.OozieClient;
import org.apache.oozie.client.WorkflowJob;

public class oozie {

public static void main(String[] args) {
    OozieClient wc = new OozieClient("http://host:11000/oozie");

    Properties conf = wc.createConfiguration();

    conf.setProperty(OozieClient.APP_PATH, "hdfs://cluster/user/apps/merge-psp-logs/merge-wf/workflow.xml");
    conf.setProperty("jobTracker", "jobtracker.bigdata.com:8021");
    conf.setProperty("nameNode", "hdfs://namenode.bigdata.com:8020");
    conf.setProperty("queueName", "jobtracker.bigdata.com:8021");
    conf.setProperty("appsRoot", "hdfs://namenode.bigdata.com:8020/user/workspace/apps");
    conf.setProperty("appLibLoc", "hdfs://namenode.bigdata.com:8020/user/workspace/lib");
    conf.setProperty("rawlogsLoc", "hdfs://namenode.bigdata.com:8020/user/workspace/");
    conf.setProperty("mergedlogsLoc", "jobtracker.bigdata.com:8021");
    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 (Exception r) {
        System.out.println("Errors");
    }
}
}

虽然我能够使用命令行启动作业


编译错误还是运行时错误? - Giulio Quaresima
@GiulioQuaresima 给我运行时错误。 - Chirag
1个回答

2

没有更多信息的情况下,我会说这可能是您运行时错误的原因:

conf.setProperty(OozieClient.APP_PATH, 
    "hdfs://cluster/user/apps/merge-psp-logs/merge-wf/workflow.xml");
conf.setProperty("jobTracker", "jobtracker.bigdata.com:8021");
conf.setProperty("nameNode", "hdfs://namenode.bigdata.com:8020");
conf.setProperty("queueName", "jobtracker.bigdata.com:8021");

除非您有两个集群,否则我猜您的意思是将APP_PATH指向与nameNode属性中命名的相同HDFS实例,如果是这样,请尝试:

conf.setProperty(OozieClient.APP_PATH, 
    "hdfs://namenode.bigdata.com:8020/user/apps/merge-psp-logs/merge-wf/workflow.xml");

您可能还想将queueName更改为真实的队列名称(可能是“default”,除非jobtracker.bigdata.com:8021是您队列的实际名称):

conf.setProperty("queueName", "default");

除了这些观察之外,请尝试发布您正在看到的实际运行时错误。

已经进行了必要的更改,不再出现运行时错误。控制台按照定义的异常打印“Errors”。有什么想法是什么原因? - Chirag
说真的,如果你把你看到的错误信息发出来,这会容易得多。 - Chris White
搞定了。这是因为首先你要求做出的更改,最后还要在类路径中包含json-simple jar。 - Chirag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接