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

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、内存等提出了一些疑问,这将有助于更好地理解它。

以上是关于文件压缩格式如何影响我的火花处理的主要内容,如果未能解决你的问题,请参考以下文章

批处理如何压缩文件成rar 并且解压rar中指定文件

文件压缩项目

批处理如何压缩文件成rar 并且解压rar中指定文件

怎么将文件打包成ISO格式的压缩包

如何将压缩的声音文件转换为未压缩的文件

如何启用网页GZIP压缩