使用 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 中的 NameNode 未运行且无法访问 (http://localhost:50030)