1

MultipleOutputs を使用して、名前、属性、その他の 3 つのファイルを書き込み、6 つの redcuer を使用しています。これらのファイルを出力ディレクトリに取得します。

attrib-r-00003  name-r-00004   part-r-00000  part-r-00002  part-r-00004  _SUCCESS
_logs           other-r-00001  part-r-00001  part-r-00003  part-r-00005

私の質問は、これらのファイルにどのように名前が付けられているかです(なぜ-r-0003がattribファイルに追加されるのか、タスク0003がこのファイルをコンパイルしたのですか?)。私は現在、疑似モードで Hadoop を実行しています。実際のクラスターでは、ファイルを結合する必要がありますか (つまり、attrib には差分リデューサーによる異なるファイルがありますか)? また、出力ファイル名から -r-xxxxx を削除する方法はありますか?

PS 私の Hadoop に関する知識はかなり限られています。

4

1 に答える 1

1

MultipleOutputs を使用すると、名前が出力キーと値、または実際には任意の文字列から派生したファイルにデータを書き込むことができます。これにより、各レデューサー (またはマップのみのジョブのマッパー) が複数のファイルを作成できます。ファイル名の形式は、 map 出力 の場合はname-m-nnnnn 、reduce 出力の場合はname-r-nnnnnです。ここで、name はプログラムによって設定される任意の名前で、nnnnn はパーツ番号を指定するゼロから始まる整数です。 . パーツ番号により、異なるパーティション (マッパーまたはリデューサー) から書き込まれた出力が同じ名前の場合に衝突しないことが保証されます。

はい、出力として単一のファイルが必要な場合は、ファイルを結合する必要があります(つまり、属性には差分リデューサーによって異なるファイルがあります)。ジョブの完了後にファイルを結合できます。ファイルを追加するには、この方法を調べることができます。public FSDataOutputStream append(Path f) throws IOException.

于 2013-10-08T11:21:14.070 に答える