更新时间:2025-12-10 GMT+08:00
分享

配置Spark自适应数据重分布小文件合并

操作场景

自适应“数据重分布”小文件合并特性开启后,Spark在写入数据前,判断是否需要增加Shuffle合并。如果需要增加Shuffle合并,Spark会启动一个ShuffleJob,并将合并后的数据写入到表目录下。

约束与限制

  • 本章节仅适用于MRS 3.6.0-LTS及之后版本。
  • 开启自适应执行特性(设置spark.sql.adaptive.enabled为true)。
  • 写入表的类型为:Hive、Datasource
  • 支持的数据格式:parquet、orc
  • 如果SQL的Insert前有以下算子,则不会再添加Shuffle合并:

    Limit、Sort、Repartition、RepartitionByExpression、RebalancePartitions

配置参数

  1. 安装Spark客户端。

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

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

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

    参数

    参数说明

    取值示例

    spark.sql.optimizer.mergeSmallFilesUsingShuffle.enabled

    是否启用使用Shuffle来合并小文件的功能,以减少文件数量,提高读取和处理性能。

    • false:默认值,即默认不启用此功能。
    • true:Spark在写入目标表前会判断是否需要增加Shuffle合并,如果需要合并,会启动一个ShuffleJob。

    true

    spark.sql.optimizer.mergeSmallFiles.addshuffle.enabled

    在不包含Limit、Sort、RepartitionByExpression、Repartition、RebalancePartitions的前提下,开启时直接增加Shuffle,关闭时根据SQL的情况判断是否增加Shuffle。

    16MB

    spark.sql.adaptive.rebalance.advisoryPartitionSizeInBytes

    自适应优化时,控制增加的shuffle的分区建议大小,在Spark聚合小shuffle分区或拆分倾斜的shuffle分区时生效。

    256MB

    spark.sql.optimizer.mergeSmallFiles.inferRebalanceAndSortOrders.enabled

    否启用通过推断重新平衡和排序顺序来合并小文件的功能。

    • false:默认值,即默认不启用此功能。
    • true:开启后,Spark会在执行计划中推断并应用重新平衡和排序顺序来合并小文件,以减少文件数量,提高读取和处理性能。

    true

    spark.sql.optimizer.mergeSmallFiles.inferRebalanceAndSortOrdersMaxColumns

    指定在推断重新平衡和排序顺序来合并小文件时,列推断使用的最大列数。

    3

相关文档