hadoop从哪里获得JAVA_HOME变量值?

时间:2013-01-11 20:47:51

标签: hadoop

我已正确设置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

9 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:6)

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

答案 2 :(得分:3)

我正在"错误 / 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

我注意到的最多的是箭头的左侧是Teal,箭头的右侧是绿色,在我的bash提示中。我以为它可能是一个符号链接。我这次再次执行此操作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

请注意,我通过sudo apt-get install default-jdk

开始安装JDK

答案 3 :(得分:2)

有两个hadoop-env.sh个文件:一个位于conf目录下的hadoop子目录中,另一个位于/etc/hadoop下面。您需要更改两者中的$JAVA_HOME

答案 4 :(得分: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

答案 5 :(得分:0)

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

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

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

所以这里是hacky部分。我去了预期找到java-6-sun的地方,并为我的java安装设置了一个符号链接

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

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

答案 6 :(得分:0)

我有同样的问题,但对我来说这是另一个问题。 hadoop脚本期待/opt/hadoop/jdk1.0.7.40作为我的Java主页。但我把它设置为/opt/hadoop/jdk1.0.7_40。下划线产生了不同。现在它正在运作。可能这对某人有帮助 丹

答案 7 :(得分:0)

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

答案 8 :(得分: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

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