web-dev-qa-db-ja.com

Hadoopの操作:localhost:エラー:Java_HOMEが設定されていません

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が何らかの形で上書きされていると考えています。その場合、エクスポートをグローバルにする方法を説明してもらえますか?

25
Ali Ismail

Hadoop 1.1を使用していますが、同じ問題に直面しました。

Java_HOME/etc/hadoop/hadoop-env.sh変数を次のように変更することで解決しました。

export Java_HOME=/usr/lib/jvm/<jdk folder>
56
Krishna

この問題を解決する方法は、conf/hadoop-env.shファイル内のJava_HOME変数をエクスポートすることです。

〜/ .bashrcに既にその変数をエクスポートしているかどうかは関係ありませんが、それでもエラーが表示されます

したがって、editconf/hadoop-env.shで、「export Java_HOME」行のコメントを外し、適切なファイルシステムパスを追加します。 、つまり、Java JDKへのパス。

#Java使用する実装。必須。
export Java_HOME = "/ path/to/Java/JDK /"

19
bitek

etc/hadoop/hadoop-env.shから抽出

必要な環境変数はJava_HOMEのみです。その他はすべてオプションです。分散構成を実行するときは、このファイルにJava_HOMEを設定して、リモートノードで正しく定義されるようにするのが最善です。

つまり、既存の定義がJava_HOME変数を読み取る場合でも、ここでJava_HOMEを設定することをお勧めします。おそらく、以前に設定された値からJava_HOMEの値を取得していない...標準のApacheマニュアルはこれを教えません:( :(

1

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は正常に起動します。これは、これにも言及されています 記事

1
kometen

これをデバッグする方法は、start-all.shに「echo $ Java_HOME」を配置することです。 hadoop環境を別のユーザー名で実行していますか、それとも自分自身ですか?前者の場合、Java_HOME環境変数がそのユーザーに設定されていない可能性が非常に高いです。

もう1つの潜在的な問題は、Java_HOMEを誤って指定したことと、指定した値がJDK/JREを指していないことです。 Java_HOMEが正しく設定されていなくても、「which Java」と「Java -version」の両方が機能することに注意してください。

1
Paul Sanwald

debianやLinuxフレーバーに関係なく、~/.bash_profileは特定のユーザーに属し、システム全体ではないことを知ってください。疑似分散環境では、hadoopはlocalhostで動作するため、.bash_profileの$Java_HOMEは使用できなくなります。

java_HOMEを~/.bashrcにエクスポートして、システム全体で使用するだけです。

1
Mr. Crowley

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
1
codeguru
echo "export Java_HOME=/usr/lib/Java" >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh

注意:export Java_HOME=${Java_HOME}

0
JsonBruce

Java_HOMEconf/hadoop-env.sh変数を変更します

export Java_HOME=/etc/local/Java/<jdk folder>
0
Raja Sekaran

選択肢が正しいものを指しているかどうかを確認します。実際には別のバージョンを指している可能性があり、インストールされている別のバージョンでhadoop-env.shを変更しようとしています。

-alternatives --install/etc/hadoop/conf [generic_name] [your your path] priority {さらに代替のmanページを確認するには}

代替を手動で設定するには、

代替--set [一般名] [現在のパス]。

0
Rajarsh