文档首页/
    
      
      MapReduce服务 MRS/
      
      
        
        
        用户指南(吉隆坡区域)/
        
        
        MRS集群组件操作指导/
        
        
        使用Spark2x/
        
        
        Spark2x常见问题/
        
        
        SQL和DataFrame/
        
      
      为什么有时访问没有权限的parquet表时,在上报“Missing Privileges”错误提示之前,会运行一个Job?
    
  
  
    
        更新时间:2023-03-17 GMT+08:00
        
          
          
        
      
      
      
      
      
      
      
      
  
      
      
      
        
为什么有时访问没有权限的parquet表时,在上报“Missing Privileges”错误提示之前,会运行一个Job?
问题
为什么有时访问没有权限的parquet表时,在上报“Missing Privileges”错误提示之前,会运行一个Job?
回答
Spark SQL对用户SQL语句的执行逻辑是:首先解析出语句中包含的表,再获取表的元数据信息,然后对权限进行检查。
当表是parquet表时,元数据信息包括文件的Split信息。Split信息需要调用HDFS的接口去读取,当表包含的文件数量很多时,串行读取Split信息变得缓慢,影响性能。故对此做了优化,当表包含的文件大于一定阈值(即spark.sql.sources.parallelSplitDiscovery.threshold参数值)时,会生成一个Job,利用Executor的并行能力去读取,从而提升执行效率。
由于权限检查在获取表元数据之后,因此当读取的parquet表包含的文件数量很多时,会在报“Missing Privileges”之前,运行一个Job来并行读取元数据信息。
   父主题: SQL和DataFrame