0
我有一個簡單的MapReduce程序,我想在遠程集羣上運行它。我可以簡單地運行如何從遠程集羣上的本地IDE運行MapReduce程序
hadoop jar myjar.jar input output
命令行做到這一點,但是當我想從我的IDE它調用MR工作在我的JUnit TestCase類運行的函數,我得到以下警告:
WARN org.apache.hadoop.mapreduce.JobSubmitter - No job jar file set. User classes may not be found. See Job or Job#setJar(String).
INFO org.apache.hadoop.mapred.YARNRunner - Job jar is not present. Not adding any jar to the list of resources.
雖然我有這條線設置,提交MR作業之前:
job.setJarByClass(MyJob.class);
,因此,它不能找到合適的課程作業失敗(如MyMapKey這是映射重點班),鄰perate。
Error: java.io.IOException: Initialization of all the collectors failed. Error in last collector was :java.lang.RuntimeException: java.lang.ClassNotFoundException: Class MyMapKey not found
at org.apache.hadoop.mapred.MapTask.createSortingCollector(MapTask.java:414)
at org.apache.hadoop.mapred.MapTask.access$100(MapTask.java:81)
at org.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(MapTask.java:698)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:770)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1709)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
對此有何看法?
你確定你有一個jar文件,而不是隻編譯一堆'* .class's嗎? – gudok
我確信,作爲一種替代方法,當我在我的測試函數中使用RunJar.main(...)並給出通過命令行成功提交的相同jar的位置時,我得到了相同的錯誤。 – Ehsan
我想你正在使用MRUNIT進行測試。 您能否提供您開發的任何代碼示例。 如果您使用了MRUNIT開發,那麼您可以簡單地將測試類作爲JUnit類運行。參考:https://cwiki.apache.org/confluence/display/MRUNIT/MRUnit+Tutorial –