本文為您介紹如何開啟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。該參數會影響最終文件的大小。
進入集群服務頁面。
登錄EMR on ECS。
在頂部菜單欄處,根據實際情況選擇地域和資源組。
在EMR on ECS頁面,單擊目標集群操作列的集群服務。
新增配置項。
在集群服務頁面,單擊Spark3服務區域的配置。
單擊spark-thriftserver.conf頁簽。
單擊新增配置項。
輸入Key為spark.sql.adaptive.merge.output.small.files.enabled,Value為true的配置項。
單擊確定。
在彈出的對話中,輸入執行原因,單擊保存。
重啟SparkThriftServer。
在集群服務頁面,單擊狀態頁簽。
在組件列表區域,單擊SparkThriftServer操作列的重啟。
在彈出的對話框中,輸入執行原因,單擊確定。
在確認對話框中,單擊確定。
支持的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