文档首页/
    
      
      MapReduce服务 MRS/
      
      
        
        
        组件操作指南(普通版)(巴黎区域)/
        
        
        使用Spark2x/
        
        
        Spark2x性能调优/
        
        
        SQL和DataFrame调优/
        
      
      优化小文件场景下的Spark SQL性能
    
  
  
    
        更新时间:2022-02-22 GMT+08:00
        
          
          
        
      
      
      
      
      
      
      
      
  
      
      
      
        
优化小文件场景下的Spark SQL性能
配置场景
Spark SQL的表中,经常会存在很多小文件(大小远小于HDFS块大小),每个小文件默认对应Spark中的一个Partition,也就是一个Task。在很多小文件场景下,Spark会起很多Task。当SQL逻辑中存在Shuffle操作时,会大大增加hash分桶数,严重影响性能。
在小文件场景下,您可以通过如下配置手动指定每个Task的数据量(Split Size),确保不会产生过多的Task,提高性能。
 
   当SQL逻辑中不包含Shuffle操作时,设置此配置项,不会有明显的性能提升。
配置描述
要启动小文件优化,在Spark客户端的“spark-defaults.conf”配置文件中进行设置。
| 
        参数  | 
      
        描述  | 
      
        默认值  | 
     
|---|---|---|
| 
        spark.sql.files.maxPartitionBytes  | 
      
        在读取文件时,将单个分区打包的最大字节数。 单位:byte。  | 
      
        134217728(即128M)  | 
     
| 
        spark.files.openCostInBytes  | 
      
        打开文件的预估成本, 按照同一时间能够扫描的字节数来测量。当一个分区写入多个文件时使用。高估更好,这样小文件分区将比大文件分区更先被调度。  | 
      
        4M  | 
     
   父主题: SQL和DataFrame调优