2012-04-03 81 views
4

我終於能夠在Hadoop上啓動一個map-reduce作業(運行在單個debian機器上)。然而,圖減少工作總是失敗,出現以下錯誤:Hadoop map-reduce操作在寫入輸出時失敗

[email protected]:~$ ./hadoop-1.0.1/bin/hadoop jar hadooptest/main.jar nl.mydomain.hadoop.debian.test.Main /user/hadoopmachine/input /user/hadoopmachine/output 
Warning: $HADOOP_HOME is deprecated. 

12/04/03 07:29:35 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same. 
****hdfs://localhost:9000/user/hadoopmachine/input 
12/04/03 07:29:35 INFO input.FileInputFormat: Total input paths to process : 1 
12/04/03 07:29:35 INFO mapred.JobClient: Running job: job_201204030722_0002 
12/04/03 07:29:36 INFO mapred.JobClient: map 0% reduce 0% 
12/04/03 07:29:41 INFO mapred.JobClient: Task Id : attempt_201204030722_0002_m_000002_0, Status : FAILED 
Error initializing attempt_201204030722_0002_m_000002_0: 
ENOENT: No such file or directory 
at org.apache.hadoop.io.nativeio.NativeIO.chmod(Native Method) 
at org.apache.hadoop.fs.FileUtil.execSetPermission(FileUtil.java:692) 
at org.apache.hadoop.fs.FileUtil.setPermission(FileUtil.java:647) 
at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:509) 
at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:344) 
at org.apache.hadoop.mapred.JobLocalizer.initializeJobLogDir(JobLocalizer.java:239) 
at org.apache.hadoop.mapred.DefaultTaskController.initializeJob(DefaultTaskController.java:196) 
at org.apache.hadoop.mapred.TaskTracker$4.run(TaskTracker.java:1226) 
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:1093) 
at org.apache.hadoop.mapred.TaskTracker.initializeJob(TaskTracker.java:1201) 
at org.apache.hadoop.mapred.TaskTracker.localizeJob(TaskTracker.java:1116) 
at org.apache.hadoop.mapred.TaskTracker$5.run(TaskTracker.java:2404) 
at java.lang.Thread.run(Thread.java:636) 

12/04/03 07:29:41 WARN mapred.JobClient: Error reading task outputhttp://localhost:50060/tasklog?plaintext=true&attemptid=attempt_201204030722_0002_m_000002_0&filter=stdout 
12/04/03 07:29:41 WARN mapred.JobClient: Error reading task outputhttp://localhost:50060/tasklog?plaintext=true&attemptid=attempt_201204030722_0002_m_000002_0&filter=stderr 

不幸的是,它只是說:「ENOENT:沒有這樣的文件或目錄」,它並沒有說什麼目錄,它實際上試圖訪問。 ping本地主機工作,並且輸入目錄確實存在。罐子的位置也是正確的。

任何人都可以給我一個關於如何解決這個錯誤的指針,或者如何找出Hadoop試圖訪問哪個文件?

我發現Hadoop的郵件列表上幾個類似的問題,但對那些沒有任何反應......

謝謝!

P.S. mapred.local.dir的配置如下所示(在mapred-site.xml中):

<property> 
    <name>mapred.local.dir</name> 
    <value>/home/hadoopmachine/hadoop_data/mapred</value> 
    <final>true</final> 
</property> 

根據要求,輸出ps auxww | grep TaskTracker是:

1000  4249 2.2 0.8 1181992 30176 ?  Sl 12:09 0:00 
/usr/lib/jvm/java-6-openjdk/bin/java -Dproc_tasktracker -Xmx1000m -Dhadoop.log.dir=/home/hadoopmachine/hadoop-1.0.1/libexec/../logs 
-Dhadoop.log.file=hadoop-hadoopmachine-tasktracker-debian.log -Dhadoop.home.dir=/home/hadoopmachine/hadoop-1.0.1/libexec/.. 
-Dhadoop.id.str=hadoopmachine -Dhadoop.root.logger=INFO,DRFA -Dhadoop.security.logger=INFO,NullAppender 
-Djava.library.path=/home/hadoopmachine/hadoop-1.0.1/libexec/../lib/native/Linux-i386-32 
-Dhadoop.policy.file=hadoop-policy.xml -classpath [ommitted very long list of jars] org.apache.hadoop.mapred.TaskTracker 
+0

我看到您使用的是打開的jdk 6 ---可能會導致問題米?我相信Hadoop只支持sun/oracle jvm。我在我的開放JDK 6機器上運行的舊hadoop實例上看到了許多與此有關的錯誤。 – jayunit100 2012-08-15 21:00:56

回答

4

從作業跟蹤器中,確定執行此任務的哪個hadoop節點。 SSH到該節點,並確定hadoop.log.dir目錄的位置(檢查mapred-site.xml中這個節點) - 我的猜測是Hadoop的用戶沒有正確的權限,此文件夾

中創建子目錄它試圖創建的實際文件夾位於$ {hadoop.log.dir}/userlogs文件夾下 - 檢查該文件夾是否具有正確的權限

在你的情況下,看着ps輸出,我猜這是文件夾您需要檢查以下權限:

/home/hadoopmachine/hadoop-1.0.1/libexec/../logs 
+0

我檢查了位置,並且用戶有權限(我運行localhost上的所有節點,所以它是同一臺機器)。所以這似乎不是它無法訪問的路徑。 – openbas2 2012-04-03 12:33:13

+0

我應該補充說hadoop在mapred.local.dir中寫了幾個文件夾,所以它肯定能找到它..是否還有其他重要的路徑?我已經在主教程中的所有配置... – openbas2 2012-04-03 12:35:42

+0

哪些用戶做hadoop服務運行 - 該用戶是否有權限(而不是您的本地用戶) - 基本上你可以'su - hadoop'然後執行mkdir在列出的每個文件夾中?你也可以發佈conf屬性'mapred.local.dir' – 2012-04-03 13:30:17