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

How does file compression format affect my spark processing

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

然后我转向 gzip 格式,我能够在我的 spark 作业中处理它,但我一直怀疑为什么人们说 gzip 文件格式也不可拆分?

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

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

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

还有性能上有什么区别

CASE1: 如果我有一个非常大的 (10gb) gzip 文件然后我将它加载到 spark 中 运行 指望它

CASE2: 如果我有一些可拆分的 (bzip2) 相同大小的文件,然后将其加载到 spark 中 运行 指望它

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

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

现在,回答您的问题:

if i have a very huge (10gb) gzip file and then i load it in spark and run count on it

它仅由一个 CPU 在一个执行器上加载,因为该文件不可拆分。

(bzip2) same size file and then load this in spark and run count on it

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

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