1

Hadoop で次の例を実行しようとしています: http://hadoop.apache.org/common/docs/current/mapred_tutorial.html

ただし、使用されているコマンド、具体的には入力ファイルを作成し、それを HDFS にアップロードして、単語カウントの例を実行する方法がわかりません。

次のコマンドを試しています。

bin/hadoop fs -put inputFolder/inputFile inputHDFS/

しかし、それは言う

put: File inputFolder/inputFile does not exist

「bin」の前のフォルダーであるhadoopフォルダー内にこのフォルダーがあるのに、なぜこれが起こっているのですか?

ありがとう :)

4

1 に答える 1

2

うまくいけば、これはやり過ぎではありません。

Hadoop を (ローカル、分散、疑似分散のいずれかで)インストールしたと仮定すると、hadoop の bin およびその他のその他のパラメーターがパスにあることを確認する必要があります。Linux/Mac では、以下をシェル ファイルの 1 つに追加するだけです (セットアップと設定に応じて、、、など) ~/.bashrc~/.zshrc~/.bash_profile

export HADOOP_INSTALL_DIR=/path/to/hadoop # /opt/hadoop or /usr/local/hadoop, for example
export JAVA_HOME=/path/to/jvm
export PATH=$PATH:$HADOOP_INSTALL_DIR/bin
export PATH=$PATH:$HADOOP_INSTALL_DIR/sbin

次にexec $SHELL、端末を実行またはリロードします。Hadoop が実行されていることを確認するには、次のように入力hadoop versionして、エラーが発生しないことを確認します。単一ノード クラスタのセットアップ方法に関する指示に従い、次のstart-all.shコマンドでHadoop サービスを開始したと仮定すると、準備完了です。

  • 疑似分散モードでは、ファイル システムは HDFS のふりをします。catしたがって、またはのような他のLinuxコマンドと同じように、任意のパスを参照してくださいgrep。これはテストに役立ち、何もコピーする必要はありません。

  • 実際の HDFS が実行されている状態で、次のcopyFromLocalコマンドを使用します (動作することがわかりました)。

      $ hadoop fs -copyFromLocal ~/data/testfile.txt /user/hadoopuser/data/
    

ここでは、クラスターの一部であるマシンでコピーを実行することを前提としています。Hadoopuser が UNIX ユーザー名と同じ場合は、その部分を削除できることに注意してください。HDFS/user/hadoopuser/ユーザー ディレクトリ内ですべてを実行すると暗黙的に想定されます。また、クライアント マシンを使用してクラスタでコマンドを実行している場合 (それも可能です!)、次のよう-confにフラグを使用してクラスタの構成を渡す必要があることに注意してください。hadoop fs

# assumes your username is the same as the one on HDFS, as explained earlier
$ hadoop fs -conf ~/conf/hadoop-cluster.xml -copyFromLocal ~/data/testfile.txt data/ 

入力ファイルには、テキストを含む任意のファイルを使用できます。グーテンベルクのサイトからランダムなファイルをいくつか使用しました。

最後に、wordcount の例 (hadoop ディストリビューションでは jar として提供されます) を実行するには、次のコマンドを実行します。

$ hadoop jar /path/to/hadoop-*-examples.jar ワードカウント /user/hadoopuser/data/ /user/hadoopuser/output/wc

これにより、フォルダー内のすべてが読み取られdata/(1 つまたは複数のファイルを持つことができます)、output/wcすべてが HDFS 上のフォルダーに書き込まれます。これを pseudo-dist で実行する場合、何もコピーする必要はありません。適切な入力ディレクトリと出力ディレクトリを指すだけです。ディレクトリが存在しないことを確認してくださいwc。そうしないと、ジョブがクラッシュします (既存のディレクトリに上書きできません)。より良い単語数の内訳については、これを参照してください。

繰り返しますが、これはすべて、セットアップ段階を正常に完了したことを前提としています (小さな偉業ではありません)。

これがあまり混乱していないことを願っています-幸運を祈ります!

于 2012-04-28T20:52:25.383 に答える