10

Windows7マシンで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はパス名にさまざまな規則を使用しているため、この変数に問題がある可能性があると感じています。誰かがこの問題に直面したか、問題の原因を知っていますか?

4

2 に答える 2

23

簡単な要約:

  • 下のhadoopbashスクリプト(path)/bin/hadoopには、実際にはバグがあります。このスクリプトは、hadoopが必要とするファイル/パスのいずれにもスペースが含まれないことを前提としています。ええと、どんなWindowsでも、「プログラムファイル」にはスペースがあるので、それらはすべてどこかにスペースがあります。

詳細

これはトリッキーな問題です...同じ問題が発生し、修正に時間がかかりました。

まず、問題:ファイルパス/名前にスペースが含まれている場合、スクリプトを介して環境変数を設定すると、大雑把になる可能性があります(これは、最近の非* nixシステムでかなり頻繁に発生します)。

次に、問題を修正する必要がある場所が2つある可能性があります。

  1. スクリプトでは、スクリプト(path)/conf/hadoop-env.shを設定する必要があり、次のようになっている必要がありますJAVA_HOME

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

    (「プログラムファイル」の前後に引用符が付いているため、単一の要素として認識されます\。cygwinはWindowsからUNIXへのパスを微調整するため、エスケープ文字を使用できません。そのため、\はエスケープとして機能できません。

  2. スクリプトでは、(path)/bin/hadoop320行目は次のように記述されている可能性があります。

    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}。その周りに引用符を付けることで、「この変数で指定された文字のセット全体を1つの文字列オブジェクトと見なす必要がある」と言っています。


さて、これがなぜ起こっているのか、そして何が起こっているのかを理解したいのであれば、問題は、JDKが「プログラムファイル」または「プログラムファイル(x86)」の下に保存されている可能性が高いことです。道。Hadoopが必要とする他のすべての環境変数は、「プログラムファイル」経路内の何にも依存していません。そのため、フラグが立てられているエラーは1つだけです。引用符が欠落している他のすべての環境変数には、単にスペースがありません。

于 2012-12-04T22:29:57.760 に答える
0

これらはフラグメントです。エラーは次のとおりです。hadoop.util.Platformコマンドが見つかりません

  • "CLASSPATH=cygpath -p "$CLASSPATH" 配布、エラーが発生しました
  • "CLASSPATH=cygpath -p -w "$CLASSPATH" Windowsフラグを追加し、エラーを生成しました
  • "CLASSPATH=cygpath -wp "$CLASSPATH" 問題は解決しました

これはVistaでした。

于 2013-08-14T20:34:00.187 に答える