Mac OS X EL Captain10.11でJava 1.7 SDKとHadoop2.7.1を使用して、単純な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へのソフトリンクを作成しようとしましたが、El Captian OS Xで作成しましたが、ソフトリンクを作成できませんでした。新しいOSX EL Captianにはルートレスログインがあり、ユーザーは/ bin /などの特定の制限付きフォルダーに何も作成できません。この問題の回避策は大歓迎です。よろしくお願いします。
この回答は、Hadoopバージョン2.6.0以前に適用されます。 SIPを無効にしてシンボリックリンクを作成すると、回避策が提供されます。より良い解決策は、Java_HOMEを正しく取得するようにhadoop-config.shを修正することです。
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
この変更を行った後、yarnを再起動します。
詳細については、こちらをご覧ください https://issues.Apache.org/jira/browse/HADOOP-8717 そして、Hadoop3.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;
次のリンクで言及されているように
あなたが言及した構成でhadoop2.7.1をインストールしたときに、同じエラーが発生していました。このリンクをたどって、なぜこのエラーが発生したのかを理解しました。
ただし、OS X El Capitanで実行しているため、ルートレスになり(システム整合性保護を無効にして)、続行する必要があります。
Sudo ln -s /usr/bin/Java /bin/Java
上記の変更が完了したら、MACセキュリティのためにSIPを有効にすることを忘れないでください。この変更後、map-reduceプログラムは期待どおりに機能します。
上記のどれも私を助けませんでした。私が修正したのは:
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
このユーザーへのすべてのクレジット: https://stackoverflow.com/a/39676720/992347
乾杯
ファイル./libexec/hadoop-config.sh
に移動します
Java=$Java_HOME
を追加します
"before#Java_HOMEが設定されていない場合は設定を試みますif [[ -z $Java_HOME ]]; then
"
これはあなたの問題を解決するはずです
この行は間違っています。
export $Java_HOME=
開始する必要があります
export Java_HOME=
変数を検索するときは、$
のみを使用します。