【问题标题】:JAVA_HOME not settingJAVA_HOME 未设置
【发布时间】:2012-02-08 11:55:43
【问题描述】:

在处理伪分布式操作中的 Hadoop 实现时,我发现未设置 JAVA_HOME 变量的以下异常,但是当我尝试回显它时,它已设置。

变量预设在conf/hadoop-env.sh(编辑export JAVA_HOME=/usr/lib/jvm/java-6-sun),bash.bashrc

vardan@vardan-HP-G62-Notebook-PC:~/hadoop-0.20.203.0$ echo $JAVA_HOME
/usr/lib/jvm/java-6-sun
vardan@vardan-HP-G62-Notebook-PC:~/hadoop-0.20.203.0$ bin/start-all.sh
starting namenode, logging to /home/vardan/hadoop-0.20.203.0/bin/../logs/hadoop-vardan-namenode-vardan-HP-G62-Notebook-PC.out
localhost: starting datanode, logging to /home/vardan/hadoop-0.20.203.0/bin/../logs/hadoop-vardan-datanode-vardan-HP-G62-Notebook-PC.out
localhost: Error: JAVA_HOME is not set. 
localhost: starting secondarynamenode, logging to /home/vardan/hadoop-0.20.203.0/bin/../logs/hadoop-vardan-secondarynamenode-vardan-HP-G62-Notebook-PC.out
localhost: Error: JAVA_HOME is not set. 
starting jobtracker, logging to /home/vardan/hadoop-0.20.203.0/bin/../logs/hadoop-vardan-jobtracker-vardan-HP-G62-Notebook-PC.out 
localhost: starting tasktracker, logging to /home/vardan/hadoop-0.20.203.0/bin/../logs/hadoop-vardan-tasktracker-vardan-HP-G62-Notebook-PC.out
localhost: Error: JAVA_HOME is not set.

【问题讨论】:

  • 如果问题仍未解决,请在问题中添加./conf/hadoop-env.sh 行。还要添加来自~/.bashrc 的行,其中设置了JAVA_HOME 的路径。

标签: java hadoop java-home


【解决方案1】:

我只是在 ./conf/hadoop-env.sh 中添加了这一行:

# The java implementation to use.  Required.
export JAVA_HOME=/usr/java/latest

它有帮助

【讨论】:

  • 还需要注意的是,如果您出于某种原因(例如因为您使用 Maven)已经设置了 JAVA_HOME,这仍然不能被忽略。 JAVA_HOME 导出仍然需要定义(不仅仅是使用 export JAVA_HOME=$JAVA_HOME 而是一个适当的字符串)。
  • 从 Apache 下载的 tarball 中使用 Hadoop 1.0.4。在使用 Open JDK 6 的 Ubuntu 12.04 上 - (ubuntu 将 java 二进制文件放在 /usr/bin/java 中)所以在这个文件中我取消了 JAVA_HOME 变量的注释并将其替换为 /usr 并且 start-all.sh 没有 JAVA_HOME 错误跨度>
  • 谢谢,它也对我有用。 Hadoop 版本是 2.6.0。
【解决方案2】:

检查bin/start-all.sh 是否不会覆盖JAVA_HOME

也许在执行这些二进制文件之前直接将echo $JAVA_HOME 放在该脚本中?

【讨论】:

  • 通常启动脚本会像其他用户一样触发守护进程,所以请确保该用户在 .bashrc 中也有正确的导出
  • 或者手动设置java home,就像这里另一个答案中给出的那样,放入bin/start-all.sh:export JAVA_HOME=/usr/lib/jvm/java-6-sun
【解决方案3】:

您使用set JAVA_HOME= 设置的JAVA_HOME 变量仅与当前shell 相关。鉴于您在执行 bin/start-all.sh 时正在启动一个新的 shell,您需要“导出”环境变量以使其在全局范围内可用:

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

【讨论】:

    【解决方案4】:

    安装 java 1.6.x

    1. 下载“jdk-6u32-linux-i586.bin”
    2. sh jdk-6u32-linux-i586.bin

    3. mv /etc/alternatives/java /etc/alternatives/java_bak mv /etc/alternatives/javac /etc/alternatives/javac_bak

    4. 创建链接 ln -s /opt/jdk1.6.0_32/bin/java /etc/alternatives/java ln -s /opt/jdk1.6.0_32/bin/javac /etc/alternatives/javac

    5。 java -版本

    ------------你必须看到这个-------------------------------- java版本“1.6.0_32” Java(TM) SE 运行时环境(build 1.6.0_32-b05)

    Java HotSpot(TM) 客户端 VM(内部版本 20.7-b02,混合模式,共享)

    【讨论】:

      【解决方案5】:

      您可以尝试在 .bash_profile 文件中写入“JAVA_HOME=/usr/lib/jvm/java-6-sun”,当您使用控制台登录时,无论是在机器上还是使用 ssh,都会执行 .bash_profile ., .bashrc 在你执行 /bin/bash 或其他终端时打开

      你也可以尝试写在start-all.sh里面

      确保 JAVA_HOME 的路径正确

      【讨论】:

        【解决方案6】:

        Ubuntu Precise + CDH4 上的同样问题...

        长话短说,CDH4 使用 bigtop,设置 JAVA_HOME 的最简单方法是编辑 /etc/default/bigtop-utils 文件,例如:

        导出 JAVA_HOME=/usr/lib/jvm/jdk1.6.0_43/jre/

        注意:在正确安装 CDH4 后,我找不到任何 hadoop-env.sh 文件。

        【讨论】:

          【解决方案7】:

          问题在于初始化 dfs 和 mapreduce 守护进程的脚本没有在其环境中定义 JAVA_HOME。

          可能在执行 HDFS 和 MapReduce 时,其执行环境是脚本 $HADOOP_HOME/conf/hadoop-env.sh 指定的环境。因此,在 $HADOOP_HOME/conf/hadoop-env.sh 中定义 JAVA_HOME 就足够了:

          export JAVA_HOME=jdk-home-path
          

          否则,当这还不够时,问题可能是使用的配置环境(hadoop-env.sh)不是我们期望的;如果没有找到,hadoop 正在选择另一个或默认值。最快的解决方案是定义放置 hadoop-env.sh 脚本的 conf 目录。设置 HADOOP_CONF_DIR 环境变量就足够了:

          export HADOOP_CONF_DIR=hadoop-home-path/conf
          

          【讨论】:

            【解决方案8】:

            您可以在您的.bashrc 文件中添加:

            export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

            当你更新你的包并被 Hadoop 使用时,它会动态变化。

            【讨论】:

              【解决方案9】:

              也许您需要检查 $JAVA_HOME 配置如下:
              1. 对于hadoop-1.x:hadoop-home-path/conf/hadoop-env.sh
              2.对于hadoop-2.x:hadoop-home-path/etc/hadoop/hadoop-env.sh

              【讨论】:

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