如果压缩类型是record而不是block,是否需要创建索引文件(使用lzop)?

ibps3vxo  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(409)

据我所知,需要一个索引文件来使输出可拆分。如果mapred.output.compression.type=sequencefile.compressiontype.record,我们还需要创建索引文件吗?

sauutmhj

sauutmhj1#

简短回答:
record and block compression.type属性适用于序列文件,而不是简单的文本文件(可以用lzo、gzip或bz2…)单独压缩)
更多信息:
lzo是一种压缩编解码器,它提供了比gzip更好的压缩和解压速度,并且还具有分割能力。lzo允许这样做,因为它由许多较小的压缩数据块(约256k)组成,允许作业沿块边界拆分,而gzip则将整个文件的字典写在顶部。
将mapred.output.compression.codec指定为lzocodec时,hadoop将生成.lzo\u deflate文件。它们包含没有任何头的原始压缩数据,不能用 lzop -d 命令。hadoop可以在map阶段读取这些文件,但是这会让你的生活变得艰难。
将lzopcodec指定为compression.codec时,hadoop将生成.lzo文件。这些文件包含头文件,可以使用 lzop -d 但是,默认情况下,.lzo和.lzo\u deflate文件都不可拆分。这就是lzoindexer发挥作用的地方。它生成一个索引文件,告诉您记录边界在哪里。这样,多个Map任务可以处理同一个文件。
有关更多信息,请参阅cloudera博客文章和lzoindexer。

相关问题