29

我正在使用 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的不知何故被覆盖了。如果是这样,您能否向我解释如何使我的出口全球化?

4

12 回答 12

66

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

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

export JAVA_HOME=/usr/lib/jvm/<jdk folder>
于 2013-01-22T15:54:23.563 回答
21

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

不管你是否已经在 ~/.bashrc 中导出了该变量,它仍然会显示错误。

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

# 要使用的 Java 实现。必需的。
导出 JAVA_HOME="/path/to/java/JDK/"

于 2013-06-28T13:14:08.840 回答
3

在 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.

所以我将 JAVA_HOME 更改./etc/hadoop/hadoop-env.sh

export JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre/

hadoop 开始正常。这篇文章中也提到了这一点。

于 2018-05-10T16:34:29.453 回答
1

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

另一个潜在的问题是您错误地指定了 JAVA_HOME,并且您提供的值没有指向 JDK/JRE。请注意,“which java”和“java -version”都可以工作,即使 JAVA_HOME 设置不正确。

于 2013-01-14T20:34:53.850 回答
1

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

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

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

于 2015-12-16T21:29:37.997 回答
1

无论 debian 或任何 linux 风格,只知道~/.bash_profile属于特定用户而不是系统范围。在伪分布式环境中,hadoop 可以正常工作,localhost因此$JAVA_HOMEin .bash_profile 不再有用。

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

于 2017-12-02T23:18:01.657 回答
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
于 2017-10-26T09:05:13.190 回答
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.

$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 。

于 2016-12-20T08:42:18.430 回答
0

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

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

于 2021-04-21T10:17:10.183 回答
0
echo "export JAVA_HOME=/usr/lib/java" >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh

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

于 2016-11-03T16:07:26.593 回答
0

改变JAVA_HOME变量conf/hadoop-env.sh

export JAVA_HOME=/etc/local/java/<jdk folder>
于 2016-04-13T14:33:41.120 回答
0

检查您的替代方案是否指向正确的,您实际上可能指向不同的版本并试图在另一个已安装的版本上更改 hadoop-env.sh。

-alternatives --install /etc/hadoop/conf [generic_name] [你的正确路径]优先级{进一步检查替代品手册页}

手动设置替代方案,

替代品 --set [通用名称] [您的当前路径]。

于 2016-01-19T00:07:35.493 回答