配置Spark读取ORC和Parquet文件的Task数量
配置场景
Spark ORC和Parquet文件读取时,支持指定splitBytes大小和压缩率来控制读取文件阶段的Task数量,开启特性后读取ORC和Parquet文件的Task数量不随可用Executor数量的增加而一直增加,从而减少无效Task数量,降低Driver Task调度压力,提升Driver高负载场景下的整体性能。
使用约束
- 本章节仅适用于MRS 3.6.0-LTS.1及之后版本。
- 支持表的类型为:DataSource表、ORC Hive表(spark.sql.hive.convertMetastoreOrc=true时生效)、Parquet Hive表(spark.sql.hive.convertMetastoreParquet=true时生效)
- 支持的数据格式:Parquet、ORC
配置参数
在Spark客户端的“{客户端安装目录}/Spark/spark/conf/spark-defaults.conf”配置文件中进行设置,修改如下参数:
| 参数名称 | 参数说明 | 默认值 |
|---|---|---|
| spark.sql.orc.resourceFriendly.split.mode.enabled | 用于控制Spark在读取ORC文件时是否启用splitBytes大小和压缩率来控制读取文件阶段的Task数量。
| false |
| spark.sql.preset.orc.stripe.size | Spark在读取ORC文件时,推荐设置的orc.stripe.size值。 | 64MB |
| spark.sql.orc.fileCompressionFactor | ORC文件中压缩后的stripe大小/orc.stripe.size的值 ,数据不同,ORC文件中压缩后的stripe大小会不同。 | 1.0 |
| spark.sql.parquet.resourceFriendly.split.mode.enabled | 用于控制Spark在读取parquet文件时是否启用splitBytes大小和压缩率来控制读取文件阶段的Task数量。
| false |
| spark.sql.preset.parquet.block.size | Spark在读取parquet文件时,推荐设置的parquet.block.size值。 | 128MB |
| spark.sql.parquet.fileCompressionFactor | parquet文件中压缩后的Row Group大小/parquet.block.size的值 ,数据不同,parquet文件中压缩后的Row Group大小会不同。 | 1.0 |
读取文件时的SplitBytes计算逻辑
- 在可用资源不足的情况下,会优先按照可用资源计算的SplitBytes进行读取文件切分。
- spark.sql.orc.resourceFriendly.split.mode.enabled=true时,ORC文件读取时的SplitBytes计算逻辑:
orcStripSize = spark.sql.preset.orc.stripe.size * spark.sql.orc.fileCompressionFactor
最终使用的SplitBytes = Math.max(基于可用资源计算的SplitBytes, orcStripSize)
- spark.sql.parquet.resourceFriendly.split.mode.enabled=true时,Parquet文件读取时的SplitBytes计算逻辑:
parquetBlockSize = spark.sql.preset.parquet.block.size * spark.sql.parquet.fileCompressionFactor
最终使用的SplitBytes = Math.max(基于可用资源计算的SplitBytes, parquetBlockSize)