如果使用Hive创建一个表,在其中插入记录并首先在Impala中反映相同的表,我必须运行Invalidate Metadata,这反映了执行程序上的元数据也显示了新添加的记录。
那么我的问题仍然是为什么我们需要做刷新表?
最佳答案
INVALIDATE METADATA
和REFRESH
是对应的:
INVALIDATE METADATA
是一个异步操作,它简单地从目录和协调器缓存中丢弃已加载的元数据。
完成该操作后,目录和所有Impala协调员
只知道数据库和表的存在,一无所知
更多。表的元数据加载由任何后续触发
查询。
REFRESH
同步重新加载元数据。 REFRESH
更多比在表被加载后进行完整的元数据加载更轻巧
无效。
REFRESH
无法检测到由HDFS平衡器之类的操作触发的块位置变化(就像INVALIDATE METADATA
一样),因此导致远程在执行查询期间读取会对性能产生负面影响。
使特定表无效后使用
REFRESH
分隔从针对该表运行的第一个查询加载元数据。
====
在Hive和其他Hive客户端(例如SparkSQL)的Impala之外进行以下更改时,需要
INVALIDATE METADATA
:在Impala之外。
重新平衡)。 UDF罐子发生变化。
目录和协调器缓存中的元数据以减少内存
要求。
当impalad进行更改时,不需要
INVALIDATE METADATA
。有关更多详细信息,请阅读HERE