0757-6.3.3-如何配置impala自動同步HMS元數據

作者:唐輝

文檔說明

在之前的文章中,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