文档首页/ MapReduce服务 MRS/ 组件操作指南(LTS版)/ 使用Spark/Spark2x/ Spark SQL企业级能力增强/ 配置Spark支持并发任务写入同一张表的不同分区
更新时间:2026-06-11 GMT+08:00
分享

配置Spark支持并发任务写入同一张表的不同分区

配置场景

Spark支持并发任务写入同一张表的不同分区。

使用约束

  • 本章节仅适用于MRS 3.6.0-LTS.1及之后版本。
  • 不支持相同datasources V1非分区表和Hive非分区表的并发写入。
  • 不支持datasources V1分区表和Hive分区表,INSERT INTO和INSERT OVERWRITE并发写相同表的相同分区。
  • datasources V1分区表spark.sql.sources.partitionOverwriteMode=STATIC时,INSERT OVERWRITE未指定分区场景,不支持并发写不同分区。
  • Hive分区表,hive.exec.dynamic.partition.mode=strict时,INSERT OVERWRITE未指定分区场景,不支持并发写不同分区。

配置参数

在Spark客户端的“{客户端安装目录}/Spark/spark/conf/spark-defaults.conf”配置文件中进行设置,修改如下参数:

参数

说明

默认值

spark.sql.sources.parallelInsert.enabled

用于控制Spark在写入数据时启用或禁用并行插入功能。该特性建议需要并发写入的作业进行作业级别开启。

  • true:启用并行插入功能。

    Spark datasources表INSERT INTO语法支持并发写相同表不同分区,当spark.sql.sources.partitionOverwriteMode=STATIC时,INSERT OVERWRITE table_name PARTITION (partition_key='xxx')语法支持并发写相同表不同分区。

    对datasources V1分区表,进行INSERT INTO并发写相同表的相同分区不会报错,在一些极端组合场景会出现数据不一致的情况,如与spark.sql.mergeSmallFiles.enabled=true一起使用等场景。

  • false:禁用并行插入功能。

    对datasources V1分区表,进行INSERT INTO并发写相同表的相同分区会执行报错。

false

  • datasources V1分区表spark.sql.sources.partitionOverwriteMode=DYNAMIC时,spark.sql.sources.parallelInsert.enabled=false也支持并发写相同表的不同分区。
  • Hive分区表hive.exec.dynamic.partition.mode=nonstrict时,支持并发写相同表的不同分区。

相关文档