8

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

变量预设在conf/hadoop-env.sh(edited 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.
4

9 回答 9

4

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

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

它有帮助

于 2012-05-27T20:20:43.677 回答
3

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

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

于 2012-02-08T12:02:01.120 回答
3

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

export JAVA_HOME=/usr/lib/jvm/java-6-sun
于 2012-02-08T12:03:43.877 回答
1

安装 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 运行时环境(构建 1.6.0_32-b05)

Java HotSpot(TM) 客户端虚拟机(build 20.7-b02,混合模式,共享)

于 2012-05-29T09:18:59.340 回答
0

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

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

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

于 2014-11-11T14:25:48.910 回答
0

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

您也可以尝试将其写入 start-all.sh

确保 JAVA_HOME 具有正确的路径

于 2012-02-08T12:16:57.963 回答
0

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

于 2015-04-03T04:59:41.817 回答
0

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 文件。

于 2013-05-09T01:26:22.197 回答
0

问题是初始化 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
于 2014-03-25T15:47:29.450 回答