文档首页/ MapReduce服务 MRS/ 组件操作指南(LTS版)(巴黎区域)/ 使用Spark2x/ Spark2x常见问题/ SQL和DataFrame/ 为什么有时访问没有权限的parquet表时,在上报“Missing Privileges”错误提示之前,会运行一个Job?
更新时间:2022-12-14 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来并行读取元数据信息。