文件压缩格式如何影响我的火花处理
Posted
技术标签:
【中文标题】文件压缩格式如何影响我的火花处理【英文标题】:How does file compression format affect my spark processing 【发布时间】:2018-02-22 18:58:35 【问题描述】:我对大数据世界中可拆分和不可拆分文件格式的理解感到困惑。
我使用的是 zip 文件格式,我知道 zip 文件是不可拆分的,当我处理该文件时,我必须使用 ZipFileInputFormat
基本上解压缩然后处理它。
然后我改用 gzip
格式,我可以在我的 spark 工作中处理它,但我一直怀疑为什么人们说 gzip
文件格式也不可拆分?
它将如何影响 我的火花工作表现?
例如,如果有 5k 个大小不同的 gzip 文件,其中一些是 1 kb,其中一些是 10gb,如果我要在 spark 中加载它会发生什么?
我应该在我的情况下使用 gzip 还是任何其他压缩?如果是,那为什么?
还有什么性能上的区别
CASE1:如果我有一个非常大 (10gb) 的 gzip 文件,然后我将它加载到 spark 中并运行 count
CASE2:如果我有一些可拆分 (bzip2) 大小相同的文件,然后将其加载到 spark 中并运行计数
【问题讨论】:
Spark: difference when read in .gz and .bz2的可能重复 Gzip 和 Zip 都不可拆分。 LZO、Snappy 和 Bzip2 是仅有的可拆分压缩格式,这意味着可并行处理,用于此目的 @cricket_007 那么在我的示例中并行处理的意义是什么......性能将如何影响...... 你明白并行运行的意义吧? @cricket_007 就我而言,抱歉,我对此知之甚少。 【参考方案1】:首先,您需要记住 Gzip 和 Zip 都不可拆分。 LZO 和 Bzip2 是唯一可拆分的存档格式。 Snappy 也是可拆分的,但它只是一种压缩格式。
出于本次讨论的目的,可拆分文件意味着它们可以在多台机器上并行处理,而不仅仅是一台机器。
现在,回答你的问题:
如果我有一个非常大 (10gb) 的 gzip 文件,然后我将它加载到 spark 中并运行计数
由于文件不可拆分,因此它仅由一个执行程序上的一个 CPU 加载。
(bzip2) 相同大小的文件,然后在 spark 中加载并运行计数
将文件大小除以 HDFS 块大小,您应该期望所有执行程序中的许多内核都在计算该文件
对于任何小于 HDFS 块大小的文件,没有区别,因为它需要在一个 CPU 上消耗整个 HDFS 块来计算那个小文件。
【讨论】:
我投了赞成票,因为我发现了一些对我有用的东西。由一个 CPU 加载是什么意思。那么你认为我应该使用 gzip 还是 bzip2 以获得更好的性能? 您需要了解计算机对您的文件的实际操作。 CPU 是执行工作的物理单元。如果您的文件不可拆分,则只有一台机器可以处理它。与许多机器在更短的时间内读取文件的较小部分相比,您必须等待它读取整个文件....现在,您告诉我哪个更好 @cricket_007 如果可以的话,我发现该评论太有价值了,无法在您的回答中体现 文件处理和 spark 配置到执行器内存,num-executors 等在这里得到了很好的解释,spoddutur.github.io/spark-notes/…。这可能与原始问题无关,但由于对 CPU、内存等提出了一些疑问,这将有助于更好地理解它。以上是关于文件压缩格式如何影响我的火花处理的主要内容,如果未能解决你的问题,请参考以下文章