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