分享

关于gzip压缩的疑问

tanxl 2018-5-30 18:39:33 发表于 疑问解答 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 6 6894
gzip 格式shi使用DEFLATE 算法来存储压缩后的数据,将数据存储在一系列连续的压缩块中,所以说如果是连续的压缩块中,那么就是存储在一个节点上?

已有(7)人评论

跳转到指定楼层
hello2018 发表于 2018-5-30 19:18:06

回帖奖励 +20 云币

这个不太清楚,看你什么背景下用啊。如果只是在window下,那肯定是一个呀。

点评

谢谢回复,针对hadoop中的对数据的压缩,使用gzip 压缩文件后,存储的HDFS是分块存储的,而DEFLATE算法说的是将数据存储在一系列连续的压缩块中,感觉有点矛盾。  发表于 2018-5-31 09:54
回复

使用道具 举报

einhep 发表于 2018-5-30 19:24:35
每个节点压缩自己的呗。在放到别的节点,这个功能到是可以有,但是应该没有必要。
猜测楼主应该问的这个问题:hadoop连续压缩与切片的关系
gzip压缩格式在hadoop中的支持有一定的局限性:  由于gzip压缩算法本身的原因,我们无法对gzip压缩文件进行分块,也就是说,在hadoop中,如果想要用hadoop 的mapreduce来处理数据,每一个mapper就必须对应一个gz文件,不能多个mapper对一个gzip文件的多个chunk进行并行的处理, 因此如果要在hadoop mapreduce任务中使用gzip,在数据处理之前就需要对数据进行认为的切分,让一个mapper来处理一块数据。这样其实有一点有违 mapreduce的本质。
回复

使用道具 举报

tanxl 发表于 2018-5-31 10:07:18
einhep 发表于 2018-5-30 19:24
每个节点压缩自己的呗。在放到别的节点,这个功能到是可以有,但是应该没有必要。
猜测楼主应该问的这个问 ...

谢谢回复,正是《hadoop权威指南》5.2.2中压缩和输入分片的疑问,现在我存在疑问的是:gzip压缩后的文件存储在HDFS上(分布式,块肯定不在一起),而gzip格式使用DEFLATE算法存储压缩后的数据,而DEFLATE算法将数据存储在一系列连续的压缩块中,感觉两者相矛盾!
回复

使用道具 举报

desehawk 发表于 2018-5-31 17:48:57
tanxl 发表于 2018-5-31 10:07
谢谢回复,正是《hadoop权威指南》5.2.2中压缩和输入分片的疑问,现在我存在疑问的是:gzip压缩后的文件 ...

而DEFLATE算法将数据存储在一系列连续的压缩块中,这个应该是指单台机器的压缩,而非整个分布式的压缩。这个连续是指数据不能分片。非连续存储,压缩的本身是一部分数据,这个被压缩的一部分数据,不能在分片。是这个意思。
回复

使用道具 举报

tanxl 发表于 2018-5-31 19:13:32
desehawk 发表于 2018-5-31 17:48
而DEFLATE算法将数据存储在一系列连续的压缩块中,这个应该是指单台机器的压缩,而非整个分布式的压缩。 ...

谢谢回复:是不是这样理解,比如一个gzip压缩文件存储在HDFS上8个块中,那么我单独处理每个块都是无意义的?因为这些块都是相互有关联的,所以导致gzip格式的文件只能起一个map处理?必须将gzip的其他节点上的块数据读取到map运行的节点上处理(这就是牺牲数据本地性的原因?)
回复

使用道具 举报

desehawk 发表于 2018-5-31 19:35:44
tanxl 发表于 2018-5-31 19:13
谢谢回复:是不是这样理解,比如一个gzip压缩文件存储在HDFS上8个块中,那么我单独处理每个块都是无意义 ...

一个分片对应一个map任务由于gzip不能分割,所以一个gzip包一个任务。看你压缩的怎么压缩的,有几个gzip包。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条