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

Posted

技术标签:

【中文标题】使用 Hadoop:localhost:错误:未设置 JAVA_HOME【英文标题】:Working With Hadoop: localhost: Error: JAVA_HOME is not set 【发布时间】:2012-12-28 20:02:17 【问题描述】:

我正在使用 Ubuntu 12.04 LTS。

我正在阅读 hadoop 快速入门手册来进行伪分布式操作。它看起来简单明了(容易!)。

但是,当我尝试运行 start-all.sh 时,我得到:

localhost: Error: JAVA_HOME is not set.

我已阅读有关此问题的所有其他关于 *** 的建议,并已执行以下操作以确保已设置 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 正在以某种方式被覆盖。如果是这样,您能否向我解释一下如何使我的出口全球化?

【问题讨论】:

更改 bashrc 时需要重置终端 【参考方案1】:

我使用的是 hadoop 1.1,遇到了同样的问题。

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

export JAVA_HOME=/usr/lib/jvm/<jdk folder>

【讨论】:

是的,就是这样。它也适用于 hadoop-2.6.0。谢谢! 适用于 hadoop-2.7.3 适用于 hadoop-3.0 在 3038 年仍然适用于 hadoop【参考方案2】:

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

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

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

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

【讨论】:

我还必须明确设置它,而不是 $JAVA_HOME @NikitaG。我也是。即使我 echo $JAVA_HOME 总是打印正确的值,也只有明确设置它才有效。 在hadoop-2.7.3中,hadoop-env.sh文件位于hadoop-2.7.3/etc/hadoop目录而不是conf目录【参考方案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.

所以我把./etc/hadoop/hadoop-env.sh中的JAVA_HOME改成了

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

hadoop 可以正常启动。这个article中也提到了这一点。

【讨论】:

【参考方案4】:

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

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

【讨论】:

谢谢。我当时以 Root 身份运行它(以避免权限问题),它覆盖了我的 JAVA_HOME。我最终创建了一个新用户并赋予它正确的权限。 Bash.Bashrc 使用新用户名。现在一切都很好[就像新解决的那样:)]【参考方案5】:

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

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

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

【讨论】:

【参考方案6】:

此错误来自第 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 您从上面的命令中获得。

【讨论】:

【参考方案7】:

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

【讨论】:

我也面临同样的情况,【参考方案8】:

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

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

【讨论】:

【参考方案9】:

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

-alternatives --install /etc/hadoop/conf [generic_name] [your correct path] 优先级进一步检查替代方案的手册页

手动设置替代方案,

alternatives --set [通用名称] [您的当前路径]。

【讨论】:

【参考方案10】:

更改conf/hadoop-env.sh中的JAVA_HOME变量

export JAVA_HOME=/etc/local/java/<jdk folder>

【讨论】:

能否请您详细说明您的答案,添加更多关于您提供的解决方案的描述?【参考方案11】:
echo "export JAVA_HOME=/usr/lib/java" >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh

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

【讨论】:

【参考方案12】:

我把它放在文件~/.bashrc的第一行,然后就可以了!

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

【讨论】:

以上是关于使用 Hadoop:localhost:错误:未设置 JAVA_HOME的主要内容,如果未能解决你的问题,请参考以下文章

使用 hadoop 时出现错误“无法从 /webhdfs/v1/?op=LISTSTATUS:服务器错误检索数据”

干货满满| Hadoop常见错误总结

hadoop 中的 NameNode 未运行且无法访问 (http://localhost:50030)

字节跳动调整组织架构:形成六大业务板块,未设CFO

苹果回应“远程扫描用户相册”:声明被广泛误解,未设后门,功能仅美国可用...

ubuntu下Hadoop无法使用的问题