我正在使用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
被某种方式覆盖了。如果是这样的话,你能解释一下如何让我的出口全球化吗?
答案 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