hive中的更新或者新建表impala 不能实时更新

hive中的更新或者新建表impala 不能实时更新

不积跬步无以至千里

Impala是基于Hive的大数据实时分析查询引擎,直接使用Hive的元数据库Metadata,意味着impala元数据都存储在Hive的metastore中。最近在生产中,我发现在hive 中更改表结构,或者建表 在impala中查询新建的表报错,或者更改的字段不能实时更新。

  • 问题原因

    这是因为元数据信息没有及时刷新。在impala 1.2中 加入的进程catalogd,主要就是将hive的metastore所存储的元数据缓存到impala自己的内存当中。在之前的版本中,当在某个节点上执行了create database、drop database、create table、alter table、或者drop table语句之后,需要在其它的各个节点上执行命令invalidate metadata来确保元数据信息的更新。需要注意的是,通过impala执行的操作带来的元数据变化,有了catalog就不需要再执行refresh和invalidate metadata,但如果是通过hive进行的建表、加载数据,则仍然需要执行refresh和invalidate metadata来通知impala更新元数据信息。
    
  • 解决办法

    -- 在impala里执行刷新命令刷新元数据即可
    -- invalidate metadata是用于刷新全库或者某个表的元数据,包括表的元数据和表内的文件数据,它会首先清除表的缓存,然后从metastore中重新加载全部数据并缓存,该操作代价比较重,主要用于在hive中修改了表的元数据,需要同步到impalad,例如create table/drop table/alter table add columns等
    
    -- 重新加载所有库中的所有表
    invalidate metadata 
    -- 重新加载指定的某个表
    invalidate metadata [table] 
    
    -- refresh是用于刷新某个表或者某个分区的数据信息,它会重用之前的表元数据,仅仅执行文件刷新操作,它能够检测到表中分区的增加和减少,主要用于表中元数据未修改,数据的修改,例如insert into、load data、alter table add partition、llter table drop partition等,如果直接修改表的hdfs文件(增加、删除或者重命名)也需要指定refresh刷新数据信息。
    -- 刷新某张表
    refresh [table];
    -- 刷新某个表的某个分区
    refresh [table] partition [partition]  
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一年又半

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值