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更新元數據信息。
1
解決辦法
-- 在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]
————————————————
版權聲明:本文為CSDN博主「一年又半」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_34446614/article/details/114239747
