hadoop - 文件压缩格式如何影响我的 Spark 处理

标签 hadoop apache-spark zip bzip2 hadoop-lzo

我对大数据世界中可拆分和不可拆分文件格式的理解感到困惑。 我使用的是 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/

相关文章:

hadoop - 使用用户定义的类链接作业

logging - 如何从我的 map/reduce 应用程序登录?

java - 无法在本地文件系统上创建 Hadoop 序列文件

apache-spark - Spark Streaming kafka 找不到 Set 的领导者偏移量

java - 如何将InputStream转换为ZIP格式?

c# - 单声道无法加载编码 437

python - HortonWorks Ambari 1.7.0 选择了错误的 HDP 堆栈

apache-spark - 为什么作业失败并显示 "No space left on device",但 df 却另有说法?

java - 如何使用Rabbitmq Spark Stram查询ES

java - 使用密码压缩整个目录