impala中的无效元数据和刷新命令之间的区别?

uajslkp6  于 2021-06-26  发布在  Impala
关注(0)|答案(2)|浏览(959)

我在影响impala 1.1版的链接中看到:
由于impala1.1,refresh语句只适用于现有表。对于新表,需要发出“invalidatemetadata”语句。
这对以后的 Impala 版本仍然适用吗?

k5ifujac

k5ifujac1#

根据impala文件,使metada无效并刷新
使元数据语句无效
invalidatemetadata语句将一个或所有表的元数据标记为过时。下次impala服务对元数据无效的表执行查询时,impala会在继续查询之前重新加载关联的元数据。由于与refresh语句执行的增量元数据更新相比,这是一个非常昂贵的操作,因此在可能的情况下,首选refresh而不是invalidatemetadata。
在impala之外、配置单元和其他配置单元客户端(如sparksql)中进行以下更改时,需要“使元数据无效”:
现有表的元数据已更改。
新表被添加, Impala 将使用这些表。
服务器或数据库级别的哨兵权限已更改。
阻止元数据更改,但文件保持不变(hdfs重新平衡)。自定义项jars更改。
某些表不再被查询,您希望从目录和协调器缓存中删除它们的元数据以减少内存需求。
当impalad进行更改时,不需要作废元数据。
刷新语句
refresh语句从metastore数据库重新加载表的元数据,并从hdfs namenode增量重新加载文件和块元数据。刷新用于避免impala和外部元数据源(即hivemetastore(hms)和namenodes)之间的不一致。
使用说明:
表名是必需的参数,并且该表必须已经存在并且为impala所知。
仅重新加载指定表的元数据。
在impala之外发生以下情况之一后,使用refresh语句加载特定表的最新元存储元数据:
删除、添加或修改文件。
例如,将新数据文件加载到表的hdfs data目录后,附加到现有hdfs文件,通过insert或load data从配置单元插入数据。
删除、添加或修改分区。
例如,在hive中发出alter table或其他表修改sql语句之后

pcrecxhr

pcrecxhr2#

根据cloudera的《 Impala 指南》(cloudera enterprise 5.8),但在5.9中保持不变:
invalidate metadata和refresh是对应的:invalidate metadata会在后续查询需要时等待重新加载元数据,但会重新加载表的所有元数据,这可能是一个代价高昂的操作,特别是对于具有许多分区的大型表。refresh会立即重新加载元数据,但只加载新添加的数据文件的块位置数据,因此总体而言,这是一个成本较低的操作。如果数据以某种更广泛的方式被更改,例如被hdfs平衡器重新组织,请使用invalidatemetadata来避免由于减少本地读取而导致的性能损失。如果使用impala 1.0版,invalidate metadata语句的工作方式与impala 1.0 refresh语句相同,而impala 1.1 refresh针对向现有表中添加新数据文件的常见用例进行了优化,因此现在需要table name参数。
与处理现有表格相关:
表名是[刷新]所需的参数。要刷新所有表的元数据,请使用invalidatemetadata命令。因为refresh table\u name只适用于当前impala节点已经知道的表,所以在配置单元shell中创建新表时,请输入invalidate metadata new\u table,然后才能在impala shell中看到新表。一旦impala知道了该表,就可以在为该表添加数据文件后发出refresh table\u name。
所以看起来它确实保持了原样。我相信CDH5.9和 Impala 2.7是配套的。

相关问题