2012-09-11 49 views
10

我試圖在Windows 7機器上配置Hadoop。我能夠啓動名稱節點和其他服務,但我運行附帶Hadoop的包的示例(1.0.3版),下面的錯誤來了:通過Cygwin在Windows上進行Hadoop配置

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對路徑名使用不同的約定。有沒有人也面臨這個問題,或知道是什麼原因造成的問題?

回答

23

快速摘要:

  • (path)/bin/hadoophadoop bash腳本實際上已經存在一個bug。該腳本假定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 
    

    (請注意,周圍有「程序文件」引號,因此它被認爲是一個單一的元素,你可以爲u因爲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}標記。通過在它周圍加上引號,你就是說「由這個變量指定的整個字符集應該被認爲是一個字符串對象」。


好了,現在如果你願意理解爲什麼會發生和正在發生的事情,問題是,你的JDK是可能存儲「程序文件」下,也許在「程序文件(x86 )「,兩者都有空格之內的路徑。 Hadoop需要的所有其他環境變量不依賴於「程序文件」路徑中的任何內容。所以這就是爲什麼你只看到一個被標記的錯誤。所有其他缺少引號的環境變量都沒有空格。

+0

我愛你Mike:D謝謝! –

+0

@AntonBelev aww ...我從來沒有使用任何留言板這樣的發光評論!我想,只是想表明StackExchange上的人們有多酷。 :) –

+0

我真的不敢相信他們讓這麼難。這是爲了讓不熟悉的人(像我一樣)遠離Hadoop的祭司嗎?我從來不知道一個如此難以建立的計劃! –

0

這些片段,所述錯誤是:未找到hadoop.util.Platform命令

  • "CLASSPATH=cygpath -p "$CLASSPATH"分佈,產生的誤差
  • "CLASSPATH=cygpath -p -w "$CLASSPATH"加入窗口標誌,所產生的錯誤
  • "CLASSPATH=cygpath -wp "$CLASSPATH"問題解決

這是在Vista上。

相關問題