簡體   English   中英

使用 Hadoop:本地主機:錯誤:未設置 JAVA_HOME

[英]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.shJAVA_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM