我正在尝试在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对路径名使用不同的约定。有没有人也遇到过这个问题或者知道是什么导致了这个问题?
答案 0 :(得分:23)
hadoop
下的(path)/bin/hadoop
bash脚本实际上有一个错误。该脚本假定hadoop所需的任何文件/路径都不会包含空格。好吧,对于任何Windows,它们都会在某个地方有空间,因为“Program Files”中有一个空格。这是一个棘手的问题......我遇到了同样的问题,我花了一段时间来修复。
首先,问题是:当文件路径/名称中涉及空格时,通过脚本设置环境变量可能会变得粗略(这种情况在非* nix系统中经常发生)。
接下来,您可能需要解决问题的 两个 位置:
在(path)/conf/hadoop-env.sh
脚本中,您应该设置JAVA_HOME
脚本,它应该看起来像:
export JAVA_HOME=/cygdrive/c/"Program Files"/Java/jdk1.7.0_06
(请注意,“Program Files”周围有引号,因此它被识别为单个元素。您不能使用\
转义字符,因为cygwin会将Windows转换为UNIX路径,因此\
无法逃脱。
在(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}
周围添加了引号。通过在其周围加上引号,您可以说“此变量指定的整个字符集应被视为一个字符串对象”。
好的,现在如果您想了解为什么会发生这种情况以及发生了什么,问题是您的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上。