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 中并运行计数
首先,您需要记住 Gzip 和 Zip 都不可拆分。LZO 和 Bzip2 是唯一可拆分的存档格式。Snappy 也是可拆分的,但它只是一种压缩格式。
出于本次讨论的目的,可拆分文件意味着它们可以在多台机器上并行处理,而不仅仅是一台。
现在,回答你的问题:
如果我有一个非常大的(10gb)gzip 文件,然后我将它加载到 spark 中并运行计数
由于文件不可拆分,因此它仅由一个执行器上的一个 CPU 加载。
(bzip2) 相同大小的文件,然后将其加载到 spark 中并对其进行计数
将文件大小除以 HDFS 块大小,您应该期望所有执行程序中的许多内核都在计算该文件
对于小于 HDFS 块大小的任何文件,没有区别,因为它需要在一个 CPU 上消耗整个 HDFS 块,才能计算出一个小文件。