
# 优化小文件场景下的Spark SQL性能
#### 配置场景
Spark SQL的表中，经常会存在很多小文件（大小远小于HDFS块大小），每个小文件默认对应Spark中的一个Partition，也就是一个Task。在很多小文件场景下，Spark会起很多Task。当SQL逻辑中存在Shuffle操作时，会大大增加hash分桶数，严重影响性能。
在小文件场景下，您可以通过如下配置手动指定每个Task的数据量（Split Size），确保不会产生过多的Task，提高性能。
![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
当SQL逻辑中不包含Shuffle操作时，设置此配置项，不会有明显的性能提升。
#### 配置描述
要启动小文件优化，在Spark客户端的"spark-defaults.conf"配置文件中进行设置。
表1参数说明 
| **参数**                            | **描述**                                                                          | **默认值**          |
|:---|:---|:---|
| spark.sql.files.maxPartitionBytes | 在读取文件时，将单个分区打包的最大字节数。 单位：byte。 | 134217728（即128M） |
| spark.files.openCostInBytes       | 打开文件的预估成本， 按照同一时间能够扫描的字节数来测量。当一个分区写入多个文件时使用。高估更好，这样小文件分区将比大文件分区更先被调度。           | 4M               |
   
