11

我设置JAVA_HOME正确,当我设置正确时echo,我看到了正确的值:

$ echo $JAVA_HOME
/usr/lib/jvm/java-6-openjdk-amd64/

我也把JAVA_HOME值放到了hadoop-env.sh

$ grep JAVA_HOME conf/hadoop-env.sh 
# The only required environment variable is JAVA_HOME.  All others are
# set JAVA_HOME in this file, so that it is correctly defined on
export JAVA_HOME="/usr/lib/jvm/java-6-openjdk-amd64/"

尽管如此,hadoop 仍然显示出JAVA_HOME完全不同的变量。我不知道它从哪里得到这个值。有什么建议么?

$ hadoop noname -format
Warning: $HADOOP_HOME is deprecated.

/usr/bin/hadoop: line 320: /usr/lib/jvm/java-6-sun/bin/java: No such file or directory
/usr/bin/hadoop: line 390: /usr/lib/jvm/java-6-sun/bin/java: No such file or directory
4

9 回答 9

17

我的 Hadoop 安装也遇到了同样的问题。我在/etc/hadoop/hadoop-env.shJAVA_HOME 中发现被硬编码为/usr/lib/jvm/java-6-sun. 我继续将其更改为${JAVA_HOME},这似乎可以解决问题。

于 2013-04-16T14:19:17.157 回答
6

如果有人遇到同样的问题,请查看是否创建了 /etc/hadoop 目录。如果是,则将$JAVA_HOME变量/etc/hadoop/hadoop-env.sh指向适当的 jvm 路径。

于 2013-06-16T09:38:47.267 回答
6

我遇到“错误/usr/bin/java /bin/java 不存在”

在 ~/.bashrc 我将 JAVA_HOME 设置为/usr/bin/java. 我看到hadoop/etc/hadoop-config.sh它正在使用$JAVA_HOME/bin/java;这解释了该错误。只是,它没有修复它以删除 /bin/java。为了找到我的答案,我通过调查

cd /usr/bin/java
ls -al

我看到了

lrwxrwxrwx 1 root root 46 Jul 22 16:01 /usr/bin/java -> /etc/alternatives/java

在我的 bash 提示符中,我最注意到的是箭头的左侧是 Teal,而箭头的右侧是 Green。我认为这可能是一个符号链接。这次我再次这样做了ls -al-al非常重要)符号链接位置(见下文),并注意到看起来像另一个符号链接。

root@groovy:~# ls /etc/alternatives/java -al
lrwxrwxrwx 1 root root 46 Jul 22 16:01 /etc/alternatives/java -> /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java

我在箭头右侧取了那个值,并将其放入 ~/.bashrc


最终配置

~/.bashrc

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/jre
export PATH=$PATH:$JAVA_HOME

hadoop/etc/hadoop/hadoop-env.sh

export JAVA_HOME=${JAVA_HOME}

hadoop/libexec/hadoop-config.sh

EXPORT JAVA_HOME=$JAVA_HOME/bin

请注意,我安装的 JDK 是从 via 开始的sudo apt-get install default-jdk

于 2016-08-04T17:19:27.570 回答
2

有两个hadoop-env.sh文件:一个在confhadoop目录下的子目录中,一个在/etc/hadoop. 你需要改变$JAVA_HOME两者。

于 2014-03-15T22:34:46.223 回答
1

在 $HADOOP_HOME/etc/hadoop/hadoop-env.sh 中设置

export JAVA_HOME=/usr/bin

在 $HADOOP_HOME/libexec/hadoop-config.sh 中查找并修改JAVA=$JAVA_HOME/bin/java

JAVA=$JAVA_HOME/java
于 2016-06-28T23:05:13.277 回答
0

我很确定这不是理想的解决方案。但这就是我所做的:

我在整个过程中都放置了 echo 语句,/usr/local/hadoop/bin/hadoop以查看何时JAVA_HOME设置为静态(无论如何似乎是静态)定义的/usr/lib/jvm/java-6-sun.

我可以说这几乎是马上发生的。我不知道为什么会这样。我在我的路径和所有内容中安装了 java/usr/local/jdk1.7.0_17并正确设置了 JAVA_HOME。有趣的是,我什至没有安装 java 6!

所以这是骇人听闻的部分。我去了它期望找到java-6-sun的地方,并为我的java安装设置了一个符号链接

cd /usr/lib/jvm
sudo ln -s /usr/local/jdk1.7.0_17/ java-6-sun

然后一切正常。我知道非常hacky,但也许这篇文章可以帮助其他人。

于 2013-03-11T19:30:10.207 回答
0

我有同样的问题,但对我来说这是不同的问题。hadoop 脚本期望 /opt/hadoop/jdk1.0.7.40 作为我的 Java 主页。但我将其设置为/opt/hadoop/jdk1.0.7_40。下划线有所不同。现在它正在工作。可能这对某人有帮助,丹

于 2013-09-27T07:16:45.877 回答
0

我找到了一个有趣的解决方案:<br> 如果你echo $JAVA_HOME,你可能会得到/usr/bin/java
echo export $JAVA_HOME=/usr/ >> conf/hadoop-env.sh

于 2014-03-21T07:09:34.643 回答
0

让你们的东西复杂化....我有 /usr/lib/java-1.8.0-openjdk_BLABLA 而 hadoop 想要 /usr/lib/java-1.8.0-openjdk_YADIYADA

然后我去: cp -ar /usr/lib/java-1.8.0-openjdk_BLABLA /usr/lib/java-1.8.0-openjdk_YADIYADA

很开心!没有办法搞砸所有这些无意义的confs ...

于 2017-09-03T22:05:58.397 回答