通过cygwin在windows上配置hadoop

whhtz7ly  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(392)

我正在尝试在Windows7机器上配置hadoop。我可以启动name node和其他服务,但在运行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 变量as cygwin对路径名使用不同的约定。有没有人也遇到过这个问题,或者知道是什么导致了这个问题?

332nm8kg

332nm8kg1#

快速总结:

这个 hadoop 下的bash脚本 (path)/bin/hadoop 其实里面有个虫子。该脚本假设hadoop需要的文件/路径中都没有空格。嗯,对于任何windows,它们都会在某个地方有一个空间,因为“程序文件”中有一个空间。

详细信息

这是个棘手的问题。。。我遇到了同样的问题,花了我一段时间才解决。
首先,问题是:当文件路径/名称中包含空格时,通过脚本设置环境变量可能会变得粗略(这在非*nix系统中非常常见)。
接下来,您可能需要在两个地方解决问题:
在你的 (path)/conf/hadoop-env.sh 脚本,你应该设置 JAVA_HOME 脚本,它应该看起来像:

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

(请注意,“程序文件”周围有引号,因此可以将其识别为单个元素。您不能使用 \ 转义字符,因为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需要的所有其他环境变量都不依赖于“程序文件”路径中的任何内容。所以这就是为什么你只看到一个错误被标记。所有其他缺少引号的环境变量都没有空格。

kwvwclae

kwvwclae2#

这些是片段,错误是:hadoop.util.platform command not found "CLASSPATH=cygpath -p "$CLASSPATH" 分布,产生了误差 "CLASSPATH=cygpath -p -w "$CLASSPATH" 添加了windows标志,产生了错误 "CLASSPATH=cygpath -wp "$CLASSPATH" 问题已解决
这是在vista上。

相关问题