如何加速Pig MultiStorage

时间:2013-04-02 14:00:40

标签: hadoop amazon-s3 apache-pig

我正在使用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。 '$ FILES'参数往往是一个文件夹,其中一个文件大约有10,000行,大小约为2 MB。

当使用MultiStorage时,它会分成大约4-5千个单独的文件夹,其中包含一个文件,并且大约需要15分钟才能运行。

使用PigStorage时,我按预期获得一个输出文件,运行大约需要20秒。

MultiStorage可以预期这种性能吗?有什么办法可以改善吗?

1 个答案:

答案 0 :(得分:0)

您的密钥空间可能太宽 - 在这种情况下,MultiStorage最终会创建多个文件,每个密钥对应一个文件。创建太多文件(内部MultiStorage为每个键创建一个Writer)需要花费大量时间。如果您不希望每个键都有一个文件,那么您应该只使用PigStorage。