我试着用 CombineFileInputFormat
使用yelp的mrjob工具为emr初始化。jobflow是使用hadoop流创建的,mrjob的文档指出 CombineFileInputFormat
类必须绑定到自定义的 hadoop-streaming.jar
.
关于上下文,请按照这个问题。
具体来说,我的问题是:具体的类应该在哪里 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!
我应该如何捆绑combinedinputformat.class,以便正确地获取它并解决问题 NoClassDefFoundError
错误?
2条答案
按热度按时间goucqfw61#
这是我发现的另一种在hadooplocal或emr中构建和运行自定义jar的简单方法http://www.applams.com/2014/05/using-custom-streaming-jar-using-custom.html
luaexgnf2#
班级
CombinedInputFormat
这里解释的是CombineFileInputFormat
并且没有用hadoop移植。因此,您需要做的是,在mapper/reducer作业类所在的包中,您必须创建一个类,并使用上一期中所述的代码。然后创建jar,它应该正常运行。所以基本上,您需要编写自己的
CombineFileInputFormat
(这是我为你做的)你可以给它取任何你想要的名字,比如说ABCClass
而不是CombinedInputFormat
就像我给它起的名字。