在伪分布式操作中处理 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.
答案 0 :(得分:4)
我只是添加到./conf/hadoop-env.sh这一行:
# The java implementation to use. Required.
export JAVA_HOME=/usr/java/latest
并帮助
答案 1 :(得分:3)
检查bin/start-all.sh
是否未覆盖JAVA_HOME
在执行这些二进制文件之前,可能直接将echo $JAVA_HOME
放在该脚本中?
答案 2 :(得分:3)
使用set JAVA_HOME=
设置的JAVA_HOME变量仅与当前shell相关。假设您在执行bin/start-all.sh
时启动了一个新shell,则需要“导出”环境变量以使其在全局范围内可用:
export JAVA_HOME=/usr/lib/jvm/java-6-sun
答案 3 :(得分:1)
sh jdk-6u32-linux-i586.bin
mv / etc / alternatives / java / etc / alternatives / java_bak mv / etc / alternatives / javac / etc / alternatives / javac_bak
创建链接 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)
答案 4 :(得分:0)
您可以尝试在.bash_profile文件中写入“JAVA_HOME = / usr / lib / jvm / java-6-sun”,当您使用控制台登录时,无论是在机器上还是使用ssh,都会执行.bash_profile 。,.bashrc在执行/ bin / bash或其他终端时打开
您也可以尝试在start-all.sh
中编写它确保JAVA_HOME具有正确的路径
答案 5 :(得分: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文件。
答案 6 :(得分: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
答案 7 :(得分:0)
您可以添加.bashrc
文件:
export JAVA_HOME = $(readlink -f / usr / bin / java | sed" s:bin / java ::")
当您更新软件包并被Hadoop使用时,它将动态更改。
答案 8 :(得分: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