JAVA_HOME没有设置

在伪分布式操作中处理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. 

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

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

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

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

它帮助了

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

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

安装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 -version

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

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

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

你也可以尝试在start-all.sh中编写它

确保JAVA_HOME具有正确的路径

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

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

export JAVA_HOME = / usr / lib / jvm / jdk1.6.0_43 / jre /

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

问题是初始化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 

您可以添加.bashrc文件:

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

当您更新软件包并被Hadoop使用时,它会动态更改。

也许您需要检查$ 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