使用Hadoop:localhost:错误:未设置JAVA_HOME

时间:2013-01-14 19:52:28

标签: bash hadoop ubuntu-12.04 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被某种方式覆盖了。如果是这样的话,你能解释一下如何让我的出口全球化吗?

11 个答案:

答案 0 :(得分:54)

我正在使用hadoop 1.1,并遇到同样的问题。

我通过将JAVA_HOME中的/etc/hadoop/hadoop-env.sh变量更改为:

来解决问题
export JAVA_HOME=/usr/lib/jvm/<jdk folder>

答案 1 :(得分:18)

解决此问题的方法是在conf / hadoop-env.sh文件中导出JAVA_HOME变量。

如果您已经在〜/ .bashrc中导出该变量并不重要,它仍会显示错误。

所以编辑 conf / hadoop-env.sh 并取消注释“export JAVA_HOME”行并为其添加适当的文件系统路径,即Java JDK的路径

  

#要使用的Java实现。必需。
   export JAVA_HOME =“/ path / to / java / JDK /”

答案 2 :(得分:1)

调试方法是在start-all.sh中放置一个“echo $ JAVA_HOME”。您是在不同的用户名下运行hadoop环境,还是以自己的身份运行?如果是前者,很可能没有为该用户设置JAVA_HOME环境变量。

另一个潜在问题是您未正确指定JAVA_HOME,并且您提供的值未指向JDK / JRE。请注意,即使JAVA_HOME设置不正确,“which java”和“java -version”也会起作用。

答案 3 :(得分:1)

从etc / hadoop / hadoop-env.sh中提取

唯一需要的环境变量是JAVA_HOME。所有其他人都是  可选的。运行分布式配置时,最好是  在此文件中设置JAVA_HOME,以便正确定义它 远程节点。

这意味着它更好并建议在这里设置JAVA_HOME ..即使现有定义读取JAVA_HOME变量。也许它没有从之前的设定值获得JAVA_HOME的价值......标准的apache手册并没有说明这一点:( :(

答案 4 :(得分:1)

此错误来自第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::")

并替换

export JAVA_HOME=${JAVA_HOME}/etc/hadoop/hadoop-env.sh中使用JAVA_HOME从上面的命令获得。

答案 5 :(得分:1)

我也遇到了 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

答案 6 :(得分:1)

无论是debian还是任何linux风格,只要知道~/.bash_profile属于特定用户且不是系统范围的。 在伪分布式环境中,hadoop适用于localhost,因此.bash_profile中的$JAVA_HOME不再有用。

只需在~/.bashrc中导出JAVA_HOME并在系统范围内使用它。

答案 7 :(得分:0)

检查您的备选方案是否指向正确的备选方案,您实际上可能指向其他版本并尝试更改另一个已安装版本上的hadoop-env.sh。

-alternatives --install / etc / hadoop / conf [generic_name] [您的正确路径]优先级{进一步检查备选方案的手册页}

手动设置备选方案,

替代方案 - 设置[通用名称] [您当前的路径]。

答案 8 :(得分:0)

更改JAVA_HOME

中的conf/hadoop-env.sh变量
export JAVA_HOME=/etc/local/java/<jdk folder>

答案 9 :(得分:0)

echo "export JAVA_HOME=/usr/lib/java" >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh

注意:请勿使用export JAVA_HOME=${JAVA_HOME}

答案 10 :(得分:0)

我把它放在文件 ~/.bashrc 的第一行,然后它运行良好!

export JAVA_HOME=/usr/lib/jvm/default-java