2017-02-04 15 views
3

ファイル1の場合、 "/ data/output1 /"ディレクトリにある結果は、内部に3つのファイルがあります。 - "_SUCCESS" - "_logs" - "part-r-00000" "part-r-00000"は、file1 wordcountの結果を含むファイルです。ファイル名が事前にわかっていなくてもファイル名がリアルタイムで生成されたら、私のプログラムでその特定のファイルを読み込ませるにはどうすればいいですか?のMapReduce質問

また、(キー、値)のペアについては、「値」に識別子を追加して、そのファイルがどのファイルに属しているかを特定できるようにしました。

public void map(Text key, Text value, Context context) throws IOException, InterruptedException { 
      Text newValue = new Text(); 
      newValue.set(value.toString() + "_f2"); 
      context.write(key, newValue); 
} 

後で、「値」を取得できるように識別子を「削除」するにはどうすればよいですか?

答えて

1

2つの異なるファイルから単語カウントを実装する場合は、複数の入力クラスを使用して、両方のファイルに対してmap reduceプログラムを同時に適用することができます。このリンクを参考にして実装する方法の例を参照してください。http://www.hadooptpoint.com/hadoop-multiple-input-files-example-in-mapreduce/ここでは、入力ファイルごとに別々のマッパーを定義します。したがって、マッパーファイルに異なる識別子を追加して、出力が減速機に行くと、それに応じて処理することができます。そして、たとえば、マッパー1の出力キーにプレフィックス@を追加し、マッパー2の出力キーに#を追加し、減算器でこのプレフィックスを使用して入力されたマップを識別できるように識別子を削除することができますこのプレフィックスを単純に削除することができます。

ファイルの読み込みに関連する他のクエリについては、単純に出力ファイル名はhadoop1.xを使用している場合は結果がファイル名-00000以降に格納されるというパターンがあります。 hadoop 2.xの結果は、同じ出力パスに書き込む必要のある別の出力がある場合は、part-r-00001以降に格納され、ファイル名part-r-00000に格納されます。生成された他の2つのファイルは、開発者にとって重要ではありません。ハーフープ自体の半分として機能します。

希望しています。回答が明確でない場合は、ご意見ください。

3

次のMRジョブを/ data/output1 /にポイントするだけです。 3つのファイルすべてを入力として読み込みますが、_SUCCESSと_logsは両方とも空ですので、プログラムには影響しません。それらはディレクトリに書き込んだMRジョブが正常に終了したことを伝えるように書かれています。