Hadoop を使用して selfjoin タスクを実行するコードをいくつか書きました。この目的のために、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から実行すると同様のことが起こると思いますが、例外がスローされます。どうすればこれを修正できますか?