Чтение элемента захвата-вывода oozie с использованием Java-API oozie - PullRequest
0 голосов
/ 14 мая 2018

Я использую Java-клиент Oozie для запуска действия оболочки из моей Java-программы. Я хочу прочитать элемент вывода захвата действия оболочки из моей Java-программы. Я попытался использовать функцию ниже. Но я получил исключение NullPointerException.

org.apache.oozie.DagELFunctions.wf_actionData(String actionName)

Вот Java-программа для отправки задания Oozie с использованием Java Client API.

public class OozieSample {

public static void main(String[] args) throws OozieClientException, InterruptedException {
    // TODO Auto-generated method stub

    // get a OozieClient for local Oozie
    OozieClient wc = new OozieClient("http://bar:8080/oozie");

    // create a workflow job configuration and set the workflow application path
    Properties conf = wc.createConfiguration();
    conf.setProperty(OozieClient.APP_PATH, "hdfs://foo:9000/usr/tucu/my-wf-app");

    // setting workflow parameters
    conf.setProperty("jobTracker", "foo:9001");

    // submit and start the workflow job
    String jobId = wc.run(conf);
    System.out.println("Workflow job submitted");
    System.out.println(jobId);

    // wait until the workflow job finishes printing the status every 10 seconds
    while (wc.getJobInfo(jobId).getStatus() == WorkflowJob.Status.RUNNING) {
        System.out.println("Workflow job running ...");
        Thread.sleep(10 * 1000);
    }

    System.out.println(org.apache.oozie.DagELFunctions.wf_actionData("shell-5ed8"));

    // print the final status o the workflow job
    System.out.println("Workflow job completed ...");

    }

Есть ли способ прочитать элемент захвата-вывода oozie из Java-программы?

1 Ответ

0 голосов
/ 15 мая 2018

Действие оболочки capture-output записывается как Properties в поле действия data ( SshActionExecutor.java: 142 ).Доступ к нему можно получить через Oozie REST Api .

Я провел некоторый тест с curl, и он там есть:

curl http://host:11000/oozie/v1/job/job-id?show=info

Фрагмент ответа:

{
   //(...)
   "actions": [
     {
       //(...)
       "data": "#\n#Tue May 15 15:04:48 EEST 2018\nfoo=bar\n"
     }
   ]
}

Это было действие со сценарием оболочки echo "foo=bar".

Поскольку OozieClient является оболочкой для этого API, должно работать что-то вроде этого:

WorkflowJob job = oozieClient.getJobInfo("oozie-wf-id");

String data = job.getActions().stream()
        .filter(action -> "shell-5ed8".equals(action.getName()))
        .map(WorkflowAction::getData)
        .findFirst().orElse("");

Properties actionProperties = new Properties();
actionProperties.load(new StringReader(data));
...