与世界上其他人一样,我正在关注this hadoop tutorial。我到了格式化HDFS的地步,我明白了:
user@linux01:~$ sudo $HADOOP_INSTALL/bin/hadoop namenode -format
Error: JAVA_HOME is not set.
这很有趣,我在我的/ etc / profiles中设置了JAVA_HOME。
user@linux01:~$ tail -n 4 /etc/profile
export JAVA_HOME=/usr/local/jdk1.6.0_32/bin
export JDK_HOME=$JAVA_HOME
export PATH=$PATH:/usr/local/jdk1.6.0_32/bin
export HADOOP_INSTALL=/usr/local/hadoop/hadoop-1.0.3
我是不是以某种方式弄乱了?
user@linux01:~$ echo $JAVA_HOME
/usr/local/jdk1.6.0_32/bin
user@linux01:~$ ls $JAVA_HOME
appletviewer extcheck jar javac and so forth...
似乎工作。也许绝对必须在我的hadoop-env.sh中设置?
# The java implementation to use. Required.
export JAVA_HOME=$JAVA_HOME
懒惰,是的,但无论是否有此评论,我仍然会得到“JAVA_HOME未设置”。我的想法很少。有人看到我错过的任何东西吗?
答案 0 :(得分:1)
谢谢@Chris Shain和@Chris White的提示。我正在运行hadoop作为su,并且su不会自动知道我设置的环境变量。我以我的hadoop用户身份登录(我已经将hadoop安装目录列为该用户),并且能够格式化hdfs。
次要问题:当我尝试启动Hadoop时,NameNode和JobTracker成功启动,但DataNode,SecondaryNameNode和TaskTracker无法启动。我挖了一下。 NameNode和JobTracker通过hadoop-daemon.sh启动,但DataNode,SecondaryNameNode和TaskTracker由hadoop-daemon * s * .sh启动。这里的解决方案是在conf / hadoop-env.sh中正确设置JAVA_HOME。
答案 1 :(得分:0)
首先要注意:如果您正在使用CYGWIN,请以管理员身份登录系统。
我遇到了执行namenode -format时找不到Java_Home的问题。以下是我修复它的方法
在文件夹名称中没有空格的位置重新安装JDK程序文件。例如:D:/ Installations / JDK7
进入hadoop(版本1.2.1)安装的bin文件夹并编辑“hadoop”配置文件。这是没有文件扩展名的文件。
搜索java_home变量
在变量$ JAVA_HOME的第一个实例之前,我添加了这一行:
导出JAVA_HOME = / cygdrive / D / Installations / JDK7 /
fi
export JAVA_HOME=/cygdrive/D/Installations/JDK7/
# some Java parameters
if [ "$JAVA_HOME" != "" ]; then
#echo "run java in $JAVA_HOME"
JAVA_HOME=$JAVA_HOME
fi
注意:/ cygdrive /必须先于您的jdk安装路径。不需要驱动器号后冒号,路径应该有正斜杠。
另外,我确实在系统env属性中设置了JAVA_HOME。只是为了双重确定。
运行该程序,它现在可以正常工作。
块引用
答案 2 :(得分:0)
尝试使用短名称以避免路径中的空格。
“C:\ Program Files”应该有短名称C:\ Progra~1(您可以使用DOS dir命令验证它或将其输入到文件浏览器的地址栏中。)
以这种方式设置你的JAVA_HOME:
导出JAVA_HOME =“/ cygdrive / c / Progra~1 / Java / jdk1.7.0_10”
由user2540312回答