配置Spark小文件自动合并
操作场景
小文件自动合并特性开启后,Spark将数据先写入临时目录,再去检测每个分区的平均文件大小是否小于16MB(默认值)。如果发现平均文件大小小于16MB,则认为分区下有小文件,Spark会启动一个Job合并这些小文件,并将合并后的大文件写入到最终的表目录下。
使用约束
- 写入表的类型为:Hive、Datasource
- 支持的数据格式:parquet、orc
配置参数
- 安装Spark客户端。
详细操作请参考安装MRS客户端。
- 使用客户端安装用户登录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