JAVA _Home未设置在Hadoop中

我是hadoop的初学者,并尝试在我的Ubuntu中安装和运行hadoop作为单节点集群。 这是我的hadoop_env.sh中的JAVA_HOME

# The java implementation to use. export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386/ export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/etc/hadoop"} 

但是当我运行它时,会出现以下错误 –

 Starting namenodes on [localhost] localhost: Error: JAVA_HOME is not set and could not be found. localhost: Error: JAVA_HOME is not set and could not be found. Starting secondary namenodes [0.0.0.0] 0.0.0.0: Error: JAVA_HOME is not set and could not be found. 

如何删除此错误?

我调试了代码并发现即使在环境中设置了JAVA_HOME,该值也会丢失,因为在代码中进行了与其他主机的ssh连接,并且在start-dfs.sh中设置良好的JAVA_HOME变量变得未设置在hadoop-env.sh。

这个问题的解决方案是在hadoop-env.sh中设置JAVA_HOME变量,它应该可以正常工作。

我有同样的错误,并用土壤耆那教的评论解决了它,但为了使它更加清晰:hadoop-env.sh使用了一个表达式,如

 export JAVA_HOME=${JAVA_HOME} 

如果您对JVM安装的路径进行硬编码,则可以正常工作

 export JAVA_HOME=/usr/lib/jvm/java... 

环境变量的这个分辨率似乎失败了。 硬编码为我解决了这个问题。

在您的HADOOP_HOME / conf目录下,请更新hadoop-env.sh文件。 它有导出JAVA_HOME的条目。

在此文件中设置适当的JAVA_HOME应该可以解决您的问题。

你在加载hadoop_env.sh吗? 你可能会引用hadoop-env.sh (破折号而不是下划线 – 这是在conf目录下)

顺便说一下,这是一个非常有用的快速安装指南:

http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/

只要您使用默认conf目录$HADOOP_HOME/conf$HADOOP_HOME/etc/hadoop上述答案就应该有效。 如果您使用的是其他conf文件夹,则应该执行以下操作。

  1. hadoop-env.sh文件从默认的conf目录复制到conf文件夹,比如/home/abc/hadoopConf
  2. 更换线

     #export JAVA_HOME=${JAVA_HOME} 

    以下内容:

     export JAVA_HOME=/usr/lib/jvm/java-8-oracle export HADOOP_CONF_DIR=/home/abc/hadoopConf 

适当地更改值。 如果您在.bashrc.profile.bash_profile配置了与hadoop相关的任何其他环境变量,请考虑在上面的行旁边添加它们。

我正在使用hadoop 2.8.0。 即使我导出了JAVA_HOME(我把它放在.bashrc中),我仍然在尝试运行start-dfs.sh时遇到了这个错误。

 user@host:/opt/hadoop-2.8.0 $ echo $JAVA_HOME  user@host:/opt/hadoop-2.8.0 $ $JAVA_HOME/bin/java -version java version "1.8.0_65" ... user@host:/opt/hadoop-2.8.0 $ sbin/start-dfs.sh ... Starting namenodes on [] localhost: Error: JAVA_HOME is not set and could not be found. localhost: Error: JAVA_HOME is not set and could not be found. 

我可以让它运行的唯一方法是将JAVA_HOME = path_to_java添加到etc / hadoop / hadoop-env.sh然后获取它:

 :/opt/hadoop-2.8.0 $ grep JAVA_HOME etc/hadoop/hadoop-env.sh #export JAVA_HOME=${JAVA_HOME} export JAVA_HOME=path_to_java user@host:/opt/hadoop-2.8.0 $ source etc/hadoop/hadoop-env.sh 

也许(采购hadoop-env.sh)隐含在上面的post中。 只是觉得有人应该大声说出来。 现在它运行了。 我遇到了其他问题(我怀疑,由于我正在使用的服务器上的资源有限),但至少我已经过了这个问题。

首先,您必须在hadoop_env.sh设置JAVA_HOME。 (您的.bashrc中的本地JAVA_HOME可能会被忽略)

 # The java implementation to use. export JAVA_HOME=/usr/lib/jvm/default-java 

然后,将HADOOP_CONF_DIR指向hadoop_env.sh目录。 在〜/ .bashrc中,添加以下行:

 HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop" export HADOOP_CONF_DIR 

其中/usr/local/hadoop/etc/hadoop是包含hadoop_env.sh的目录

它不知道程序和文件之间的空间:“程序文件”。 因此,我将jdk的文件夹复制到C:或不包含文件夹名称空间的文件夹,并分配:export JAVA_HOME = Name_Path_Copied。 我看到它运行正常