首页 > 解决方案 > 在 Spark 中读取 HDFS 时的任务数

问题描述

在此处输入图像描述ORC 格式的非格式化表格中有 200 个文件。每个文件约为 170KB。总大小约为 33MB。

想知道为什么 spark 阶段读取表格会生成 7 个任务。该作业被分配了一个具有 5 个核心的执行器。

标签: apache-spark

解决方案


Spark 将文件映射到分区的方式非常复杂,但有 2 个主要配置选项会影响创建的分区数量:

spark.sql.files.maxPartitionBytes默认情况下为 128 MB,并设置可拆分源的最大分区大小。所以如果你有一个 2 GB 的 ORC 文件,你最终会得到 16 个分区。

spark.sql.files.openCostInBytes默认情况下为 4 MB,并用作创建新分区的成本,这基本上意味着如果文件小于 4MB,Spark 会将文件连接到相同的分区中。如果您有很多小的可拆分文件,默认情况下您最终会得到大约 4MB 大小的分区,这就是您的情况。

如果您有不可拆分的源,例如 gzip 压缩文件,它们将始终位于单个分区中,无论它们的大小如何。


推荐阅读