如果使用Hive创建一个表,在其中插入记录并首先在Impala中反映相同的表,我必须运行Invalidate Metadata,这反映了执行程序上的元数据也显示了新添加的记录。
那么我的问题仍然是为什么我们需要做刷新表?

最佳答案

INVALIDATE METADATAREFRESH是对应的:

  • INVALIDATE METADATA是一个异步操作,它简单地
    从目录和协调器缓存中丢弃已加载的元数据。
    完成该操作后,目录和所有Impala协调员
    只知道数据库和表的存在,一无所知
    更多。表的元数据加载由任何后续触发
    查询。
  • REFRESH同步重新加载元数据。 REFRESH更多
    比在表被加载后进行完整的元数据加载更轻巧
    无效。 REFRESH无法检测到由HDFS平衡器之类的操作触发的块位置变化(就像INVALIDATE METADATA一样),因此导致远程
    在执行查询期间读取会对性能产生负面影响。

    使特定表无效后使用REFRESH分隔
    从针对该表运行的第一个查询加载元数据。

  • ====

    在Hive和其他Hive客户端(例如SparkSQL)的Impala之外进行以下更改时,需要INVALIDATE METADATA:
  • 现有表的元数据已更改。
  • 添加了新表,Impala将使用这些表。
  • 将SERVER或DATABASE级别的Sentry特权从
    在Impala之外。
  • 阻止元数据更改,但文件保持不变(HDFS
    重新平衡)。 UDF罐子发生变化。
  • 不再查询某些表,您想删除它们
    目录和协调器缓存中的元数据以减少内存
    要求。

  • 当impalad进行更改时,不需要INVALIDATE METADATA

    有关更多详细信息,请阅读HERE

    10-07 12:22