文档

SparkSQL合并小文件功能使用说明

更新时间:

本文为您介绍如何开启SparkSQL合并小文件功能,以及支持的SQL语句。

开启小文件合并功能

开启小文件合并功能后,SparkSQL的写入操作(例如insert、create table等)将自动合并生成的输出文件,但功能只作用于当前写入操作生成的文件,不会对历史数据进行合并。同时,该功能支持非分区表以及静态、动态分区写入。EMR-5.5.0之后版本和EMR-3.39.0之后版本的Spark3支持非分区表以及静态分区写入,EMR-5.10.0之后版本和EMR-3.44.0之后版本的Spark3支持动态分区写入。

说明

您还可以新增参数spark.sql.adaptive.advisoryOutputFileSizeInBytes,调整写表之前插入的Shuffle的分区大小,默认值为256 MB。该参数会影响最终文件的大小。

  1. 进入集群服务页面。

    1. 登录EMR on ECS

    2. 在顶部菜单栏处,根据实际情况选择地域和资源组

    3. EMR on ECS页面,单击目标集群操作列的集群服务

  2. 新增配置项。

    1. 集群服务页面,单击Spark3服务区域的配置

    2. 单击spark-thriftserver.conf页签。

    3. 单击新增配置项

    4. 输入Keyspark.sql.adaptive.merge.output.small.files.enabledValuetrue的配置项。

    5. 单击确定

    6. 在弹出的对话中,输入执行原因,单击保存

  3. 重启SparkThriftServer。

    1. 集群服务页面,单击状态页签。

    2. 组件列表区域,单击SparkThriftServer操作列的重启

    3. 在弹出的对话框中,输入执行原因,单击确定

    4. 确认对话框中,单击确定

支持的SQL

支持以下类型的SQL语句,示例如下所示:

  • INSERT INTO table_a SELECT * FROM table_b

  • CREATE TABLE table_a AS SELECT * FROM table_b

  • INSERT OVERWRITE TABLE table_c PARTITION (dt=20221228) SELECT * FROM table_d

  • INSERT INTO table_c PARTITION (dt=20221228) SELECT * FROM table_d

  • INSERT OVERWRITE TABLE table_c PARTITION (dt) SELECT * FROM table_d

  • INSERT INTO table_c PARTITION (dt) SELECT * FROM table_d