【问题标题】:JAVA _Home is not set in HadoopJAVA_Home 未在 Hadoop 中设置
【发布时间】:2013-12-17 07:15:09
【问题描述】:

我是 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 hadoop installation


    【解决方案1】:

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

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

    【讨论】:

    • 至于@toobee,这对我有用,但是为什么。我不是 Linux 专业人士,为什么 SSH 连接到本地机器时没有设置 JAVA_HOME?我的 ~/.profile 中有我的设置
    • 这是 Hadoop 代码中的一个错误。 JAVA_HOME 的值在代码中被其他东西覆盖,即使你在 ~/.profile 中设置了它。
    • 非常准确。作为替代解决方案,您也可以在 /etc/environment 中设置它,它会起作用!:)
    【解决方案2】:

    我有同样的错误,并用 Soil Jain 的评论解决了它,但为了更清楚一点:hadoop-env.sh 使用了这样的表达式

    export JAVA_HOME=${JAVA_HOME}
    

    如果你硬编码你的 JVM 安装路径,它就可以工作

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

    按原样通过环境变量解决此问题似乎失败了。硬编码为我解决了这个问题。

    【讨论】:

    • 非常感谢!
    • 我曾经设置过像/usr/lib/jdk1.8.0_231 这样的硬代码,但是dataNode restart fail get resource_management.core.exceptions.ExecutionFailed: Execution of 'ambari-sudo.sh su hdfs -l -s /bin/bash -c 'ulimit -c unlimited ; /usr/hdp/3.1.4.0-315/hadoop/bin/hdfs --config /usr/hdp/3.1.4.0-315/hadoop/conf --daemon stop datanode'' returned 1. ERROR: JAVA_HOME /usr/lib/jdk1.8.0_231 does not exist.
    【解决方案3】:

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

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

    【讨论】:

    • 我已将其更新为 export JAVA_HOME=/usr/lib/jvm/java-7-sun .. 还是同样的错误
    • 就我而言。在用户 bash 配置文件中删除 java_home 变量并在 haddop-env.sh 文件中添加上述条目后成功启动 Hadoop。一条信息:在最新版本的 Hadoop 中,hadoop-env.sh 文件的位置已更改。即HADOOP_HOME/etc/hadoop/hadoop-env.sh
    【解决方案4】:

    你在加载hadoop_env.sh吗?您可能指的是hadoop-env.sh(破折号而不是下划线 - 位于 conf 目录下)

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

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

    【讨论】:

    • 我已经把它放在问题中了。我已经更新了 JAVA_HOME 的导出。当我运行它时,仍然会出现错误。是由于使用了openjdk7吗?还有它的hadoop-env.sh。抱歉打错字了
    • 不。它根本没有设置 - 如果没有找到将是另一个错误的 java
    • 更简单的方法是通过 .bashrc 文件导出 JAVA_HOME
    • 我也在 .bashrc 文件中设置了它。这是我在 hadoop-env.sh 文件和 .bashrc 文件中放入的内容 export JAVA_HOME=/usr/lib/jvm/java-7-sun
    • 我无法建议您使用上面发送给您的指南重新开始安装
    【解决方案5】:

    首先,您必须在 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 的目录

    【讨论】:

      【解决方案6】:

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

      user@host:/opt/hadoop-2.8.0 $ echo $JAVA_HOME
      <path_to_java>
      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)。只是觉得应该有人大声说出来。现在它运行了。我遇到了其他问题(我怀疑是由于我正在使用的服务器上的资源有限),但至少我解决了这个问题。

      【讨论】:

        【解决方案7】:

        只要您使用默认的 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 相关的环境变量,请考虑将它们添加到上述行旁边。

        【讨论】:

          【解决方案8】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-02-08
            • 1970-01-01
            • 2012-07-06
            • 2020-08-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-11
            相关资源
            最近更新 更多