更新时间:2025-06-10 GMT+08:00

配置Spark小文件自动合并

操作场景

小文件自动合并特性开启后,Spark将数据先写入临时目录,再去检测每个分区的平均文件大小是否小于16MB(默认值)。如果发现平均文件大小小于16MB,则认为分区下有小文件,Spark会启动一个Job合并这些小文件,并将合并后的大文件写入到最终的表目录下。

使用约束

  • 写入表的类型为:Hive、Datasource
  • 支持的数据格式:parquet、orc

配置参数

  1. 安装Spark客户端。

    详细操作请参考安装MRS客户端

  2. 使用客户端安装用户登录Spark客户端节点。

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

    参数

    参数说明

    取值示例

    spark.sql.mergeSmallFiles.enabled

    用于控制是否在写入数据时自动合并小文件。

    • true:Spark写入目标表时会判断是否写入了小文件,如果发现有小文件,则会启动合并小文件的job。
    • false:不启用合并小文件的功能。

    true

    spark.sql.mergeSmallFiles.threshold.avgSize

    用于精确控制小文件合并后的目标平均大小。

    当启用小文件合并(spark.sql.mergeSmallFiles.enabled=true)时,且某个分区的平均文件大小小于该值,则启动小文件合并。

    16MB

    spark.sql.mergeSmallFiles.maxSizePerTask

    合并后的每个文件的目标大小。

    用于控制小文件合并任务处理数据量上限的配置参数。当启用小文件合并功能(spark.sql.mergeSmallFiles.enabled=true)时,该参数限制了单个合并任务处理的最大数据量,确保合并操作高效且稳定。

    256MB

    spark.sql.mergeSmallFiles.moveParallelism

    用于控制小文件合并过程中文件移动操作的并行度。当不需要合并小文件后时,将临时文件移动到最终目录的并行度。

    10000