Ошибка Hadoop без sudo - временная директория является причиной?
Я устанавливаю Hadoop MapReduce 1.0.3 в Debian, в моем каталоге $HOME/hadoop-1.0.3. затем
cd $HOME/hadoop-1.0.3
Все необходимое программное обеспечение установлено. Текущий пользователь - adminUser - пользователь sudo
Я запускаю программу в локальном режиме с конфигурацией по умолчанию Hadoop:
./bin/hadoop --config ./default_conf_directory jar my_program.jar my_main_class ./input_directory ./output_directory
It fails with error: java.io.IOException: Job failed!
Я добавляю sudo для этой команды
sudo ./bin/hadoop --config ./default_conf_directory jar my_program.jar my_main_class ./input_directory ./output_directory
Он работает хорошо и успешно со всеми ожидаемыми результатами. Может быть, Hadoop уже сделал что-то, что требует прав sudo? Не могли бы вы рассказать мне о том, что делает Hadoop, прежде чем распространять задачи в TaskTracker?
Откройте файл hadoop-1.0.3/src/core/core-default.xml, я вижу эту конфигурацию:
<property> <name>hadoop.tmp.dir</name> <value>/tmp/hadoop-${user.name}</value <description>A base for other temporary directories.</description> </property>
Откройте файл hadoop-1.0.3/src/mapred/mapred-default.xml, я вижу эту конфигурацию:
<property> <name>mapred.local.dir</name> <value>${hadoop.tmp.dir}/mapred/local</value> <description>The local directory where MapReduce stores intermediate data files. May be a comma-separated list of directories on different devices in order to spread disk i/o. Directories that do not exist are ignored.</description></property>
Я просматриваю / tmp и нахожу два каталога hadoop-adminUser (созданный после неудачного запуска без sudo) и hadoop-root (созданный после успешного запуска с sudo).
Просматривая каталог /tmp/hadoop-root (созданный после успешного запуска с помощью sudo), я нахожу следующие структуры:
/tmp/hadoop-root/mapred/staging ; /tmp/hadoop-root/mapred/local ; /tmp/hadoop-root/mapred/local/taskTracker ; /tmp/hadoop-root/mapred/local/taskTracker/root/jobcache/...; /tmp/hadoop-root/mapred/local/LocalRunner
все нормально
но когда я просматриваю каталог /tmp/hadoop-adminUser (созданный после неудачного запуска без sudo), я вижу только
/tmp/hadoop-adminUser/mapred/staging ; /tmp/hadoop-adminUser/mapred/local ; /tmp/hadoop-adminUser/mapred/local/LocalRunner
Здесь нет директории taskTracker. Может быть, это причина неудачной работы. Но я не понимаю, почему каталог taskTracker не создается в каталоге /tmp/hadoop-adminUser, потому что adminUser имеет право создавать / удалять каталог / файлы в / tmp. Я пробовал с Linux команду mkdir и т. Д. Все хорошо.
Я уже изменил конфигурацию по умолчанию, изменив временный каталог, добавив эту конфигурацию в core-site.xml в моем каталоге конфигурации:
<property> <name>hadoop.tmp.dir</name> <value>/tmp_hadoop/hadoop-${user.name}</value> <description>A base for other temporary directories.</description> </property>
Я создаю / tmp_hadoop, используя sudo, а затем передаю права на adminUser через chown. Все хорошо. Затем я запускаю эту команду hadoop с и без sudo и получаю одинаковые результаты. sudo успешен и без sudo терпит неудачу с тем же феноменом. Существует /tmp_hadoop/hadoop-root/mapred/local/taskTracker/... но нет /tmp_hadoop/hadoop-adminUser/mapred/local/taskTracker/...
Может быть, Hadoop уже сделал что-то, что требует прав sudo, а не только создать каталог в каталоге / tmp?
Пожалуйста, объясните и спасибо