6

大きなバイナリ ファイルを (2Gb) チャンクに分割し、Amazon S3 にアップロードしました。今、それを 1 つのファイルに結合して、カスタムで処理したい

走ってみた

elastic-mapreduce -j $JOBID -ssh \
"hadoop dfs -cat s3n://bucket/dir/in/* > s3n://bucket/dir/outfile"  

しかし、ローカル端末への -cat 出力データが原因で失敗しました - リモートでは動作しません...

どうすればこれを行うことができますか?

PS私は猫をストリーミングMRジョブとして実行しようとしました:

den@aws:~$ elastic-mapreduce --create --stream --input s3n://bucket/dir/in \
--output s3n://bucket/dir/out --mapper /bin/cat --reducer NONE

この仕事は無事に終わりました。しかし。dir/in に 3 つのファイル パーツがありましたが、現在は /dir/out に 6 つのパーツがあります。

part-0000
part-0001
part-0002
part-0003
part-0004
part-0005

そして、私の出力の一部ではないファイル_SUCCESS ofcource...

そう。ファイルの前に分割された結合方法は?

4

1 に答える 1

1

そう。私は解決策を見つけました。良くないかもしれませんが、動作しています。

そう。ブートストラップ アクションを使用して EMR ジョブ フローを作成しました

--bootstrap-action joinfiles.sh

その joinfiles.sh で、wget を使用して S3 からファイルの一部をダウンロードし、通常の cat abc > abc を使用して結合します。

その後、結果を S3 にコピーする s3distcp を追加しました。(サンプルはhttps://stackoverflow.com/a/12302277/658346にあります)。それだけです。

于 2012-09-28T08:19:32.270 に答える