我在LFS格式的HDFS中有大量数据。我还索引了LZO文件。当我运行Java MR作业或加载并使用PIG处理LZO文件时,我发现每个LZO文件只使用一个映射器(作业完成没有任何问题但速度很慢)。我在hadoop配置中将映射器的数量配置为50,但是当我处理LZO文件时,我看到只使用了10个映射器(每个lzo文件一个)。我应该打开其他任何配置吗?
软件版本:
Hadoop 1.0.4
Pig 0.11
感谢。
答案 0 :(得分:0)
LZO压缩文本文件无法并行处理,因为它们不可拆分(即,如果您从文件中的任意点读取,您无法确定如何解压缩以下压缩数据),那么MapReduce被迫使用单个映射器连续读取这样的文件。
解决此问题的一种方法是预处理LZO文本文件以创建LZO索引文件,MapReduce可以使用它们来拆分文本文件,从而并行处理它们。
更有效的方法是将LZO文本文件转换为可拆分的二进制格式,例如Avro,Parquet或SequenceFile。这些格式允许各种数据压缩编解码器(请注意,Snappy现在比LZO更受欢迎),并且还可以提供其他好处,例如快速序列化/反序列化,列修剪和捆绑元数据。
这本书" Hadoop:The Definitive Guide"有很多关于这个主题的信息。