0

複数の pig スクリプトからの出力を使用するエラスティック mapreduce パイプラインを実行しています。基本的に pig スクリプトの出力は S3 の特定の場所に保存され、データのサイズが巨大であるため、作成される出力ファイルは part-xxxxx という名前になります。

ここでの問題は、パイプラインのステップの 1 つで、2 つの異なる場所からコンテンツをコピーしてそれらをまとめ、このコレクション全体を処理することです。両方の場所にあるファイルの名前が似ているため (part-00000 から part-00342)、コピー プロセス中にファイルが上書きされます。

デフォルトで、pig は出力ファイルを特定の場所にそのようなファイル名の形式で生成します。最初は、豚の出力ファイルをディスクにダウンロードし、Python プログラムを作成して名前を変更し、S3 にアップロードし直していました。膨大な量のデータのため、今はそれを行うことができません。

私は実際にこのコピーを行うパイプライン ステップを所有していません。私が制御できるのは (おそらく) コピーされるファイルの名前だけです)。そのため、pig によって作成されたパーツ ファイルの名前にプレフィックスを付ける方法があるかどうかを知る必要があります。

ありがとう

4

2 に答える 2

0

豚の接頭辞を変更できるかどうかわかりません。

あなたはそれを制御できないと言いましたが、ダウンストリームプロセスを2つの入力ディレクトリにするのが最善だと思います。次のステップのためだけに 2 つのディレクトリを 1 つにコピーしなければならないのは、非常に効率が悪いように思えます。

本当に必要な場合は、ストリーミング コマンドが「hadoop fs -cp」であるストリーミング ジョブを使用して、hadoop を使用して名前の変更自体を行うことができます。このアプローチを見たことがない場合はお知らせください。ブログ投稿として書くことができます。とにかく意味がありました...

マット

于 2011-07-23T22:05:48.117 に答える