我试图理解spark和hive metastore之间的相互作用。我首先查看了从spark到hive metastore的调用的时间和内容。我能看到一堆 get_table
要求 spark.read.table
操作,如果表被分区 get_partitions
当Dataframe通过调用操作具体化时调用。我注意到的另一件事是spark不缓存表定义。每次在配置单元表上调用操作时,都会再次从底层元存储中读取定义和相应的分区!。考虑到spark为您提供了其他选项来进行优化,我同意这种情况,您可以持久化Dataframe。当我查看 saveAsTable
操作。有用于创建表和按预期创建分区的api调用,但除此之外,还有大约30个api调用 get_table
正在调用配置单元元存储。我觉得很奇怪,很难理解这些电话的目的。
我在寻找以下问题的答案。
为什么spark在从metastore读取表和分区信息后不缓存这些信息呢?
如此之多背后的理由是什么 get_table
在创建配置单元表时调用?
你的电话号码是多少 get_table
读或写表时所做的调用,是执行者数量的函数?
有改进的余地吗?我们是否希望通过优化对metastore的调用数量来显著提高性能?
暂无答案!
目前还没有任何答案,快来回答吧!