最后更新: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开发用户来说,可以在企业内部执行使用无效和刷新命令的相关规范和指南,并且可以使用审计来改进管理过程。或者,通过哨兵的权限控制,只有无效和刷新命令对某些用户开放。
本文由 在线网速测试 整理编辑,转载请注明出处。