java 操作 Hue上的 Oozie 工作流

目录

代码编写

错误解决

任务修复


 

代码编写

大数据平台:CDH

pom.xml

<dependency>
    <groupId>org.apache.oozie</groupId>
    <artifactId>oozie-client</artifactId>
    <version>4.1.0</version>
</dependency>

code:

import java.util.Properties;
import org.apache.oozie.client.OozieClient;
import org.apache.oozie.client.WorkflowJob.Status;


public class Oozie {

    private static final String IP = "127.0.0.1";

    public static void main(String[] args) {

        OozieClient wc = new OozieClient("http://" + IP + ":11000/oozie");
        Properties conf = wc.createConfiguration();
        // oozie任务参数,这些参数可以到hue页面获取
        conf.setProperty("nameNode", "hdfs://" + IP + ":8020");
        conf.setProperty("oozie.wf.application.path", "hdfs://" + IP + ":8020/user/hue/oozie/workspaces/hue-oozie-1591867016.16");
        conf.setProperty("jobTracker", IP + ":8032");
        conf.setProperty("mapreduce.job.user.name", "hue");
        conf.setProperty("user.name", "hue");
        // 没有用,不需要
        // conf.setProperty("hue-id-w", "391");
        conf.setProperty("oozie.use.system.libpath", "true");
        conf.setProperty("dryrun", "false");

        // 脚本参数<选填> 自己在写好的Action里有参数设置,需在这里传递
        conf.setProperty("param1", "p1");
        conf.setProperty("param2", "p2");

        try {
            String jobId = wc.run(conf);

            // Status的枚举值:PREP, RUNNING, SUCCEEDED, KILLED, FAILED, SUSPENDED
            while (Status.RUNNING == wc.getJobInfo(jobId).getStatus()) {
                System.out.println("RUNNING...");
                Thread.sleep(5000);
            }

            final Status status = wc.getJobInfo(jobId).getStatus();
            System.out.println(status);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

HUE页面获取目标调用的Oozie任务参数,需满足以下要求

1. Oozie任务本身文件是存在的,

     (1)Oozie任务是手动新建上去的,点击Create,自己配置上去的,这种没有问题

     (2)Oozie任务是通过import json文件导入的,这种Oozie任务不好使,需要手动构建,移步到最后,有讲解。但是如果该任务只是作为本地任务流中的一份子,无需构建,保证该任务自己可正常运行即可。

2. 任务需执行一次,只要点击执行,立马kill掉即可,可以帮助生成所需参数,对应拷贝即可

点击执行后,成功与否,会在Dashboard下生成记录,选择目标工作流,点击进入

进入到工作流,点击Configuration,将对应值填写到代码Oozie参数即可

(单个ACTION工作流)

(多个ACTION工作流,图中最下面的两个参数是任务参数,但是已经在workflow.xml中替换过了,无需配置,Definition可验证)

点击Definition,查找除Oozie参数外的脚本参数可以,在代码中配置相应value即可

参数传递

shell等ACTION的参数按顺序配置value即可。

当ACTION为Sub Workflow时,而Sub Workflow本身也有参数时,就涉及到当前父工作流向子工作流传递参数,方法:通过添加PROPERTIES属性,其中name为Sub Workflow中配置的脚本参数名,value值可随便定义,最终在代码中添加的脚本参数要以value值为准,而不是name配置的。

错误解决

运行报错,如下:

NameNode [127.0.0.1:8020] not allowed, not in Oozie's whitelist. Allowed values are: [localhost:8020]

JobTracker [127.0.0.1:8032] not allowed, not in Oozie's whitelist. Allowed values are: [localhost:8032]

在CM页面添加白名单,配置域名和IP两种,用逗号隔开:

任务修复

针对import json文件,手动构建方法,其实就是创建目录,选择上传的workflow,点进去,选择Settings(版本不同位置不同)

复制workspace的值

默认在/user/hue/oozie/workspaces上新建上面的文件夹

在新建的文件夹下新建 lib 文件夹,如果原始lib有文件,也相应拷贝进去即可。job.properties和workflow.xml不用新建,我是执行过一次,所以有。即使删除掉,下次执行,会自动创建。

多说一句,Oozie的任务其实有两种,本地任务或者说每次执行参数都不会变的任务,都在workspaces下,像那种import 的外来任务,每次也能正常执行,但是参数会变,都在deployments下。

本地任务与外来任务的参数对比。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值