正如impala教程中讨论的那样,Impala使用了Hive共享的Metastore。但是已经提到过,如果使用hive在表上创建或进行某些版本编辑,则应执行INVALIDATE METADATAREFRESH命令来通知Impala有关更改的信息。

所以我很困惑,我的问题是:如果共享元数据数据库,为什么需要由impala执行INVALIDATE METADATAREFRESH

如果是通过impala来缓存元数据,那么为什么守护程序自己在缓存未命中的情况下不更新其缓存,而无需手动刷新元数据?

任何帮助表示赞赏。

最佳答案

好!让我们从评论中的问题开始,即集中式元存储的好处是什么。

拥有中央元存储不需要用户在两个不同的位置维护元数据,每个位置分别用于Hive和Impala。用户可以拥有一个中央存储库,并且这两个工具都可以访问此位置以获取任何元数据信息。

现在,第二部分,为什么在共享元存储时需要执行INVALIDATE METADATA或REFRESH?

Impala利用Massively Parallel Processing范例来完成工作。它倾向于从执行者节点保留元数据,而不是从集中的元存储中读取每个查询,以便它可以完全绕过“冷启动”,而在冷启动中可能要花费大量时间来读取元数据。

INVALIDATE METADATA/REFRESH会将元数据/块信息传播到执行程序节点。

为什么要手动进行?

在早期版本的Impala中,没有分类过程。元数据更新需要通过上述命令传播。从Impala 1.2开始,添加了catalogated,此过程将元数据更改从Impala SQL语句中继到集群中的所有节点。

因此,无需手动进行操作!

希望能有所帮助。

09-30 17:27