2012-04-03 2 views
4

Наконец-то я смогу запустить работу по сокращению карты на Hadoop (работает на одной машине debian). Тем не менее, карта уменьшить работу всегда терпит неудачу со следующей ошибкой:Операция с уменьшением карты Hadoop не работает при записи вывода

[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: Нет такого файла или каталога», он не говорит, что каталог на самом деле пытается получить доступ. Pinging localhost работает, и каталог ввода существует. Расположение банок также правильное.

Может кто-нибудь дать мне указатель на то, как исправить эту ошибку или узнать, какой файл 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> 

В соответствии с просьбой, выход пс auxww | grep TaskTracker is:

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 --- может это быть причиной m? Hadoop, я считаю, поддерживается только на солнце/оракуле jvm. Я видел множество загадочных видов ошибок, связанных с этим, на моем старом экземпляре hadoop, запущенном на моем открытом компьютере JDK 6. – jayunit100

ответ

4

Из отслеживания заданий определите, какой узел хаоса выполнил эту задачу. SSH к этому узлу и определить местоположение каталога hadoop.log.dir (проверьте файл mapred-site.xml для этого узла). Я предполагаю, что пользователь hadoop не имеет правильных разрешений для создания подкаталогов в этой папке.

фактическая папка пытается создать ложь под папкой $ {hadoop.log.dir}/userlogs - проверьте, что эта папка имеет правильные разрешения

В вашем случае, глядя на вывод ps, я предполагаю, что это папка вам необходимо изучить разрешение:

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

Я проверил местоположение, и у пользователя есть права (я запускаю все узлы на localhost, так что это тот же самый компьютер). Таким образом, это не путь, к которому он не может получить доступ. – openbas2

+0

Я должен добавить, что hadoop пишет несколько папок в mapred.local.dir, поэтому он может определенно найти его. Есть ли другие важные пути? У меня есть все в главном учебнике, настроенном ... – openbas2

+0

, который выполняет пользовательские службы hadoop - имеет ли этот пользователь разрешение (а не ваш локальный пользователь) - в основном вы можете «su - hadoop», а затем выполнить mkdir в каждой из перечисленных папок? Можете ли вы также опубликовать свойство conf? Mapred.local.dir' –