0757-6.3.3-如何配置impala自動同步HMS元數據
- 2020 年 4 月 7 日
- 筆記
作者:唐輝
文檔說明
在之前的文章中,Fayson 在《CDH6.3的新功能》 中提到Impala 的 Automatic Invalidate/Refresh Metadata 新功能,本文主要介紹如何配置Impala基於事件自動同步HMS元數據。
- 測試環境
1.CM和CDH版本為6.3.3
2.作業系統版本為RedHat 7.2
操作步驟
進入CM介面 > Hive > 配置 > 搜索 啟用資料庫中的存儲通知(英文介面搜索:Enable Stored Notifications in Database),並且勾選,注意一定要勾選,配置後面的配置不生效。資料庫通知的保留時間默認為2天,意味著如果事件通知沒有更新超過2天事件將會丟失
在 CM介面 > Hive > 配置 > 搜索 hive-site.xml 配置如下幾處
hive-site.xml 的 Hive Metastore Server 高級配置程式碼段(安全閥)
<property> <name>hive.metastore.notifications.add.thrift.objects</name> <value>true</value> </property> <property> <name>hive.metastore.alter.notifications.basic</name> <value>false</value> </property>
如果你想在使用Spark和其他應用程式將數據插入現有表和分區時會生成事件,需要在hive-site.xml 的 Hive 服務高級配置程式碼段(安全閥)以及hive-site.xml 的 Hive 客戶端高級配置程式碼段(安全閥)添加配置
<property> <name>hive.metastore.dml.events</name> <value>true</value> </property>
保存上述配置,並重啟Hive 是配置生效,可以在webui 介面確認參數是否生效
然後在CM > Impala > 配置 > 搜索 catalog 命令行參數 添加如下配置,注意前面為兩個英文中劃線符號。
--hms_event_polling_interval_s=2
該參數表示啟用hms 滾動事件功能並以秒為單位設置輪詢頻率,建議該值小於5秒,參數默認值為0 ,表示不啟用。配置該參數前需要確認hive-site.xml 的 Hive Metastore Server 高級配置程式碼段(安全閥)的配置已經生效,否則重啟impala 時,Catalog Server 將無法正常啟動。
驗證配置是否生效可以在Catalog Server WebUI 介面中 /varz 下查看
功能驗證
使用beeline 進入hive 中創建一個庫,並查看
[root@cdh1 ~]# beeline beeline> !connect jdbc:hive2://cdh2.hadoop.com:10000/ 0: jdbc:hive2://cdh2.hadoop.com:10000/> show databases; 0: jdbc:hive2://cdh2.hadoop.com:10000/> create database test; 0: jdbc:hive2://cdh2.hadoop.com:10000/> show databases;
在Impala 中查看,顯示已及時更新
[root@cdh1 ~]# impala-shell -i cdh1.hadoop.com -d default [cdh1.hadoop.com:21000] default> show databases;
create table測試
0: jdbc:hive2://cdh2.hadoop.com:10000/> use test; 0: jdbc:hive2://cdh2.hadoop.com:10000/> create table test1(a string); 0: jdbc:hive2://cdh2.hadoop.com:10000/> create table test1(a string); 0: jdbc:hive2://cdh2.hadoop.com:10000/> show tables;
在impala 中查看
0: jdbc:hive2://cdh2.hadoop.com:10000/> use test; 0: jdbc:hive2://cdh2.hadoop.com:10000/> create table test1(a string); 0: jdbc:hive2://cdh2.hadoop.com:10000/> create table test1(a string); 0: jdbc:hive2://cdh2.hadoop.com:10000/> show tables;
drop table 測試
0: jdbc:hive2://cdh2.hadoop.com:10000/> drop table test1; 0: jdbc:hive2://cdh2.hadoop.com:10000/> show tables;
在impala 中查看
[cdh1.hadoop.com:21000] test> show tables;
另外HMS 支援表單獨禁用impala 自動刷新元數據功能,但是impala 中不支援database 的單獨禁用該功能
如果 'impala.disableHmsSync'='true',表示事件將被忽略,並且不會與HMS同步。
如果設置 'impala.disableHmsSync'='false' 或者 impala.disableHmsSync 未設置,則啟用與HMS的自動同步,- -hms_event_polling_interval_s 全局標誌設置為非零。
0: jdbc:hive2://cdh2.hadoop.com:10000/> CREATE TABLE disabletest (s1 string ,s2 string) TBLPROPERTIES ('impala.disableHmsSync'='true');
單獨禁用表的自動更新元數據後在impala就無法查詢剛剛創建的表
文檔總結
在日常使用如Hive和Spark之類的工具來處理Hive表中的原始數據時,會生成新的HMS元數據(資料庫、表、分區)和文件系統元數據(現有分區/表中的新文件)。在以前的Impala版本中,為了獲取最新元數據資訊,Impala需要手動執行INVALIDATE 或者 REFRESH 命令。隨著impala 功能的不斷完善,impala 的元數據同步問題終於在impala3.2得到有效的解決,並且該配置在CDP7.0.3中默認已經集成。
參考文檔:
https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/impala_metadata.html