1

私はEMRのニーズにmrjobを使用しています。

マッパーコードのロジックに応じて、マッパーから「個別のディレクトリ」にデータ(行)を書き込むにはどうすればよいですか。

  1. targzipと

  2. ジョブが突然終了/終了した後、(ディレクトリ名に応じて)個別のS3バケットにアップロードしますか?

''オプションでは、最終的なジョブ出力をそのディレクトリにアップロードすることしかできないと思い--output-dirますが、マッパーから他のディレクトリにも時々書き込みたいと思います。

4

3 に答える 3

1

Hadoop のMultipleOutput機能が役立つと思います。カスタムでoutputFormatは、パスとファイル名を指定できます。

于 2012-06-19T19:07:04.577 に答える
0

カスタムJarを作成するアプローチに従い、OutputFormatさまざまなフォルダー/ファイルで出力を多重化するためにカスタマイズすることができます。サブクラスを作成し、MultipleTextOutputFormatその中のいくつかのメソッドをオーバーライドする必要があります(generateFileNameForKeyValue(Text key, Text value, String leaf)generateActualKey(Text key, Text value)に)。

詳細については、こちらを参照してください:http: //www.infoq.com/articles/HadoopOutputFormat

于 2012-06-19T20:34:59.520 に答える
0

いいえ、伝統的な意味ではできません。

理由: MrJob は、Hadoop クラスターで実行する場合、Hadoop ストリーミングを内部的に使用して map/reduce ジョブを実行します。これは、Amazon Elastic M/R と Hadoop クラスターの場合と同じであると想定しています。

--output-dir実際には、レデューサーの出力が収集される場所を指定する Hadoop ストリーミングへの入力です。このメカニズムを使用して、データを異なるフォルダーに分離することはできません。

[編集:コメントに応じて]

私の理解では、boto は Amazon サービスに接続し、ec2 や s3 などにアクセスするためのライブラリにすぎません。

非伝統的な意味では、別のディレクトリに書き込むことができると思います。

私はこのアイデアをテストしておらず、このアプローチはお勧めしません。これは、ファイルを開いてレデューサー内で直接書き込むようなものです。理論的には、それを行うことができます。レデューサーの出力を std.out に書き込むだけではありません。S3 オブジェクトを直接開いて書き込むことができます。複数のレデューサーを生成するため、異なるファイルを開くことを確認する必要があります。

これは、Hadoop クラスターで MrJob を使用しているときに学んだことです: http://pyfunc.blogspot.com/2012/05/hadoop-map-reduce-with-mrjob.html

于 2012-06-18T22:14:59.200 に答える