Spark Catalyst 缓存机制

本文探讨了Spark SQL在使用Thriftserver时遇到的HDFS文件找不到的问题,以及如何通过Spark Catalyst的缓存机制来解决。文章详细介绍了tableRelationCache的运作方式,其根据databaseName.tableName存储LogicalPlan,并可以通过spark.sql.filesourceTableRelationCacheSize参数调整缓存大小。针对Parquet格式的表,当spark.sql.hive.convertMetastoreParquet设为false时,Spark SQL将使用Hive SerDe处理,从而避免问题。最后,建议调整spark.sql.filesourceTableRelationCacheSize以控制LogicalPlan的缓存数量。
摘要由CSDN通过智能技术生成

1、背景

Spark SQL 用thriftserver去接,使用的时候,经常会出现找不到hdfs上xxx文件,需要手动refresh table相关的表的情况。

今天偶然看到Spark Catalyst中的相关代码,突然眼前一亮,摸索着看下去,终于得到了真香。

 

2、代码中的实现步骤

位于org.apache.spark.sql.catalyst.catalog包下的SessionCatalog.scala :

这边定义的tableRelationCache就是Spark在执行SQL时,缓存的LogicalPlan,其中key为某个HiveTableRelation中读取出来的databaseName.tableName,value就是LogicalPlan。

而cacheSize配置了该缓存Map的容量,可通过参数spark.sql.filesourceTableRelationCacheSize调节,(默认缓存1000个)。

cacheTable为缓存LogicalPlan的入口:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值