如何捆绑自定义hadoop-streaming.jar

时间:2013-01-11 20:33:25

标签: java hadoop streaming mrjob

我正在尝试使用Yelp的MrJob工具进行EMR的CombineFileInputFormat课程。工作流是使用hadoop流创建的,MrJob的文档表明CombineFileInputFormat类必须捆绑在自定义的hadoop-streaming.jar中。

有关背景信息,请按此question

具体来说,我的问题是:具体课程CombinedInputFormat.class应该在hadoop-streaming.jar中捆绑或引用?

我尝试通过将CombinedInputFormat.class添加到目录org/apache/hadoop/streaming并执行:

来捆绑jar uvf my-hadoop-streaming.jar org/apache/hadoop/streaming
-inputformat CombinedInputFormat

如果我这样做,流程作业流程开始,选项Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/streaming/CombinedInputFormat (wrong name: CombinedInputFormat) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) at java.lang.ClassLoader.defineClass(ClassLoader.java:615) ... 作业开始第一步并中断,错误:

jar uvf my-hadoop-streaming.jar CombinedInputFormat.class

如果我只是尝试使用以下命令在根路径中设置它:

-inputformat : class not found : CombinedInputFormat
Streaming Job Failed!

我得到的错误是:

NoClassDefFoundError

我应该如何捆绑CombinedInputFormat.class以便正确使用它并解决{{1}}错误?

2 个答案:

答案 0 :(得分:2)

课程CombinedInputFormat解释here扩展CombineFileInputFormat并且没有移植hadoop。所以你需要做的是,在你有mapper / reducer作业类的同一个包中,你必须创建一个类并在前面的问题中说明代码。然后创建jar,它应该正常运行。

所以基本上,你需要编写自己的CombineFileInputFormat实现(我是为你做的),你可以将它命名为你想要的任何名称,比如说ABCClass而不是CombinedInputFormat我把它命名了。

答案 1 :(得分:0)

这是我发现的另一种简单方法,可以在hadoop local或EMR中构建并运行自定义jar http://www.applams.com/2014/05/using-custom-streaming-jar-using-custom.html