Impala角色作用以及刷新操作说明

文章详细介绍了在Impala中如何处理数据操作后的元数据更新,包括使用`refresh`和`Invalidatemetadata`命令的区别,以及ImpalaDaemon、ImpalaCatalogServer和ImpalaStateStore的角色。`refresh`是同步和增量的,适合局部变更,而`Invalidatemetadata`则是异步和全量的,用于大量元数据更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

93d4cb5590b8b1666cfbc7eb259e1acd.png

bd963f70b97ace89e3a50f219e0649e4.png

ee39b249c3a3b2e1e188ce3ce6285fd5.png

题外总结

c05263c2855dbbb45eec1f21b9b8084d.png

1、在impala中对表执行数据插入、增加表字段、增加分区操作,使用其他impala daemon再次查询是不需要执行刷新操作。

2、在hive中执行创建表操作,impala需要使用invalidate metadata 刷新,impala才可以查询出新建的表,refresh不能刷新impala中不存在的表。

3、在hive中执行数据插入、增加表字段、增加表分区,在impala中需使用刷新表(invalidate metadata 和 refresh 都可以 )才可以查询出最新表数据或者字段、分区。

10a14cd836f652e30d2ba6b3e826f92d.png

Impala角色作用说明

3aa2caddc2ad3f23d8d0ef2828c78aa2.png

Impala Daemon

Impala daemon是impala最核心组件,负责接收用户查询请求(ODBC协议),生成查询计划, 协调其他impala daemon执行查询计划,并汇总查询结果返回给用户。Impala daemon部署在每个datanode上,一般来说impalad只读取本机数据,尽量避免远程访问HDFS文件数据。

其中impala daemon被用于调度查询请求的时候,一般会把它称为调度者(Coordinator)

Impala Catalog Server

Impala Catalogd Server进程是Impala中用来传递Impala SQL导致的元数据变化的组件,它把这些变化传递给集群中所有的节点。一个集群中只需要一个节点上有这个守护进程。请求是通过Statestore传递的,因此Statestored和Catalogd 服务应当运行在同一节点上。

引入Catalogd进程的目的就是减少执行REFRESH和INVALIDATE METADATA语句,当在Impala中执行 CREATE TABLE 、 INSERT 或其他表修改、数据修改操作时,不再需要执行 REFRESH 或INVALIDATE METADATA 语句。但是在Hive中执行这些操作,或者直接在HDFS操作数据,这两个语句仍然需要,但是只需要在其中一个节点上(impala daemon)运行,不再需要在所有节点上都运行刷新命令。

Impala StateStore

Impala StateStore负责集群元数通知和分发。一个集群中只需要一个节点上有这个守护进程,如果Impala集群中某个节点因为各种原因离线,Impala StateStore会及时通知集群中其他节点,避免之后的查询会落到这些离线节点。

StateStore并不是必须的,它只是在Impala集群中有节点出错时才起作用,而如果StateStore未启动或者不能提供服务,并不影响Impala集群中其他节点正常工作,而Impala集群顶多是变得不可靠。当StateStore恢复在线,它将重建与其他节点的通讯,并恢复它的监控功能。

aff360bb5c85709c819c9872dca1f691.png

refresh和Invalidate metadata

c0b8702fc048adc9df572d3a8e8282a7.png

refresh

语法命令

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

refresh执行过程

1、refresh table的时候,其中一个impala Daemon首先对catalogd发起resetMetadata请求。

2、catalogd收到该请求:对指定了partition的请求,执行reloadPartition操作,获取该分区最新的元数据并刷新;对未指定partition的请求,执行reloadTable操作,获取全部分区最新的元数据并刷新。这里的“刷新”是指Metastore中与缓存对比如果没有变化,就保持原状;如果有增删改,才会发生改变。

3、impala Daemon收到catalog返回的完整缓存,用它来更新本地缓存。

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

Refresh特点

refresh的特点是同步性和增量性。并且它的执行是围绕单表以及单表的分区进行的,因此它更轻量级,也更适合分区元数据或数据文件更改之后的刷新。另外在hive里新建的表在impala里是无法使用refresh的。

           6d138fe0356bfede6a81d7e30a3886f8.png

Invalidate metadata

invalidate意思是“使无效,废除”,因此invalidate metadata的含义就是“废除(缓存的)元数据”,语法是

invalidate metadata --重新生成所有表元数据 
invalidate metadata [table] --重新生成table表的元数据

invalidate metadata的执行过程

1、invalidate metadata的时候,impala daemon向catalogd发起无参的resetMetadata请求,表示清空所有元数据,待被使用时才异步加载。

2、invalidate metadata table的时候,其中一个impala Daemon获取到表table,对catalogd发起resetMetadata请求。

3、catalog收到该请求,执行invalidateTable操作,清除所有与table相关的元数据缓存,重新读取Metastore中的元数据,并生成新的缓存。但是此时生成的缓存只包含库名和表名,是不完整的。

4、catalog再生成一个标记缓存的版本号,将这个IncompleteTable 缓存和版本号一起返回给impala Daemon,然后继续异步加载其余的元数据。

5、impala Daemon收到catalogd返回的不完整缓存和版本号,用它来更新本地缓存。

注:

1、在刚执行完时,除了执行刷新操作的impala Daemon之外的其他impala Daemon仍然保有旧的元数据缓存,就算此节点保有的新元数据也是残缺的。只有当catalog异步加载完了table对应的所有元数据 ,才会生成一个更新的版本号,并将完整的元数据通过statestore广播给所有impala Daemon,整个Impala集群的元数据感知才会达到一致。

2、只有设置了启动参数 –load_table_in_background=true 才会异步加载元数据。CM默认会加这个参数,建议大集群中设为false。否则对于大集群可能启动时间非常长,甚至几个小时都启动不完。

Invalidate matadata的特点

invalidate metadata的特点就是异步性和全量性。但是它涉及到大批量元数据的更改,所以较为消耗资源和时间。

以上结论如有错误欢迎联系指正。

点个在看你最好看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值