![](/img/trans.png)
[英]Error when trying to set the $JAVA_HOME - Error : JAVA_HOME is not set
[英]Working With Hadoop: localhost: Error: JAVA_HOME is not set
我正在使用 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,並面臨同樣的問題。
我通過將/etc/hadoop/hadoop-env.sh
JAVA_HOME
變量/etc/hadoop/hadoop-env.sh
為:
export JAVA_HOME=/usr/lib/jvm/<jdk folder>
解決這個問題的方法是在conf/hadoop-env.sh文件中導出JAVA_HOME變量。
如果您已經在 ~/.bashrc 中導出該變量並不重要,它仍然會顯示錯誤。
因此,編輯conf/hadoop-env.sh並取消注釋“export JAVA_HOME”行並為其添加適當的文件系統路徑,即 Java JDK 的路徑。
# 要使用的 Java 實現。 必需的。
導出 JAVA_HOME="/path/to/java/JDK/"
在 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 環境變量。
另一個潛在問題是您錯誤地指定了 JAVA_HOME,並且您提供的值未指向 JDK/JRE。 請注意,即使 JAVA_HOME 設置不正確,"which java" 和 "java -version" 都可以工作。
從 etc/hadoop/hadoop-env.sh 中提取
唯一需要的環境變量是 JAVA_HOME。 所有其他都是可選的。 運行分布式配置時,最好在此文件中設置 JAVA_HOME,以便在遠程節點上正確定義。
這意味着它更好,建議在此處設置 JAVA_HOME .. 即使現有定義讀取 JAVA_HOME 變量。 也許它沒有從先前設置的值中獲得 JAVA_HOME 的值......標准 apache 手冊沒有說明這一點:( :(
此錯誤來自第 180 行
if [[ -z $JAVA_HOME ]]; then
echo "Error: JAVA_HOME is not set and could not be found." 1>&2
exit 1
fi
在libexec/hadoop-config.sh
。
在該腳本中嘗試 echo $JAVA_HOME
。 如果不認識,
使用以下命令查找您的JAVA_HOME
:
$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")
並更換線
在/etc/hadoop/hadoop-env.sh
使用 JAVA_HOME export JAVA_HOME=${JAVA_HOME}
從上述命令中獲得。
我在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
無論是 debian 還是任何 linux 風格,只要知道~/.bash_profile
屬於特定用戶,而不是系統范圍的。 在偽分布式環境中,hadoop 在localhost
工作,因此 .bash_profile 中的$JAVA_HOME
不再有用。
只需在~/.bashrc
導出 JAVA_HOME 並在系統范圍內使用它。
檢查您的替代品是否指向正確的替代品,您實際上可能指向不同的版本並嘗試更改另一個已安裝版本的 hadoop-env.sh。
-alternatives --install /etc/hadoop/conf [generic_name] [您的正確路徑] 優先級{進一步檢查替代品的手冊頁}
手動設置備選方案,
替代方案 --set [通用名稱] [您當前的路徑]。
更改conf/hadoop-env.sh
的JAVA_HOME
變量
export JAVA_HOME=/etc/local/java/<jdk folder>
echo "export JAVA_HOME=/usr/lib/java" >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh
注意:不要使用export JAVA_HOME=${JAVA_HOME}
!
我把它放在文件~/.bashrc
的第一行,然后它運行良好!
export JAVA_HOME=/usr/lib/jvm/default-java
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.