2017-08-31 6 views
0

1TBのサイズを持つ非常に多数のテキストファイルがあります。言い換えれば、各ファイルの単語数を計算し、各ファイルの結果を別々に保存する必要があるとします。 Apache Hadoopはこの種の問題の正しい解決策ですか?各ファイルのサイズは5 MBです。各ファイルの単語カウント結果を別々に見たいので、ファイルを連結することはできません。 Hadoopがやりたいことは、各ファイルをマッパーへの入力としてフィードし、それをレデューサーで個別の出力ファイルとして生成することです。Apache Hadoopで大量のテキストファイルを処理する

答えて

0

ここではWholeFileInputFormat.javaWholeFileRecordReader.javaをご覧ください。https://github.com/tomwhite/hadoop-book/tree/master/ch08-mr-types/src/main/java これは、1つのファイルの内容をレコードとして読み込むのに役立ちます。私はInputFormatとRecordReaderを微調整してファイル名をキーとして出力する必要があるかもしれないと思います。

map-reduceで私はそれが地図の仕事であり、各地図の仕事はレコードの別個の単語をカウントする責任があると思います(これはファイルの全内容です)。これらのマップタスクの出力を直接保存することができます。これにより、1つのファイルの単語数がわかります。

私はあなたのユースケースを、すべての入力(すべてのファイルで)のすべての単語をカウントするために減速器が使用される標準の語数マップ縮小アプリケーションと比較していると思います。あなたはこれを行うつもりはないので私はあなたがここで減速しないと言った。

還元剤を使用して1つのファイルの単語を数えるのは良い考えです。

上記のinputformatとrecordreaderを使用し、map-reduceの上にCascadingまたはApache Pigまたはいくつかの高レベル抽象化を使用して作業を簡略化することもできます。

関連する問題