Ubuntu 12.04 LTSを使用しています。
Hadoopクイックスタートマニュアルを見て、疑似分散操作を行います。シンプルで簡単なようです(簡単です!)。
ただし、start-all.sh
を実行しようとすると、次のメッセージが表示されます。
localhost: Error: Java_HOME is not set.
この問題に対するstackoverflowに関する他のすべてのアドバイスを読み、Java_HOME
が設定されていることを確認するために次のことを行いました。
/etc/hadoop/conf/hadoop-env.sh
に設定しました
Java_HOME=/usr/lib/jvm/Java-6-Oracle
export Java_HOME
/etc/bash.bashrc
に設定しました
Java_HOME=/usr/lib/jvm/Java-6-Oracle
export Java_HOME
PATH=$PATH:$Java_HOME/bin
export PATH
which Java
は以下を返します。
/usr/bin/Java
Java –version
は動作します
echo $Java_HOME
は以下を返します。
/usr/lib/jvm/Java-6-Oracle
私はrootになり、ターミナルで明示的に記述しようとしました:
$ Java_HOME=/usr/lib/jvm/Java-6-Oracle
$ export Java_HOME
$ start-all.sh
このエラーの解決方法を教えていただければ幸いです。私のJava_HOME
が何らかの形で上書きされていると考えています。その場合、エクスポートをグローバルにする方法を説明してもらえますか?
Hadoop 1.1を使用していますが、同じ問題に直面しました。
Java_HOME
の/etc/hadoop/hadoop-env.sh
変数を次のように変更することで解決しました。
export Java_HOME=/usr/lib/jvm/<jdk folder>
この問題を解決する方法は、conf/hadoop-env.shファイル内のJava_HOME変数をエクスポートすることです。
〜/ .bashrcに既にその変数をエクスポートしているかどうかは関係ありませんが、それでもエラーが表示されます
したがって、editconf/hadoop-env.shで、「export Java_HOME」行のコメントを外し、適切なファイルシステムパスを追加します。 、つまり、Java JDKへのパス。
#Java使用する実装。必須。
export Java_HOME = "/ path/to/Java/JDK /"
etc/hadoop/hadoop-env.shから抽出
必要な環境変数はJava_HOMEのみです。その他はすべてオプションです。分散構成を実行するときは、このファイルにJava_HOMEを設定して、リモートノードで正しく定義されるようにするのが最善です。
つまり、既存の定義がJava_HOME変数を読み取る場合でも、ここでJava_HOMEを設定することをお勧めします。おそらく、以前に設定された値からJava_HOMEの値を取得していない...標準のApacheマニュアルはこれを教えません:( :(
Ubuntu LTS 16.04で同じ問題に遭遇しました。 bash -vx ./bin/hadoop
を実行すると、Javaがディレクトリであったかどうかがテストされました。したがって、Java_HOMEをフォルダに変更し、動作しました。
++ [[ ! -d /usr/bin/Java ]]
++ hadoop_error 'ERROR: Java_HOME /usr/bin/Java does not exist.'
++ echo 'ERROR: Java_HOME /usr/bin/Java does not exist.'
ERROR: Java_HOME /usr/bin/Java does not exist.
そこで、./etc/hadoop/hadoop-env.sh
のJava_HOMEを
export Java_HOME=/usr/lib/jvm/Java-8-Oracle/jre/
そして、hadoopは正常に起動します。これは、これにも言及されています 記事 。
これをデバッグする方法は、start-all.shに「echo $ Java_HOME」を配置することです。 hadoop環境を別のユーザー名で実行していますか、それとも自分自身ですか?前者の場合、Java_HOME環境変数がそのユーザーに設定されていない可能性が非常に高いです。
もう1つの潜在的な問題は、Java_HOMEを誤って指定したことと、指定した値がJDK/JREを指していないことです。 Java_HOMEが正しく設定されていなくても、「which Java」と「Java -version」の両方が機能することに注意してください。
debianやLinuxフレーバーに関係なく、~/.bash_profile
は特定のユーザーに属し、システム全体ではないことを知ってください。疑似分散環境では、hadoopはlocalhost
で動作するため、.bash_profileの$Java_HOME
は使用できなくなります。
java_HOMEを~/.bashrc
にエクスポートして、システム全体で使用するだけです。
hadoop 1.1で同様の問題に直面していましたが、Java_HOME
はコメントされました:hadoop/conf/hadoop-env.sh
そうだった
/#Java_HOME=/usr/lib/jvm/Java-6-Oracle
に変更する必要がありました
Java_HOME=/usr/lib/jvm/Java-6-Oracle
echo "export Java_HOME=/usr/lib/Java" >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh
注意:export Java_HOME=${Java_HOME}
!
Java_HOME
のconf/hadoop-env.sh
変数を変更します
export Java_HOME=/etc/local/Java/<jdk folder>
選択肢が正しいものを指しているかどうかを確認します。実際には別のバージョンを指している可能性があり、インストールされている別のバージョンでhadoop-env.shを変更しようとしています。
-alternatives --install/etc/hadoop/conf [generic_name] [your your path] priority {さらに代替のmanページを確認するには}
代替を手動で設定するには、
代替--set [一般名] [現在のパス]。