和impala_0758-5.16.2-Impala的invalidate与refresh介绍

本文详细介绍了Impala的元数据管理,包括`refresh`和`invalidate metadata`命令的区别和使用场景。`refresh`适用于分区元数据或数据文件更改后的更新,而`invalidate metadata`会清空所有元数据缓存,涉及全量更新。权限控制方面,`refresh`权限需针对表授予,而`invalidate metadata`需对server具有`refresh`或`all`权限。建议避免频繁使用`invalidate metadata`,并根据需求规范命令使用。
摘要由CSDN通过智能技术生成

作者:段自强

审核:黄权隆

修订:Fayson

Impala元数据简介

9bc6f47fef5460b6ba675d6120937cae.png

Impala并没有保存自己元数据的后端的关系型数据库,它通过连接到Hive Metastore来获取元数据并缓存到Catalog Server,如大家所知,Hive Metastore则是连接后端的MySQL关系型数据库。Catalog Server除了缓存Hive Metastore的数据,同时还会找NameNode和Sentry Server去拉取HDFS文件路径相关元数据,以及安全策略的元数据,随后将其压缩并发送到Statestore以广播给所有Impala Daemon,如果做了Coordinator和Executor分离,则Statestore只广播给Coordinator。

Impala这种架构也是尽可能的提升查询性能,尤其相比Hive SQL或者Spark SQL,因为比如一个表具有大量数据同时包含大量分区,检索该表的所有元数据可能非常耗时,有时可能需要几分钟。因此Impala节点都会缓存这些元数据,以便查询需要访问元数据时可以直接从内存中读取。

如果表定义或者表中的数据被更新,则集群中所有的Impala Daemon必须接收最新的元数据以替换旧的元数据,然后对这个表的查询才是正确的 。从Impala1.2开始,这个元数据更新是自动的,如果是通过Impala发起的DDL和DML语句,Catalog Server会将新的元数据 发布给Statestore,然后广播给所有的Impala Daemon节点,实现元数据的自动更新。

如果是通过Hive发出的DDL和DML,或者对HDFS底层的文件进行了手动更改,你需要手动更新Impala的元数据,如果是给一张表添加了新数据,可以通过REFRESH命令,如果是新建一张表或者删除整表,则可以通过INVALIDATE METADATA命令来更新元数据。INVALIDATE METADATA会去找HMS重新获取完全的元数据 (注意该操作是异步的,是异步逐步加载所有元数据还是查询时才获取通过参数设置,下面章节会说明),如果你知道只是更新了某一张表,你可以通过命令REFRESH table_name只是刷新该表的元数据。

本文主要详细介绍INVALIDATE和REFRESH命令,以及两者的区别,最后会给出总结。

  • 测试环境

1.Redhat7.4

2.CDH5.16.2

3.集群已启用Kerberos+Sentry

refresh

1.refresh在impala中是相对invalidate来说较为轻量的的刷新,他的语法是:

refresh [table]                          --刷新table表的元数据refresh [table] partition [partition]    --刷新table表partition分区的元数据

2.refresh的执行过程

  • refresh table的时候,其中一个impala Daemon首先对catalogd发起resetMetadata请求
  • catalogd收到该请求:对指定了partition的请求,执行reloadPartition操作,获取该分区最新的元数据并刷新;对未指定partition的请求,执行reloadTable操作,获取全部分区最新的元数据并刷新。这里的“刷新”是指Metastore中与缓存对比如果没有变化,就保持原状;如果有增删改,才会发生改变
  • impala Daemon收到catalog返回的完整缓存,用它来更新本地缓存。

这里要注意的是:statestored仍会负责广播新的元数据到其他节点。在广播完之前,除了已经执行刷新的impala Daemon之外的其他impala Daemon依旧保有旧的缓存。

3.refresh特点

refresh的特点是同步性

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值