spark如何处理hdfs压缩文件以及如何选择hdfs压缩编解码器(可拆分或不可拆分)

dzjeubhm  于 2021-06-02  发布在  Hadoop
关注(0)|答案(0)|浏览(318)

背景:

我们有一个项目,使用spark处理一些日志/csv文件,每个文件的大小非常大,例如20gb。
所以我们需要压缩log/csv文件

示例

hdfs块大小:128m,我们有一个1gb的日志文件。
如果文件未压缩,hdfs中将有8个块

var rddFlat = sc.textFile("hdfs:///tmp/test.log")

rddflat.partition.length将为8(因为将有8个输入拆分)
如果使用bzip2,假设压缩后的大小是256mb(实际上bz有很高的压缩比),将有2个块

var rddCompress = sc.textFile("hdfs:///tmp/test.log.bz2")

rddcompress.partition.length将为2(正确吗?)
如果我们有以下的转变和行动

var cnFlat = rddFlat.map(x => x.contains("error")).count();
var cnCompress = rddCompress.map(x => x.contains("error")).count();

我的怀疑

(压缩文件的hdfs块、输入分割和spark分区、可分割和不可分割压缩的关系)
spark如何处理压缩分区?
spark的每个执行者将其分配的分区解压成spark块,并对该块进行转换和操作?
如果去掉解压时间,哪一个比较慢?
计算会慢一点吗?因为只有两个分区,只有两个节点将执行转换和操作。对于cnflat,有8个分区。
在选择压缩编解码器(splittable或not splittable)时,我们需要考虑压缩的大小吗?
压缩后,如果压缩大小小于或等于hdfs块大小。至于splittable,我们选择splittable还是不选择splittable压缩编解码器是没有意义的,因为sparkrdd只有一个分区(我的意思是只有一个worker处理rdd)?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题