Oozie4.3.1各种Action及综合实例

本文详细介绍了如何在Oozie4.3.1上配置和执行Hive2、Pig和Spark Actions。通过实例展示了每个Action的准备工作、执行过程以及结果检查,包括Oozie和YARN监控。最后,文章还提供了一个整合所有这些技术的综合实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oozie4.3.1各种Action及综合实例

如果没有编译好Oozie,并部署到集群,请参考:Build Oozie4.3.1 on Hadoop3.X及Hadoop生态圈Action调用(一)

  • 本篇主要是针对Hadoop生态圈Action的调用。

1. 准备工作

  • 确保Hadoop集群启动;
  • 确保Oozie启动;
  • 确保HiveServer2启动(测试主要使用Hiveserver2);
  • 并且参考上篇把相关examples资源上传到HDFS的/user/root/examples目录;

2. Hive2 Action

2.1 准备工作

先读取Hive2的example的代码意思:
oozie-4.3.1/examples/apps/hive2/workflow.xml : 这个代码是一个通用的调用Hive的代码,这里就不贴了。
oozie-4.3.1/examples/apps/hive2/script.q:

-- 删除test表
DROP TABLE IF EXISTS test;
-- 根据路径创建外部表 test
CREATE EXTERNAL TABLE test (a INT) STORED AS TEXTFILE LOCATION '${INPUT}';
-- 把外部表test的数据导出到HDFS
INSERT OVERWRITE DIRECTORY '${OUTPUT}' SELECT * FROM test;

其中${INPUT}的值在workflow.xml以及job.properties中有,job.properties设置为:

# 集群相关的配置,需修改为实际地址
nameNode=hdfs://master:8020 
jobTracker=master:8032
queueName=default
jdbcURL=jdbc:hive2://master:10000/default
examplesRoot=examples

oozie.use.system.libpath=true
oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/hive2

匹配后,输入为: /user/root/examples/input-data/table/
输出为:/user/root/example/output-data/hive2
由于这里并没有测试数据,同时根据script.q的创建test表的代码来看,可以只需要用一列数值即可作为其输入,比如(命名为data.txt):

1
2
3
4
5

上传到HDFS

hdfs dfs -put data.txt /user/root/examples/input-data/table

2.2 执行

在oozie-4.3.1/examples/apps/hive2执行命令:

oozie job --oozie http://master:11000/oozie -config job.properties -run

2.3 查看结果

2.3.1 Oozie监控

首先,可以看到任务在Oozie上面的结果:
hive-oozie监控
从图中可以看到任务的发起时间及结束时间,及任务运行状态,可以看到是成功执行并完成的。

2.3.2 YARN 监控

Oozie发起Hive任务的时候,会首先发起一个MapReduce的任务,然后在这个任务里面再次发起另外的一个MapReduce任务(这个主要去执行hive的SQL),只有当hive sql的MapReduce任务执行完成之后,Oozie的MapReduce才会完成。
yarn监控
从图中可以看到两个任务的Name,和发起的任务也有很大的关系。其次是两个任务开始的时间和结束的时间。

2.3.3 输出

任务输出有两个,第一个,在hive中应该可以看到一个test表,同时查看数据,应该是1,2,3,4,5 ;
hive输出
第二个,在HDFS的输出目录应该会有对应的数据产生,同时数据也是一样的。
hdfs输出

3. Pig Action

3.1 准备工作

oozie-4.3.1/examples/apps/pig/workflow.xml :

<script>id.pig</script>
            <param>INPUT=/user/${wf:user()}/${examplesRoot}/input-data/text</param>
            <param>OUTPUT=/user/${wf:user()}/${examplesRoot}/output-data/pig</param>

从上面可以看到输入以及要执行的pig脚本,输入是在、/user/root/examples/input-data/text;
oozie-4.3.1/examples/apps/pig/id.pig:

A = load '$INPUT' using PigStorage(':');
B = foreach A generate $0 as id;
store B into '$OUTPUT' USING PigStorage();

该脚本就是从INPUT中加载数据到关系A(字段间分隔符用冒号:),然后取得里面的第一个字段的值并存入关系B,把关闭B的数据存储到HDFS的Output目录;
通过观察发现输入数据的是文本,不适合作为id.pig的输入,所以修改下,简单示例如下(假设名字为data.txt):

1:a
2:b
3:c

然后存入HDFS:

hdfs dfs -rm -r /user/root/examples/input-data/text/data.txt
hdfs dfs -put data.txt /user/root/examples/input-data/text/

3.2 执行

在oozie-4.3.1/examples/apps/pig执行命令:

oozie job --oozie http://master:11000/oozie -config job.properties -run

3.3 查看输出

由于这里的监控和Hive的类似,这里不再展开介绍。

3.3.1 Oozie监控

oozie-pig

3.3.2 YARN监控

pig-yarn

3.3.3 HDFS监控

pig-hdfs

4. Spark Action

4.1 准备工作

oozie-4.3.1/examples/apps/spark/job.properties:

nameNode=hdfs://master:8020
jobTracker=master:8032
master=yarn-cluster
queueName=default
examplesRoot=examples
oozie.use.system.libpath=true
oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/spark

特别注意,把master改为yarn-cluster ,使用这种模式来运行,当然也可以使用其他模式,具体可参考:http://oozie.apache.org/docs/4.3.1/DG_SparkActionExtension.html#Spark_on_YARN
其运行的代码如下所示:

public final class SparkFileCopy {
   
   

    public static void main(String[] args) throws Exception {

        if (args.length < 2) {
            System.err.println("Usage: SparkFileCopy <file> <file>");
            System.exit(1);
        }

        SparkConf sparkConf = new SparkConf().setAppName("SparkFileCopy");
        JavaSparkContext ctx = new JavaSparkContext(sparkConf);
        JavaRDD<String> lines = ctx.textFile(args[0]);
        lines.saveAsTextFile(args[1]);
        System.out.println("Copied file from "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值