
# 配置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 |
   
![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
- datasources V1分区表spark.sql.sources.partitionOverwriteMode=DYNAMIC时，spark.sql.sources.parallelInsert.enabled=false也支持并发写相同表的不同分区。
- Hive分区表hive.exec.dynamic.partition.mode=nonstrict时，支持并发写相同表的不同分区。
 
