2

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

然后我开始gzip格式化,我可以在我的 spark 工作中处理它,但我总是怀疑为什么人们说gzip文件格式也不能拆分?

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

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

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

还有性能上有什么区别

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

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

4

1 回答 1

5

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

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

现在,来回答你的问题:

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

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

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

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

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

于 2018-02-23T02:45:45.013 回答