我已经开始研究Hadoop了.如果我的理解是正确的,我可以处理一个非常大的文件,它会分裂到不同的节点,但是如果文件被压缩,那么文件就无法分割,而且需要由单个节点处理(有效地破坏了优势)运行mapreduce ver并行机器集群).
我的问题是,假设上述内容是正确的,是否可以手动将固定大小的块或每日块拆分大文件,压缩它们然后传递压缩输入文件列表以执行mapreduce?
BZIP2可以在hadoop中拆分 - 它提供了非常好的压缩比,但是从CPU时间和性能来看并不能提供最佳结果,因为压缩非常耗费CPU.
LZO可以在hadoop中拆分 - 利用hadoop-lzo你可以拆分压缩的LZO文件.您需要具有外部.lzo.index文件才能并行处理.该库提供了以本地或分布式方式生成这些索引的所有方法.
LZ4可以在hadoop中拆分 - 利用hadoop-4mc你可以拆分压缩的4mc文件.您不需要任何外部索引,并且您可以使用提供的命令行工具或Java/C代码(内部/外部hadoop)生成存档.4mc可在任何级别的速度/压缩比下在hadoop LZ4上使用:从快速模式达到500 MB/s压缩速度到高/超模式,提供更高的压缩比,几乎可与GZIP相媲美.
考虑使用LZO压缩.它是可分割的.这意味着许多映射器可以处理大的.lzo文件.Bzip2可以做到这一点,但它很慢.
Cloudera 介绍了它.对于MapReduce,LZO在压缩比和压缩/解压缩速度之间取得了良好的平衡.