Spark读取HDFS中ORC格式表时生成7个任务的原因咨询
Spark读取小ORC文件仅生成7个任务的原因分析
该现象完全符合Spark SQL读取文件时的默认分区计算逻辑,核心由3个配置参数和小文件的权重计算规则共同决定:
- 影响分区数的核心配置(均为Spark默认值):
spark.sql.files.maxPartitionBytes:单分区允许的最大数据量,默认值为128MBspark.sql.files.openCostInBytes:打开单个文件的预估IO开销,默认值为4MB,小于该值的小文件会按4MB计算权重,避免单分区打开过多小文件导致性能下降spark.default.parallelism:Spark作业的默认并行度,取值等于集群所有Executor的总核心数,你当前配置为1个Executor5核,因此该值为5,生成的分区数不会低于该值
- 具体分区数计算过程:
- 你场景中的ORC文件单文件大小为170KB,远小于4MB的openCost阈值,因此每个小文件都按4MB的权重计入总容量
- 200个文件的总权重为
200 * 4MB = 800MB - 按单分区最大128MB计算,
800MB / 128MB = 6.25,向上取整后得到7个分区,该值大于默认最小并行度5,因此最终读取阶段生成7个任务
- 补充说明:ORC为可分割的列式存储格式,本场景中单文件远小于切片阈值,不会出现单个文件被拆分为多个分区的情况,7个任务对应的分区均为多个小ORC文件合并后的结果。
内容的提问来源于stack exchange,提问作者Vikas。
相关产品推荐
相关产品推荐

