hadoop从何处获取JAVA_主变量值?
我已经正确设置了hadoop从何处获取JAVA_主变量值?,hadoop,Hadoop,我已经正确设置了JAVA\u HOME,当我echo它时,我看到了正确的值: $ echo $JAVA_HOME /usr/lib/jvm/java-6-openjdk-amd64/ 我还将JAVA\u 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 i
JAVA\u HOME
,当我echo
它时,我看到了正确的值:
$ echo $JAVA_HOME
/usr/lib/jvm/java-6-openjdk-amd64/
我还将JAVA\u 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\u 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
我敢肯定这不是理想的解决办法。但我就是这么做的: 我将echo语句放在
/usr/local/hadoop/bin/hadoop
中,以查看JAVA\u HOME
何时被设置为/usr/lib/jvm/JAVA-6-sun
的静态(无论如何似乎是静态的)定义路径
我可以说这几乎马上就发生了。我不知道为什么会这样。我在/usr/local/jdk1.7.0_17
中安装了java,并在路径和所有内容中正确设置了java_主页。有趣的是,我甚至没有安装Java6
这是令人讨厌的部分。我去了它希望找到java-6-sun的地方,并设置了一个指向我的java安装的符号链接
cd /usr/lib/jvm
sudo ln -s /usr/local/jdk1.7.0_17/ java-6-sun
然后一切顺利。我知道这是一篇非常黑客的文章,但也许这篇文章可以帮助其他人。我的Hadoop安装也有同样的问题。我在
/etc/hadoop/hadoop env.sh
中发现JAVA_HOME被硬编码为/usr/lib/jvm/JAVA-6-sun
。我把它改成了${JAVA_HOME}
,这似乎很管用。如果有人遇到同样的问题,看看是否创建了/etc/hadoop目录。如果是,则将/etc/hadoop/hadoop env.sh
中的$JAVA_HOME
变量指向相应的jvm路径。我也遇到了同样的问题,但对我来说是不同的问题。hadoop脚本期望将/opt/hadoop/jdk1.0.7.40作为我的Java主页。但我将其设置为/opt/hadoop/jdk1.0.7_40。下划线起了作用。现在它正在工作。也许这对某人有帮助
Dan有两个
hadoop env.sh
文件:一个在hadoop
目录下的conf
子目录下,另一个在/etc/hadoop
下。您需要同时更改$JAVA\u HOME
。我发现了一个有趣的解决方案:如果您
echo$JAVA\u HOME
,您可能会得到/usr/bin/JAVA
echo export$JAVA_HOME=/usr/>conf/hadoop env.sh
在$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
我遇到“错误/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提示符中,我注意到的最多的是箭头的左边是青色的,右边是绿色的。我想它可能是一个符号链接。这一次我再次使用了符号链接位置(见下文),并注意到了另一个符号链接
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}
EXPORT JAVA_HOME=$JAVA_HOME/bin
hadoop/libexec/hadoop config.sh
export JAVA_HOME=${JAVA_HOME}
EXPORT JAVA_HOME=$JAVA_HOME/bin
请注意,我首先通过sudo apt get install default JDK安装了JDK让你们的东西变得复杂了。。。。 我有/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 而且很开心!
没有办法搞乱所有这些无意义的对话…我看不出你在哪里表明Hadoop认为
$JAVA\u HOME
是不同的,只是它找不到特定的JAVA。是否有可能存在指向错误所在位置的simlink/etc?您是否查看了脚本以了解它对$JAVA\u HOME
的作用?我的意思是,它从$JAVA_HOME
获取$JAVA_HOME
,AFAIK.JAVA_HOME目录是JAVA_HOME=“/usr/lib/jvm/JAVA-6-openjdk-amd64/”。但是,hadoop“认为”它是“usr/lib/jvm/java-6-sun”。在hadoop脚本中,JAVA_HOME=$JAVA_HOME。hadoop类路径还显示/usr/lib/jvm/java-6-sun/lib/tools.jar,它应该是/usr/lib/jvm/java-1.6.0-openjdk-amd64/lib/tools.jar。如果在hadoop
中设置java\u-HOME
之后在shell脚本中回显java\u-HOME
(在hadoop
中,而不是hadoop-env>)?这里几乎没有什么可以出错的地方;你在用什么操作系统?什么版本的Hadoop?您是否已将HADOOP\u CONF\u DIR
设置为非标准?请确保/usr/bin/HADOOP
也不会覆盖JAVA\u HOME
的值,因为它也是一个shell脚本。另外,我不确定这是否适用于较新版本,但Hadoop可能只支持sun JVM而不支持openjdk。我的操作系统是Ubuntu 12.04,内核版本是3.3.1-030301-generic。Hadoop版本是Hadoop-1.1.1。我尝试在bin/hadoop脚本中手动设置JAVA_HOME变量。但当你运行hadoop脚本时,值被其他脚本覆盖,我仍然不知道是哪个脚本。太棒了!很多教程都没有提到这一点。如果Hadoop刚刚排除了-6-sun
部分,那么它将始终解析为由替代项符号链接的路径!如果您使用的是java-8,那么您可以在~/.bashrc
中使用/usr/lib/jvm/java-8-openjdk-amd64/jre
如果您使用的是java-8,在hadoop/libexec/hadoop config.sh
中,我在之前使用了export java_HOME=$java_HOME
;如果文件中没有设置行,则尝试设置java_HOME,现在它可以工作了