通过Cygwin在Windows上进行Hadoop配置

时间:2012-09-11 21:30:32

标签: windows-7 hadoop cygwin

我正在尝试在Windows 7计算机上配置Hadoop。我能够启动名称节点和其他服务,但是当我运行Hadoop包(版本1.0.3)附带的示例时,会出现以下错误:

bin/hadoop: line 320 : C:\Program: Command not found. 

我使用以下命令运行该示例:

bin/hadoop jar hadoop-examples-1.0.3.jar pi 10

我打开了这个错误发生的hadoop文件,并在第320行找到了 正在生成一条路径:

JAVA_PLATFORM=`CLASSPATH=${CLASSPATH} ${JAVA} -Xmx32m ${HADOOP_JAVA_PLATFORM_OPTS} org.apache.hadoop.util.PlatformName | sed -e "s/ /_/g"`

所以我觉得问题可能在这个JAVA变量中,因为Cygwin对路径名使用不同的约定。有没有人也遇到过这个问题或者知道是什么导致了这个问题?

2 个答案:

答案 0 :(得分:23)

快速摘要:

  • hadoop下的(path)/bin/hadoop bash脚本实际上有一个错误。该脚本假定hadoop所需的任何文件/路径都不会包含空格。好吧,对于任何Windows,它们都会在某个地方有空间,因为“Program Files”中有一个空格。

详细

这是一个棘手的问题......我遇到了同样的问题,我花了一段时间来修复。

首先,问题是:当文件路径/名称中涉及空格时,通过脚本设置环境变量可能会变得粗略(这种情况在非* nix系统中经常发生)。

接下来,您可能需要解决问题的 两个 位置:

  1. (path)/conf/hadoop-env.sh脚本中,您应该设置JAVA_HOME脚本,它应该看起来像:

    export JAVA_HOME=/cygdrive/c/"Program Files"/Java/jdk1.7.0_06
    

    (请注意,“Program Files”周围有引号,因此它被识别为单个元素。您不能使用\转义字符,因为cygwin会将Windows转换为UNIX路径,因此\无法逃脱。

  2. (path)/bin/hadoop脚本中,第320行可能写成如下内容:

    JAVA_PLATFORM=`CLASSPATH=${CLASSPATH} ${JAVA} -Xmx32m ${HADOOP_JAVA_PLATFORM_OPTS} org.apache.hadoop.util.PlatformName | sed -e "s/ /_/g"`
    

    您需要将其更改为:

    JAVA_PLATFORM=`CLASSPATH="${CLASSPATH}" "${JAVA}" -Xmx32m ${HADOOP_JAVA_PLATFORM_OPTS} org.apache.hadoop.util.PlatformName | sed -e "s/ /_/g"`
    

    请注意,我在环境变量${CLASSPATH}${JAVA}周围添加了引号。通过在其周围加上引号,您可以说“此变量指定的整个字符集应被视为一个字符串对象”。


  3. 好的,现在如果您想了解为什么会发生这种情况以及发生了什么,问题是您的JDK可能存储在“Program Files”下,或者可能存储在“Program Files(x86)”下,两者都有路径中的 空格 。 Hadoop需要的所有其他环境变量不依赖于“Program Files”路径中的任何内容。这就是为什么你只看到标记的一个错误。所有其他缺少引号的环境变量都没有空格。

答案 1 :(得分:0)

这些是片段,错误是:找不到hadoop.util.Platform命令

  • "CLASSPATH=cygpath -p "$CLASSPATH"发布,产生了错误
  • "CLASSPATH=cygpath -p -w "$CLASSPATH"添加了windows标志,产生了错误
  • "CLASSPATH=cygpath -wp "$CLASSPATH" 已解决问题

这是在Vista上。