当前位置:  开发笔记 > 编程语言 > 正文

Oozie:从Oozie <java>行动中启动Map-Reduce?

如何解决《Oozie:从Oozie<java>行动中启动Map-Reduce?》经验,为你挑选了1个好方法。

我正在尝试使用操作在Oozie工作流中执行Map-Reduce任务.

O'Reilley的Apache Oozie(Islam和Srinivasan 2015)指出:

虽然不推荐,但可以使用Java操作来运行Hadoop MapReduce作业,因为MapReduce作业毕竟只是Java程序.调用的主类可以是Hadoop MapReduce驱动程序,可以调用Hadoop API来运行MapReduce作业.在该模式下,Hadoop根据需要生成更多映射器和Reducer,并在群集上运行它们.

但是,我没有成功使用这种方法.

工作流中的操作定义如下所示:


    
    
      
    
    
        
            mapreduce.job.queuename
            default
        
    
    package.containing.TransformTool
    ${transformIn}
    ${transformOut}
    ${avroJar}
    ${avroMapReduceJar}

Tool实现的main()实现如下所示:

public static void main(String[] args) throws Exception {
    int res = ToolRunner.run(new TransformTool(), args);
    if (res != 0) {
        throw new Exception("Error running MapReduce.");
    }
}

每次都会出现"Error MapReduce"错误导致工作流崩溃的情况; 如何获取MapReduce的输出来诊断问题?使用它Tool来运行MapReduce应用程序有问题吗?我使用错误的API调用吗?

我非常不愿意使用Oozie 操作,因为工作流中的每个操作都依赖于几个单独版本的AVRO模式.

这是什么问题?我正在使用'新' mapreduceAPI来完成任务.

谢谢你的帮助.



1> Samson Schar..:

>我如何获得MapReduce的输出...

回到基础.

既然你不在乎提到你正在使用哪个版本的Hadoop以及哪个版本的Oozie,我将假设一个"最近"的设置(例如Hadoop 2.7 w/TimelineServer和Oozie 4.2).既然你没有提到你使用哪种界面(命令行?本机Oozie/Yarn UI?Hue?),我将举几个使用good'old'CLI的例子.

> oozie jobs -localtime -len 10 -filter name=CrazyExperiment

显示"CrazyExperiment"工作流程的最后10次执行,以便您可以在下一个命令中注入相应的"作业ID".

> oozie job -info 0000005-151217173344062-oozie-oozi-W

从Oozie的角度显示该执行的状态.如果您的Java操作停留在PREP模式,那么Oozie无法将其提交给YARN; 否则你会发现job_1449681681381_5858"外部ID"下的内容.但要小心!该job前缀是一个传统的东西; 实际的YARN ID是application_1449681681381_5858.

> oozie job -log 0000005-151217173344062-oozie-oozi-W

显示Oozie日志,如预期的那样.

> yarn logs -applicationId application_1449681681381_5858

在执行结束后显示AppMaster(容器#1)和Java操作启动器(容器#2)的合并日志.Launcher 的stdout日志包含一大堆Oozie调试内容,真正的stdout位于最底层.

如果您的Java操作成功生成了另一个YARN作业,并且您小心地显示子"应用程序ID",您应该能够在那里检索它并对其运行另一个yarn logs命令.

享受您未来5天的调试;-)


我最好的猜测是`hdfs:// duh /`被翻译为"默认HDFS文件系统中当前工作目录的子目录*duh*"; YARN命令行可能使用`/`作为CWD(模仿用户`yarn`),而Oozie可能使用`/ user/oozie /`(模仿用户'oozie`).底线:总是使用**显式完整路径**即`hdfs:/// duh`,带有**三个斜杠.
推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有