/bin/bash: /bin/java: нет такого файла или каталога
Я пытался запустить простую программу MapReduce wordcount с использованием Java 1.7 SDK и Hadoop2.7.1 в Mac OS X EL Captain 10.11, и я получаю следующее сообщение об ошибке в моем журнале контейнеров "stderr"/bin/bash: /bin/java: Данный файл или каталог отсутствует
Применение Log-
5/11/27 02:52:33 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
15/11/27 02:52:33 INFO client.RMProxy: Connecting to ResourceManager at /192.168.200.96:8032
15/11/27 02:52:34 INFO input.FileInputFormat: Total input paths to process : 0
15/11/27 02:52:34 INFO mapreduce.JobSubmitter: number of splits:0
15/11/27 02:52:34 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1448608832342_0003
15/11/27 02:52:34 INFO impl.YarnClientImpl: Submitted application application_1448608832342_0003
15/11/27 02:52:34 INFO mapreduce.Job: The url to track the job: http://mymac.local:8088/proxy/application_1448608832342_0003/
15/11/27 02:52:34 INFO mapreduce.Job: Running job: job_1448608832342_0003
15/11/27 02:52:38 INFO mapreduce.Job: Job job_1448608832342_0003 running in uber mode : false
15/11/27 02:52:38 INFO mapreduce.Job: map 0% reduce 0%
15/11/27 02:52:38 INFO mapreduce.Job: Job job_1448608832342_0003 failed with state FAILED due to: Application application_1448608832342_0003 failed 2 times due to AM Container for appattempt_1448608832342_0003_000002 exited with exitCode: 127
For more detailed output, check application tracking page:http://mymac.local:8088/cluster/app/application_1448608832342_0003Then, click on links to logs of each attempt.
Diagnostics: Exception from container-launch.
Container id: container_1448608832342_0003_02_000001
Exit code: 127
Stack trace: ExitCodeException exitCode=127:
at org.apache.hadoop.util.Shell.runCommand(Shell.java:545)
at org.apache.hadoop.util.Shell.run(Shell.java:456)
at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:722)
at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:211)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:82)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Container exited with a non-zero exit code 127
Failing this attempt. Failing the application.
15/11/27 02:52:38 INFO mapreduce.Job: Counters: 0
Команда, которую я запускаю
hadoop jar wordcount.jar org.myorg.WordCount /user/gangadharkadam/input/ /user/gangadharkadam/output/
Моя переменная ENV are-
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.1
export HADOOP_MAPRED_HOME=/usr/local/hadoop/hadoop-2.7.1
export HADOOP_COMMON_HOME=/usr/local/hadoop/hadoop-2.7.1
export HADOOP_HDFS_HOME=/usr/local/hadoop/hadoop-2.7.1
export YARN_HOME=/usr/local/hadoop/hadoop-2.7.1
export HADOOP_CONF_DIR=/usr/local/hadoop/hadoop-2.7.1/etc/hadoop
export HADOOP_CLASSPATH=$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:HADOOP_HOME/sbin:$M2_HOME/bin:$ANT_HOME/bin:$IVY_HOME/bin:$FB_HOME/bin:$MYSQL_HOME/bin:$MYSQL_HOME/lib:$SQOOP_HOME/bin
Проблема заключается в том, что YARN использует другой путь для исполняемого файла JAVA, отличный от того, который у вас есть в вашей ОС. локальные журналы для неудавшейся задачи в "stderr" shows-/bin/bash: /bin/java: нет такого файла или каталога
Я попытался создать мягкую ссылку из $ JAVA_HOM/bin/java в /bin/java, но в El Captian OS X, но не позволял создавать программную ссылку. Новая ОС X EL Captian имеет rootless login, и пользователь не может создавать что-либо в определенных ограниченных папках, таких как /bin/. Любая работа по этому вопросу высоко ценится. Спасибо заранее.
Ответы
Ответ 1
Этот ответ применим для Hadoop версии 2.6.0 и более ранних версий. Отключение SIP и создание символической ссылки действительно обеспечивают обходной путь. Лучшее решение - исправить hasoop-config.sh, чтобы он правильно подбирал ваш JAVA_HOME
В HADOOP_HOME/libexec/hadoop-config.sh
искать условие if ниже # Attempt to set JAVA_HOME if it is not set
Удалите дополнительные круглые скобки в строке экспорта JAVA_HOME, как показано ниже. Изменить это
if [ -x /usr/libexec/java_home ]; then
export JAVA_HOME=($(/usr/libexec/java_home))
else
export JAVA_HOME=(/Library/Java/Home)
fi
в
if [ -x /usr/libexec/java_home ]; then
// note that the extra parentheses are removed
export JAVA_HOME=$(/usr/libexec/java_home)
else
export JAVA_HOME=/Library/Java/Home
fi
Перезапустите пряжу после того, как вы внесете это изменение.
Более подробную информацию можно найти здесь https://issues.apache.org/jira/browse/HADOOP-8717 и кажется, что Hadoop 3.0.0-alpha1 является первым выпуском с исправлением.
Ответ 2
Запуск YARN
с использованием следующих команд вместо $HADOOP_PREFIX/sbin/start-yarn.sh
исправил эту проблему для меня.
$HADOOP_PREFIX/sbin/yarn-daemon.sh start resourcemanager;
$HADOOP_PREFIX/sbin/yarn-daemon.sh start nodemanager;
как указано в следующей ссылке
https://issues.apache.org/jira/browse/HADOOP-8717
Ответ 3
Я получал ту же ошибку, когда я установил hadoop 2.7.1 с указанными вами конфигурациями. Я пошел по этой ссылке, чтобы получить представление о том, почему я получил эту ошибку.
https://cloudcelebrity.wordpress.com/2014/01/31/yarn-job-problem-application-application_-failed-1-times-due-to-am-container-for-xx-exited-with-exitcode- 127/
Тем не менее, поскольку я работаю на OS X El Capitan.. Мне нужно идти без корней (отключить защиту целостности системы), а затем продолжить
sudo ln -s /usr/bin/java /bin/java
Не забудьте включить SIP после того, как вы закончите с вышеуказанным изменением, для вашей безопасности MAC. После этого изменения программа сокращения карт будет работать, как вы ожидаете
Ответ 4
Эта строка неверна.
export $JAVA_HOME=
должен начаться
export JAVA_HOME=
Вы используете только $
при поиске переменной.
Ответ 5
Перейдите в файл ./libexec/hadoop-config.sh
и добавьте JAVA=$JAVA_HOME
"перед # Попытка установить JAVA_HOME, если она не установлена, if [[ -z $JAVA_HOME ]]; then
"
Это должно решить вашу проблему
Ответ 6
Ничто из перечисленного не помогло мне. Для меня я решил:
Установка hadoop-env.sh
в /usr/local/Cellar/hadoop/etc/hadoop/hadoop-env.sh
Изменено:
export JAVA_HOME=${JAVA_HOME}
К этому:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home
Все кредиты для этого пользователя: fooobar.com/info/11103177/...
ура