我对大数据世界中可拆分和不可拆分文件格式的理解感到困惑。 我使用的是 zip 文件格式,我知道 zip 文件是不可分割的,当我处理该文件时,我必须使用 ZipFileInputFormat 基本上将其解压缩然后处理它。
然后我转移到 gzip
格式,我能够在我的 Spark 工作中处理它,但我总是怀疑为什么人们说 gzip
文件格式也不是可拆分?
这将如何影响 我的 Spark 工作表现?
例如,如果有 5k 个不同大小的 gzip 文件,其中一些是 1 kb,一些是 10gb,如果我要在 Spark 中加载它会发生什么?
在我的情况下我应该使用 gzip 还是任何其他压缩?如果是,那么为什么?
性能上有什么区别
情况1:如果我有一个非常大(10gb)的gzip文件,然后我将其加载到spark中并对其进行计数
情况2:如果我有一些可拆分(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 block 大小,您应该期望所有执行器中的许多核心都在计算该文件
对于小于 HDFS block 大小的任何文件,没有区别,因为它需要在一个 CPU 上消耗整个 HDFS block 才能计算出一个小文件。
关于hadoop - 文件压缩格式如何影响我的 Spark 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48935246/