【问题标题】:Working With Hadoop: localhost: Error: JAVA_HOME is not set使用 Hadoop:localhost:错误:未设置 JAVA_HOME
【发布时间】:2012-12-28 20:02:17
【问题描述】:

我正在使用 Ubuntu 12.04 LTS。

我正在阅读 hadoop 快速入门手册来进行伪分布式操作。它看起来简单明了(容易!)。

但是,当我尝试运行 start-all.sh 时,我得到:

localhost: Error: JAVA_HOME is not set.

我已阅读有关此问题的所有其他关于 stackoverflow 的建议,并已执行以下操作以确保已设置 JAVA_HOME

/etc/hadoop/conf/hadoop-env.sh我已经设置了

JAVA_HOME=/usr/lib/jvm/java-6-oracle
export JAVA_HOME

/etc/bash.bashrc我已经设置了

JAVA_HOME=/usr/lib/jvm/java-6-oracle
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH

which java 返回:

/usr/bin/java

java –version 有效

echo $JAVA_HOME 返回:

/usr/lib/jvm/java-6-oracle

我什至尝试过成为 root 并在终端中明确编写:

$ JAVA_HOME=/usr/lib/jvm/java-6-oracle
$ export JAVA_HOME
$ start-all.sh

如果您能告诉我如何解决此错误,我们将不胜感激。 我在想我的JAVA_HOME 正在以某种方式被覆盖。如果是这样,您能否向我解释一下如何使我的出口全球化?

【问题讨论】:

  • 更改 bashrc 时需要重置终端

标签: bash hadoop ubuntu-12.04 java-home


【解决方案1】:

我使用的是 hadoop 1.1,遇到了同样的问题。

我通过将/etc/hadoop/hadoop-env.sh 中的JAVA_HOME 变量更改为:

export JAVA_HOME=/usr/lib/jvm/<jdk folder>

【讨论】:

  • 是的,就是这样。它也适用于 hadoop-2.6.0。谢谢!
  • 适用于 hadoop-2.7.3
  • 适用于 hadoop-3.0
  • 在 3038 年仍然适用于 hadoop
【解决方案2】:

解决这个问题的方法是在conf/hadoop-env.sh文件里面导出JAVA_HOME变量。

不管你是否已经在 ~/.bashrc 中导出了该变量,它仍然会显示错误。

所以 edit conf/hadoop-env.sh 并取消注释“export JAVA_HOME”行并为其添加适当的文件系统路径,即Java JDK的路径.

# 要使用的 Java 实现。必填。
导出 JAVA_HOME="/path/to/java/JDK/"

【讨论】:

  • 我还必须明确设置它,而不是 ${JAVA_HOME}
  • @NikitaG。我也是。即使我 echo ${JAVA_HOME} 总是打印正确的值,也只有明确设置它才有效。
  • 在hadoop-2.7.3中,hadoop-env.sh文件位于hadoop-2.7.3/etc/hadoop目录而不是conf目录
【解决方案3】:

在 ubuntu LTS 16.04 上遇到了同样的问题。运行bash -vx ./bin/hadoop 表明它测试了 java 是否是一个目录。所以我将 JAVA_HOME 更改为一个文件夹,它工作了。

++ [[ ! -d /usr/bin/java ]]
++ hadoop_error 'ERROR: JAVA_HOME /usr/bin/java does not exist.'
++ echo 'ERROR: JAVA_HOME /usr/bin/java does not exist.'
ERROR: JAVA_HOME /usr/bin/java does not exist.

所以我把./etc/hadoop/hadoop-env.sh中的JAVA_HOME改成了

export JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre/

hadoop 可以正常启动。这个article中也提到了这一点。

【讨论】:

    【解决方案4】:

    调试方法是在 start-all.sh 中添加一个“echo $JAVA_HOME”。您是在使用不同的用户名还是以您自己的身份运行您的 hadoop 环境?如果是前者,很可能是没有为该用户设置 JAVA_HOME 环境变量。

    另一个潜在的问题是您错误地指定了 JAVA_HOME,并且您提供的值没有指向 JDK/JRE。请注意,“which java”和“java -version”都可以工作,即使 JAVA_HOME 设置不正确。

    【讨论】:

    • 谢谢。我当时以 Root 身份运行它(以避免权限问题),它覆盖了我的 JAVA_HOME。我最终创建了一个新用户并赋予它正确的权限。 Bash.Bashrc 使用新用户名。现在一切都很好[就像新解决的那样:)]
    【解决方案5】:

    从 etc/hadoop/hadoop-env.sh 中提取

    唯一需要的环境变量是 JAVA_HOME。其他都是 可选的。运行分布式配置时,最好 在此文件中设置 JAVA_HOME,以便正确定义 远程节点。

    这意味着它更好,建议在此处设置 JAVA_HOME.. 即使现有定义读取 JAVA_HOME 变量。也许它没有从以前设置的值中获取 JAVA_HOME 的值...标准的 apache 手册并没有说明这一点 :( :(

    【讨论】:

      【解决方案6】:

      此错误来自第 180 行

      if [[ -z $JAVA_HOME ]]; then
         echo "Error: JAVA_HOME is not set and could not be found." 1>&2
         exit 1
      fi
      

      libexec/hadoop-config.sh.

      在该脚本中尝试 echo $JAVA_HOME。如果不识别,

      使用这个找到你的JAVA_HOME

      $(readlink -f /usr/bin/javac | sed "s:/bin/javac::")

      并替换该行

      export JAVA_HOME=${JAVA_HOME}/etc/hadoop/hadoop-env.sh 中使用 JAVA_HOME 您从上面的命令中获得。

      【讨论】:

        【解决方案7】:

        我在 hadoop 1.1 中也遇到过类似的问题 我没有注意到JAVA_HOME 被评论在:hadoop/conf/hadoop-env.sh

        原来是

        /#JAVA_HOME=/usr/lib/jvm/java-6-oracle
        

        不得不改成

        JAVA_HOME=/usr/lib/jvm/java-6-oracle
        

        【讨论】:

        • 我也面临同样的情况,
        【解决方案8】:

        无论是 debian 还是任何 linux 风格,只要知道 ~/.bash_profile 属于特定用户并且不是系统范围的。 在伪分布式环境中,hadoop 在 localhost 上工作,因此 .bash_profile 中的 $JAVA_HOME 不再有用。

        只需导出 ~/.bashrc 中的 JAVA_HOME 并在系统范围内使用它。

        【讨论】:

          【解决方案9】:

          检查您的替代方案是否指向正确的替代方案,您实际上可能指向不同的版本并试图在另一个已安装的版本上更改 hadoop-env.sh。

          -alternatives --install /etc/hadoop/conf [generic_name] [your correct path] 优先级{进一步检查替代方案的手册页}

          手动设置替代方案,

          alternatives --set [通用名称] [您的当前路径]。

          【讨论】:

            【解决方案10】:

            更改conf/hadoop-env.sh中的JAVA_HOME变量

            export JAVA_HOME=/etc/local/java/<jdk folder>
            

            【讨论】:

            • 能否请您详细说明您的答案,添加更多关于您提供的解决方案的描述?
            【解决方案11】:
            echo "export JAVA_HOME=/usr/lib/java" >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh
            

            注意:请勿使用export JAVA_HOME=${JAVA_HOME}

            【讨论】:

              【解决方案12】:

              我把它放在文件~/.bashrc的第一行,然后就可以了!

              export JAVA_HOME=/usr/lib/jvm/default-java

              【讨论】:

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