我正在运行Cascading(实际上是Scalding)hadoop作业,它使用DistributedCache作为依赖jar。
Fist time它工作正常(意味着类路径设置正确)但随后它开始失败并发生ClassNotFoundException:
java.io.IOException: Split class cascading.tap.hadoop.io.MultiInputSplit not found
at org.apache.hadoop.mapred.MapTask.getSplitDetails(MapTask.java:387)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:412)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:372)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
Caused by: java.lang.ClassNotFoundException: cascading.tap.hadoop.io.MultiInputSplit
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:820)
at org.apache.hadoop.mapred.MapTask.getSplitDetails(MapTask.java:385)
...
其他人是否在DistributedCache
中使用Cascading和jar成功This message似乎暗示Cascading对分布式缓存jar有一些内部处理。你可以解决这个问题吗?
编辑:我在Hadoop 1.0.3上使用Cascading 2.1.6
答案 0 :(得分:0)
您使用的是哪个版本的hadoop? 0.20.2中的分布式缓存存在一些问题。你能尝试切换到更新的版本吗?
答案 1 :(得分:0)
Chris K Wensel,Cascading responded在邮件列表上的作者,Cascading对DistributedCache没有做任何事情。
我进一步查看,这是我的代码中的问题 - 我没有正确地将这些文件添加到DistributedCache。