Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
hadoop从何处获取JAVA_主变量值?_Hadoop - Fatal编程技术网

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,现在它可以工作了