0758-5.16.2-Impala的invalidate与refresh介绍

      最后更新:2020-04-07 12:24:09 手机定位技术交流文章

      作者:段

      审计:黄全龙

      修订:费森

      英帕拉元数据简介

      Impala没有存储元数据的后端关系数据库。它通过连接到配置单元元存储来获取元数据,并将其缓存在目录服务器中。众所周知,Hive Metastore是一个连接到后端的MySQL关系数据库。除了缓存Hive Metastore的数据之外,目录服务器还会找到NameNode和Sentry服务器来提取与HDFS文件路径相关的元数据和安全策略的元数据,然后进行压缩并将其发送到Statestore,以便广播给所有Impala守护进程。如果协调员和执行者是分开的,Statestore将只向协调员广播。

      Impala还尽可能提高查询性能,尤其是与Hive SQL或Spark SQL相比,因为例如,一个表有大量数据,同时包含大量分区,检索表的所有元数据可能非常耗时,有时可能需要几分钟。因此,Impala节点缓存这些元数据,以便查询可以在需要访问元数据时直接从内存中读取它们。

      如果更新了表定义或表中的数据,集群中的所有Impala守护程序都必须接收最新的元数据来替换旧的元数据,然后才能正确查询该表。从Impala1.2开始,这个元数据更新是自动的。如果是由Impala发起的DDL和DML语句,目录服务器会将新的元数据发布到Statestore,然后广播到所有Impala守护进程节点,实现元数据的自动更新。

      如果DDL和DML是通过Hive发布的,或者HDFS底部的文件是手动更改的,您需要手动更新Impala元数据。如果向表中添加了新数据,可以通过REFRESH命令更新元数据。如果创建了新表或删除了整个表,可以通过INVALIDATE METADATA命令更新元数据。VALIDATE METADATA将转到HMS以检索完整的元数据(请注意,该操作是异步的,是一步一步异步加载所有元数据,还是在查询时获取传递参数设置,这将在下一节中解释)。如果您知道只更新了某个表,则只能使用REFRESH table_name命令刷新该表的元数据。

      本文主要详细介绍了INVALIDATE和REFRESH命令,以及它们之间的区别,最后给出了一个总结。

      测试环境1。Redhat7.4

      2.CDH5.16.2

      3.在群集上启用了Kerberos+哨兵

      恢复精神

      1 .与impala中的无效刷新相比,refresh是相对轻量级的刷新。他的语法是:

      恢复精神

      2.使用测试用户执行刷新

      执行失败,没有执行命令的权限

      3.使用管理员用户向表授予插入权限,并将测试用户组添加到该权限的角色中

      4.使用测试用户执行刷新

      执行失败,没有执行命令的权限

      5.使用管理员用户向表所在的数据库授予创建权限,并将测试用户所在的组添加到该权限角色中

      6.使用测试用户执行刷新

      执行失败,没有执行命令的权限

      7.使用管理员用户向表授予刷新权限,并将测试用户组添加到该权限的角色中

      8 .测试用户执行刷新。

      9.使用管理员用户授予表的所有权限,并将测试用户组添加到该权限的角色中

      10 .测试用户执行刷新。

      执行成功,刷新表成功

      解释只有对此表具有REFRESH权限的用户才能执行刷新。

      2.与测试用户一起执行无效元数据

      执行失败,没有执行命令的权限

      3.使用管理员用户向表授予插入权限,并将测试用户组添加到该权限的角色中

      4.与测试用户一起执行无效元数据

      执行失败,没有执行命令的权限

      5.使用管理员用户向表所在的数据库授予创建权限,并将测试用户所在的组添加到该权限角色中

      6.与测试用户一起执行无效元数据

      执行失败,没有执行命令的权限

      7.使用管理员用户向表授予刷新权限,并将测试用户组添加到该权限的角色中

      8 .测试用户执行无效元数据

      使元数据无效

      10 .测试用户执行无效元数据

      使元数据无效

      12 .测试用户执行无效元数据命令

      执行失败

      13.使用管理员用户将所有权限授予服务器,并将测试用户组添加到该权限的角色中

      14 .测试用户执行无效元数据命令

      命令执行成功

      15.使用管理员用户授予服务器刷新权限,并将测试用户组添加到该权限的角色中

      16 .测试用户执行无效元数据命令

      命令执行成功

      解释对于无效元数据命令,只有具有服务器刷新和服务器所有权限的用户才能成功执行。对于无效元数据[表]命令,您必须对该表具有刷新权限才能成功执行。

      4.3摘要

      1.如果在配置单元中添加或删除表,如创建表和删除表,请使用invalidate元数据[表]语句。

      2.如果新数据被添加到配置单元中的表中,或者有分区改变,或者表结构的行为改变,例如加载数据、改变表添加分区、改变表添加列等。,使用刷新[表]分区[分区]语句。

      3.需要执行无效元数据操作的用户必须获得其所有表的REFRESH权限,否则无法成功执行。

      4.只有对该表具有REFRESH权限的用户才能对该表执行无效元数据[表]和刷新[表]操作。

      使用场景建议

      1.无效本身是一个相对繁重的操作。它清除空所有元数据缓存,但只加载所有不可完成的缓存。当请求特定的表时,后续查询将重新加载所有完整的元数据,从而影响后续查询。因此,我们应该尽最大努力避免直接使用无效元数据和更改为无效[表]或使用刷新命令。

      2.对于Impala开发用户来说,可以在企业内部执行使用无效和刷新命令的相关规范和指南,并且可以使用审计来改进管理过程。或者,通过哨兵的权限控制,只有无效和刷新命令对某些用户开放。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/3772.html

          热门文章

          文章分类