Hadoop 2.2.0在运行start-dfs.sh时失败,错误为:JAVA_HOME未设置且找不到。

19

我正在Ubuntu 12.x上安装Hadoop。我已经有了一个名为deploy的用户,我计划使用它来在一组机器上运行Hadoop。以下代码基本上说明了我的问题:我可以毫无问题地使用ssh olympus,但是start-dfs.sh执行时会失败:

deploy@olympus:~$ ssh olympus
Welcome to Ubuntu 12.04.4 LTS (GNU/Linux 3.5.0-45-generic x86_64)

    * Documentation:  https://help.ubuntu.com/

Last login: Mon Feb  3 18:22:27 2014 from olympus
deploy@olympus:~$ echo $JAVA_HOME
/opt/dev/java/1.7.0_51

deploy@olympus:~$ start-dfs.sh
Starting namenodes on [olympus]
olympus: Error: JAVA_HOME is not set and could not be found.

你配置了SSH服务器和Hadoop配置吗? - Ashish Ratan
5个回答

31

您可以编辑 hadoop-env.sh 文件,并为 Hadoop 设置 JAVA_HOME。

打开文件并找到以下行:

export JAVA_HOME=/usr/lib/j2sdk1.6-sun

取消注释该行,并根据您的环境更新java_home即可解决java_home问题。


6
这件事很奇怪,你必须在 hadoop-env.sh 文件中明确设置这个值。它不会从你的环境变量中读取...我不理解这个。 - David S.
我遇到了相同的问题,将硬编码的JAVA_HOME路径放入解决方法中也适用于我。 - Mr. K
我已经在我的shell上设置了JAVA_HOME,但它没有被识别。这个解决方案在Ubuntu trusty64上与Hadoop 3.0一起使用很好。 - Binita Bharati

12

在Ubuntu上出现了奇怪的问题。当前行

export JAVA_HOME=${JAVA_HOME}

/etc/hadoop/hadoop-env.sh应该从主机中选择Java Home路径,但实际上并没有。

暂时编辑文件并硬编码Java Home路径。


是的,这很奇怪。如果调用“start-dfs.sh”的用户具有有效的$JAVA_HOME…为什么不会被拾取?脚本中是否有导致其作为“hadoop”用户而不是当前登录到bash的用户运行的内容? - carl crott

3

另外,您可以编辑/etc/environment以包含以下内容:

JAVA_HOME=/usr/lib/jvm/[YOURJAVADIRECTORY]

这将使JAVA_HOME对系统上的所有用户可用,并允许start-dfs.sh查看该值。 我的猜测是start-dfs.sh在某个地方以其他用户身份启动了进程,除非在hadoop-env.sh中明确设置变量,否则不会检索变量。

使用hadoop-env.sh可以说更加清晰--只是为完整起见添加此选项。


0
我已经安装了Hadoop在/opt/hadoop/,Java安装在/usr/lib/jvm/java-8-oracle。 最后将此添加到bash配置文件中,解决了所有问题。
export JAVA_HOME=/usr/lib/jvm/java-8-oracle  
export HADOOP_HOME=/opt/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME 
export HADOOP_COMMON_HOME=$HADOOP_HOME 
export HADOOP_HDFS_HOME=$HADOOP_HOME 
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native 
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_ROOT_LOGGERi=INFO,console
export HADOOP_SECURITY_LOGGER=INFO,NullAppender
export HDFS_AUDIT_LOGGER=INFO,NullAppender
export HADOOP_INSTALL=$HADOOP_HOME
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_PREFIX=$HADOOP_HOME
export HADOOP_LIBEXEC_DIR=$HADOOP_HOME/libexec
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
export HADOOP_YARN_HOME=$HADOOP_HOME
export YARN_LOG_DIR=/tmp

0

编辑Hadoop启动脚本/etc/hadoop/hadoop-env.sh,通过显式设置JAVA_PATH来进行配置。

例如: 不要使用export JAVA_HOME=${JAVA_HOME},而是使用

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre

这是使用Java版本java-1.8.0-openjdk的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接