Pig の MultiStorage を使用して、入力ファイルを多数の小さな出力ファイルに分割しています。
それが役立つ場合、スクリプトは次のようになります。
<snip registers and defines>
a = load '$FILES' using AvroStorage();
a_projected = foreach a generate field1, field2;
a_explode = foreach a_projected generate field1, FLATTEN(TOKENIZE(field2));
--splitting based on field2
store a_explode into '$OUTPUT' using org.apache.pig.piggybank.storage.MultiStorage('$OUTPUT','1');
これは、S3 からの読み取りと S3 への書き込みです。「$FILES」パラメーターは、約 10,000 行、サイズが約 2 MB の 1 つのファイルを含む単一のフォルダーになる傾向があります。
MultiStorage を使用する場合、これは約 4 ~ 5,000 個の個別のフォルダーに分割され、その中に 1 つのファイルが含まれ、実行に約 15 分かかります。
PigStorage を使用すると、予想どおり 1 つの出力ファイルが取得され、実行に約 20 秒かかります。
そのようなパフォーマンスがマルチストレージに期待されるのですか? それを改善するためにできることはありますか?