Pig和Java MR仅为每个LZO文件分配一个映射器

时间:2013-11-29 14:35:25

标签: hadoop mapreduce apache-pig

我在LFS格式的HDFS中有大量数据。我还索引了LZO文件。当我运行Java MR作业或加载并使用PIG处理LZO文件时,我发现每个LZO文件只使用一个映射器(作业完成没有任何问题但速度很慢)。我在hadoop配置中将映射器的数量配置为50,但是当我处理LZO文件时,我看到只使用了10个映射器(每个lzo文件一个)。我应该打开其他任何配置吗?

软件版本:

Hadoop 1.0.4
Pig 0.11

感谢。

1 个答案:

答案 0 :(得分:0)

LZO压缩文本文件无法并行处理,因为它们不可拆分(即,如果您从文件中的任意点读取,您无法确定如何解压缩以下压缩数据),那么MapReduce被迫使用单个映射器连续读取这样的文件。

解决此问题的一种方法是预处理LZO文本文件以创建LZO索引文件,MapReduce可以使用它们来拆分文本文件,从而并行处理它们。

更有效的方法是将LZO文本文件转换为可拆分的二进制格式,例如Avro,Parquet或SequenceFile。这些格式允许各种数据压缩编解码器(请注意,Snappy现在比LZO更受欢迎),并且还可以提供其他好处,例如快速序列化/反序列化,列修剪和捆绑元数据。

这本书" Hadoop:The Definitive Guide"有很多关于这个主题的信息。