如果无效元数据可以做同样的事情,为啥需要在 Impala 中刷新

Posted

技术标签:

【中文标题】如果无效元数据可以做同样的事情,为啥需要在 Impala 中刷新【英文标题】:Why Refresh in Impala in required if invalidate metadata can do same thing如果无效元数据可以做同样的事情,为什么需要在 Impala 中刷新 【发布时间】:2019-09-15 17:47:00 【问题描述】:

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

【问题讨论】:

【参考方案1】:

INVALIDATE METADATAREFRESH 是对应的:

INVALIDATE METADATA 是一个简单的异步操作 从目录和协调器缓存中丢弃加载的元数据。 在该操作之后,目录和所有 Impala 协调员 只知道数据库和表的存在,什么都不知道 更多的。表的元数据加载由任何后续触发 查询。

REFRESH 同步重新加载元数据。 REFRESH 更多 比在表完成后执行完整的元数据加载更轻量级 无效。 REFRESH 无法检测到由 HDFS 平衡器等操作触发的块位置的变化(如 INVALIDATE METADATA 所做的那样),因此导致远程 在查询执行期间读取会对性能产生负面影响。

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

====

当在 Impala 外部、Hive 和其他 Hive 客户端(例如 SparkSQL)中进行以下更改时,需要INVALIDATE METADATA

现有表的元数据发生变化。 添加了新表,Impala 将使用这些表。 SERVER 或 DATABASE 级别的 Sentry 权限已从 在 Impala 之外。 块元数据更改,但文件保持不变(HDFS 重新平衡)。 UDF jar 更改。 某些表不再被查询,您想删除它们 来自目录和协调器缓存的元数据以减少内存 要求。

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

更多详情,请阅读HERE

【讨论】:

以上是关于如果无效元数据可以做同样的事情,为啥需要在 Impala 中刷新的主要内容,如果未能解决你的问题,请参考以下文章

当我可以在“git init”之后对“git pull”做同样的事情时,为啥要“git clone”? [复制]

为啥在 runOnUiThread 做同样的事情时使用处理程序?

为啥 shell=True 和 shell=False 做同样的事情? [复制]

为啥 HTTP/2 多路复用虽然 tcp 做同样的事情?

当按位运算符做同样的事情时,为啥要使用逻辑运算符?

网站中的元标记