在 Spark 中读取大的 gz 文件

Posted

技术标签:

【中文标题】在 Spark 中读取大的 gz 文件【英文标题】:Reading large gz files in Spark 【发布时间】:2017-11-22 21:35:07 【问题描述】:

我有 2 个 gzip 文件,每个文件大小约为 30GB,并编写了 spark 代码来分析它们。 spark 集群有 4 个工作节点(28GB RAM 和 4 个核心)和 2 个头节点(64GB RAM)。

我正在使用sc.textFile(histfile,20) 来读取这 2 个 gzip 文件并将它们并行化。这项工作分为 3 个阶段 - reduceByKeyreduceByKeysaveAsTextFile。由于有 2 个文件,目前只有 2 个工作人员在使用。

历时4个多小时,第一阶段仍未完成。 当每个 gzip 文件大小为 100GB-200GB 时,运行 spark 作业的正确方法是什么。

【问题讨论】:

【参考方案1】:

gzip 文件不可拆分,因此您的第一阶段将生成两个地图任务,并且第一阶段需要很长时间才能通过。

请在第二阶段之前重新分区以获得良好的分布以减少任务。

【讨论】:

谢谢,num.executor.instances设置为20。sc.textFile(file,numpartition)不分区实现并行吗? Spark 的输入格式来自 Hadoop。 numpartition 仅在可拆分文件的情况下生效。在您的情况下,没有拆分,因此 numpartitions 没有任何用处。您可以查看阶段 1 中的 num 任务以进行验证。

以上是关于在 Spark 中读取大的 gz 文件的主要内容,如果未能解决你的问题,请参考以下文章

(PY)Spark:如何读取扩展名为“.gz”的“.txt”文件

如何在spark中解压和读取包含多个压缩文件的文件

如何使用 spark DF 或 DS 读取“.gz”压缩文件?

Spark:读取hdfs gz压缩包

用scala在spark中读取压缩文件

Spark:如何使用子集日期读取多个 s3 文件