/bin/bash: /bin/java: 在 MacOS 的 Yarn 应用程序中没有这样的文件或目录错误
/bin/bash: /bin/java: No such file or directory error in Yarn apps in MacOS
我正在尝试 运行 使用 Java 1.7 SDK 和 Hadoop2.7.1 在 Mac OS X EL Captain 10.11 上 运行 一个简单的 wordcount MapReduce 程序,我得到了我的容器日志中出现以下错误消息 "stderr"
/bin/bash: /bin/java: 没有那个文件或目录
应用程序日志-
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 变量是-
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 可执行文件使用的路径与 OS 中的路径不同。 “stderr”中失败任务的本地日志显示-
/bin/bash: /bin/java: 没有那个文件或目录
我试图创建一个从 $JAVA_HOM/bin/java 到 /bin/java 的软 link 但是在 El Captian OS X 中但它不允许创建一软link。新 OS X EL Captian 具有无根登录,用户无法在某些受限文件夹(如 /bin/)上创建任何内容。
关于此问题的任何解决方法都需要提前 appreciated.Thanks。
这一行是错误的。
export $JAVA_HOME=
应该开始
export JAVA_HOME=
您只在查找变量时使用 $
。
当我使用您提到的配置安装 hadoop 2.7.1 时,我遇到了同样的错误。我按照这个 link 来了解为什么我会收到这个错误。
但是,由于我 运行 在 OS X El Capitan.. 我需要无根(禁用系统完整性保护)然后继续
sudo ln -s /usr/bin/java /bin/java
完成上述更改后,为了您的 MAC 安全,请不要忘记启用 SIP。
进行此更改后,map-reduce 程序将按您预期的方式工作
转到文件 ./libexec/hadoop-config.sh
并添加 JAVA=$JAVA_HOME
"before #如果没有设置则尝试设置JAVA_HOME
if [[ -z $JAVA_HOME ]]; then
"
这应该可以解决您的问题
此答案适用于 Hadoop 2.6.0 及更早版本。
禁用 SIP 并创建符号 link 确实提供了一种解决方法。
更好的解决方案是修复 hadoop-config.sh
以便它正确地获取您的 JAVA_HOME
在 HADOOP_HOME/libexec/hadoop-config.sh
中查找下面设置 JAVA_HOME
的 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
完成此更改后重新启动 yarn。
可以在此处找到更多详细信息 https://issues.apache.org/jira/browse/HADOOP-8717 似乎 Hadoop 3.0.0-alpha1 是第一个修复的版本。
使用以下命令而不是 $HADOOP_PREFIX/sbin/start-yarn.sh
启动 YARN
为我解决了这个问题。
$HADOOP_PREFIX/sbin/yarn-daemon.sh start resourcemanager;
$HADOOP_PREFIX/sbin/yarn-daemon.sh start nodemanager;
如下所述 link
以上的 None 帮助了我。我为我修复的是:
在 /usr/local/Cellar/hadoop/etc/hadoop/hadoop-env.sh
中设置 hadoop-env.sh
更改了这个:
export JAVA_HOME=${JAVA_HOME}
为此:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home
该用户的全部功劳:
干杯
以下顺序有助于解决 MacOS 10.5.17 Catalina 上的 Hadoop 2.7.3 中的问题
- 找出java被运行安装的路径:
/usr/libexec/java_home
示例路径:
/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
- 在
中添加java安装路径作为$JAVA_HOME
环境变量的值
hadoop_installation_folder/etc/hadoop/hadoop-env.sh
如下所示:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
- 重新启动 yarn 进程:
hadoop_installation_folder/sbin/stop-yarn.sh
hadoop_installation_folder/sbin/start-yarn.sh
- 重新运行失败的 map reduce 应用程序
我正在尝试 运行 使用 Java 1.7 SDK 和 Hadoop2.7.1 在 Mac OS X EL Captain 10.11 上 运行 一个简单的 wordcount MapReduce 程序,我得到了我的容器日志中出现以下错误消息 "stderr" /bin/bash: /bin/java: 没有那个文件或目录
应用程序日志-
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 变量是-
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 可执行文件使用的路径与 OS 中的路径不同。 “stderr”中失败任务的本地日志显示- /bin/bash: /bin/java: 没有那个文件或目录
我试图创建一个从 $JAVA_HOM/bin/java 到 /bin/java 的软 link 但是在 El Captian OS X 中但它不允许创建一软link。新 OS X EL Captian 具有无根登录,用户无法在某些受限文件夹(如 /bin/)上创建任何内容。 关于此问题的任何解决方法都需要提前 appreciated.Thanks。
这一行是错误的。
export $JAVA_HOME=
应该开始
export JAVA_HOME=
您只在查找变量时使用 $
。
当我使用您提到的配置安装 hadoop 2.7.1 时,我遇到了同样的错误。我按照这个 link 来了解为什么我会收到这个错误。
但是,由于我 运行 在 OS X El Capitan.. 我需要无根(禁用系统完整性保护)然后继续
sudo ln -s /usr/bin/java /bin/java
完成上述更改后,为了您的 MAC 安全,请不要忘记启用 SIP。 进行此更改后,map-reduce 程序将按您预期的方式工作
转到文件 ./libexec/hadoop-config.sh
并添加 JAVA=$JAVA_HOME
"before #如果没有设置则尝试设置JAVA_HOME
if [[ -z $JAVA_HOME ]]; then
"
这应该可以解决您的问题
此答案适用于 Hadoop 2.6.0 及更早版本。
禁用 SIP 并创建符号 link 确实提供了一种解决方法。
更好的解决方案是修复 hadoop-config.sh
以便它正确地获取您的 JAVA_HOME
在 HADOOP_HOME/libexec/hadoop-config.sh
中查找下面设置 JAVA_HOME
# 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
完成此更改后重新启动 yarn。
可以在此处找到更多详细信息 https://issues.apache.org/jira/browse/HADOOP-8717 似乎 Hadoop 3.0.0-alpha1 是第一个修复的版本。
使用以下命令而不是 $HADOOP_PREFIX/sbin/start-yarn.sh
启动 YARN
为我解决了这个问题。
$HADOOP_PREFIX/sbin/yarn-daemon.sh start resourcemanager;
$HADOOP_PREFIX/sbin/yarn-daemon.sh start nodemanager;
如下所述 link
None 帮助了我。我为我修复的是:
在 /usr/local/Cellar/hadoop/etc/hadoop/hadoop-env.sh
hadoop-env.sh
更改了这个:
export JAVA_HOME=${JAVA_HOME}
为此:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home
该用户的全部功劳:
干杯
以下顺序有助于解决 MacOS 10.5.17 Catalina 上的 Hadoop 2.7.3 中的问题
- 找出java被运行安装的路径:
/usr/libexec/java_home
示例路径:
/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
- 在 中添加java安装路径作为
$JAVA_HOME
环境变量的值
hadoop_installation_folder/etc/hadoop/hadoop-env.sh
如下所示:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
- 重新启动 yarn 进程:
hadoop_installation_folder/sbin/stop-yarn.sh
hadoop_installation_folder/sbin/start-yarn.sh
- 重新运行失败的 map reduce 应用程序