为什么我的avro输出文件在我的猪工作中如此之小和如此之多?

时间:2014-08-12 02:44:11

标签: hadoop apache-pig avro

我正在运行一个使用AvroStorage进行一系列连接并编写的猪脚本()

一切运行良好,我正在获取我想要的数据......但是它被写入845个avro文件(每个~30kb)。这似乎根本不正确...但我似乎找不到任何我可能已经改变的设置,从我以前的1个大avro输出到845个小avros(除了添加另一个数据源)。

这会改变什么吗?我怎样才能将它恢复为一个或两个文件?

谢谢!

3 个答案:

答案 0 :(得分:0)

可能是更改块大小。如果你想回到更少的文件,你也可以尝试使用镶木地板。通过pig脚本转换.avro文件并将其存储为.parquet文件,这样可以将845减少到更少的文件。

但除了性能优势之外,没有必要回到更少的文件。

答案 1 :(得分:0)

MR作业写入的文件数由运行的Reducer数量定义。您可以在Pig脚本中使用PARALLEL来控制Reducer的数量。

如果您确定最终数据足够小(与块大小相当),则可以将PARALLEL 1添加到JOIN语句,以确保JOIN转换为1 reducers,从而仅将输出写入1个文件。

答案 2 :(得分:0)

我使用SET pig.maxCombinedSplitSize 134217728;

解决了这个问题

使用SET default_parallel 10;它可能仍会输出许多小文件,具体取决于PIG作业。