澄清 | snappy压缩到底支持不支持split? 为啥?

文章探讨了Snappy压缩格式在大数据处理中的切分问题。尽管Snappy本身不支持切分,但在如ORC等容器类文件格式上,由于文件结构允许索引,仍能实现切分。通过对Spark源码的分析,揭示了Snappy在ORC文件中的作用位置,指出Snappy压缩的ORC文件仍可进行有效读取和处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前两天,群里小伙伴问了一个问题:

不是说snappy压缩不支持split嘛,为什么我改小mapred.max.split.size一倍之后,mapper数翻倍?

一直以来大家都知道snappy是不支持切分的,但是在测试时,又发现在某些情况下,貌似支持切分,这让人很疑惑... ...

关于snappy压缩,在网上大家的说法也不是很统一,有人说不支持split,有人说支持:

凡是稍微有点深度的有问题,从网上求答案,真的是太难了......

这篇从群里小伙伴的这个问题出发,分析一下有关snappy压缩的一些事情及spark 在处理这一块的源码层面分析。

先给结论

1、snappy压缩格式本身是不可切分的;

2、snappy压缩格式作用在文本类文件格式上不可切分;

3、snappy压缩格式作用在Sequence、Avro、parquet、orc等这些容器类的文件格式上,能够支持切分。但这里的切分并不是因为snappy变的可切分了,而是因为这些容器类的文件格式牛逼~~

再理解一遍啥是可切分?啥是不可切分?原因是啥?

可切分:是否可以搜索数据流的任意位置并进一步往下读取数据。

啥意思?

1、假设有一个1GB的不压缩的文本文件,如果HDFS的块大小为128M,那么该文件将被存储在8个块中,把这个文件作为输入数据的MapReduc/Spark作业,将创建8个map/task任务,其中每个数据块对应一个任务作为输入数据。

对于不压缩的文本文件来说,是可切分,因为每个block都存了完整的数据信息,读取的时候可以按照规定的方式去读:比如按行读。

2、假如一个文本文件经过snappy压缩后,文件大小为1GB。与之前一样,HDFS也是将这个文件存储成8个数据块。但是每个单独的map/task任务将无法独立于其他任务进行数据处理,官方一点的说法,原因就是压缩算法无法从任意位置进行读取。

通俗的讲解,就是因为存储在HDFS的每个块都不是完整的文件࿰

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小萝卜算子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值