我已经编写了一些代码来使用 Hadoop 执行自连接任务。为此,我使用 DistributedCache 类。当我在 Netbeans 中本地运行代码时,作业已正确完成,但是当我在 hdfs 中上传数据后尝试在单节点集群中运行它时,我得到以下异常:
Error initializing attempt_201301021509_0002_m_000002_0:
java.io.IOException: Distributed cache entry arrays have different lengths: 1, 2, 1, 1
at org.apache.hadoop.mapred.JobLocalizer.downloadPrivateCacheObjects(JobLocalizer.java:316)
at org.apache.hadoop.mapred.JobLocalizer.downloadPrivateCache(JobLocalizer.java:343)
at org.apache.hadoop.mapred.JobLocalizer.localizeJobFiles(JobLocalizer.java:388)
at org.apache.hadoop.mapred.JobLocalizer.localizeJobFiles(JobLocalizer.java:367)
at org.apache.hadoop.mapred.DefaultTaskController.initializeJob(DefaultTaskController.java:202)
at org.apache.hadoop.mapred.TaskTracker$4.run(TaskTracker.java:1228)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:416)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
at org.apache.hadoop.mapred.TaskTracker.initializeJob(TaskTracker.java:1203)
at org.apache.hadoop.mapred.TaskTracker.localizeJob(TaskTracker.java:1118)
at org.apache.hadoop.mapred.TaskTracker$5.run(TaskTracker.java:2430)
at java.lang.Thread.run(Thread.java:679)
我知道问题出在 JobLocalizer.java 并且DistributedCache.getLocalCacheFiles(conf)
返回 2 但我不知道发生这种情况的原因。谁能告诉我我没有得到什么?
PS:我忘了说我用的是Hadoop-1.0.4
PS2:问题是DistributedCache.getLocalCacheFiles(conf)
看到了真正的输入文件,还有一个与输入文件相同的临时文件,临时存储在 /tmp 文件夹中。当我在本地运行它时会发生这种情况(不会引发任何异常)。我猜当我从 hdfs 运行它时会发生类似的事情,但随后它会引发异常。有什么想法可以解决这个问题吗?