2

像世界上的其他人一样,我正在关注这个 hadoop 教程。我到了格式化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 is not set”。我的想法不多了。有人看到我缺少的东西吗?

4

3 回答 3

1

谢谢@Chris Shain 和@Chris White 的提示。我以 su 的身份运行 hadoop,而 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。

于 2012-06-01T14:52:01.373 回答
0

首先是一般注意事项:如果您正在使用 CYGWIN,请以管理员身份登录到您的系统。

我在执行 namenode -format 时遇到了 Java_Home 未找到的问题。以下是我所做的修复它

  1. 在文件夹名称中没有空格的位置从程序文件中重新安装 JDK。例如:D:/Installations/JDK7

  2. 进入hadoop(1.2.1版)安装的bin文件夹并编辑“hadoop”配置文件。这是没有文件扩展名的文件。

  3. 搜索 java_home 变量

  4. 就在变量 $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 安装路径之前。不需要驱动器号后的冒号,路径应该有正斜杠。

此外,我确实在系统环境属性中设置了 JAVA_HOME。只是为了双重肯定。

运行程序,它现在就可以工作了。

块引用

于 2013-09-25T08:09:12.500 回答
0

尝试使用短名称以避免路径中出现空格。

"C:\Program Files" 应该具有短名称 C:\Progra~1(您可以使用 DOS dir 命令或在文件资源管理器的地址栏中输入它来验证它)。

以这种方式设置您的 JAVA_HOME:

导出 JAVA_HOME="/cygdrive/c/Progra~1/Java/jdk1.7.0_10"

用户2540312回答

于 2013-12-15T19:02:48.880 回答