文件压缩格式如何影响我的火花处理

2 zip hadoop bzip2 apache-spark hadoop-lzo

我对大数据世界中可拆分和不可拆分的文件格式的理解感到困惑。我使用的是 zip 文件格式,并且我知道 zip 文件是不可拆分的,因此当我处理该文件时,我必须使用ZipFileInputFormat基本上解压缩然后处理它的方式。

然后我转向gzip格式化,我能够在我的 Spark 工作中处理它,但我总是怀疑为什么人们说gzip文件格式也不能拆分?

它将如何影响我的火花工作表现?

因此,例如,如果有 5k 个不同大小的 gzip 文件,其中一些是 1 kb,其中一些是 10gb,如果我要在 spark 中加载它会发生什么?

我应该在我的情况下使用 gzip 还是任何其他压缩?如果是,那为什么?

还有性能上有什么不同

案例1:如果我有一个非常大(10gb)的gzip文件,然后我将它加载到spark中并运行计数

案例2:如果我有一些可拆分(bzip2)相同大小的文件,然后将其加载到 spark 中并运行计数

cri*_*007 5

首先,您需要记住 Gzip 和 Zip 都不可拆分。LZO 和 Bzip2 是唯一可拆分的存档格式。Snappy 也是可拆分的,但它只是一种压缩格式。

出于本次讨论的目的,可拆分文件意味着它们可以在多台机器上并行处理,而不仅仅是一台。

现在,回答你的问题:

如果我有一个非常大的(10gb)gzip 文件,然后我将它加载到 spark 中并运行计数

由于文件不可拆分,因此它仅由一个执行器上的一个 CPU 加载。

(bzip2) 相同大小的文件,然后将其加载到 spark 中并对其进行计数

将文件大小除以 HDFS 块大小,您应该期望所有执行程序中的许多内核都在计算该文件

对于小于 HDFS 块大小的任何文件,没有区别,因为它需要在一个 CPU 上消耗整个 HDFS 块,才能计算出一个小文件。