的 好!让我们从评论中的问题开始,即集中式元存储的好处是什么。 强>
拥有一个中央元存储不需要用户在两个不同的位置维护元数据,每个位置用于Hive和Impala。用户可以拥有一个中央存储库,这两个工具都可以访问此位置以获取任何元数据信息。
的 现在,第二部分,为什么在共享元存储时需要执行INVALIDATE METADATA或REFRESH? 强>
Impala利用大规模并行处理范例来完成工作。它不是从每个查询的集中式元存储中读取,而是倾向于将元数据与执行器节点保持在一起,以便它可以完全绕过COLD STARTS,其中可能花费大量时间来读取元数据。
INVALIDATE METADATA / REFRESH将元数据/块信息传播到执行程序节点。
的 为什么要手动? 强>
在早期版本的Impala中, catalogd 过程不存在。元数据更新需要通过上述命令传播。启动Impala 1.2, catalogd 添加并且此过程将元数据更改从Impala SQL语句中继到集群中的所有节点。
因此无需手动完成!
希望有所帮助。
通过修改表时@masoumeh 的 Impala SQL语句 强> 没必要 INVALIDATE METADATA or REFRESH ,这项工作是由 的 catalogd 强> 。 但是当你插入:
INVALIDATE METADATA or REFRESH
一个 的 新 强> 表通过 的 蜂巢 强> 即 sqoop import .... --hive-import ... 那么你必须这样做: INVALIDATE METADATA tableName 通过Impala-Shell。
sqoop import .... --hive-import ...
INVALIDATE METADATA tableName
的 新数据文件 强> 变成一个 existing 表(附加数据)然后你必须: REFRESH tableName 因为你唯一想要的是最后添加信息的元数据。
existing
REFRESH tableName
它是共享的,但Impala缓存元数据并在其优化器中使用其统计信息,但如果在hive中更改了元数据,则必须手动告知impala刷新其缓存,这有点不方便。 但是如果你在impala中创建/更改表,则不必在hive端做任何事情。