在啓用 Kudu-HMS 集成之前,要確保 Kudu 和 HMS 現有表的視圖一致。這可能需要重命名Kudu表以符合Hive命名約束。在啓用與 Hive Metastore 集成之前應升級現有 Kudu 表。
-
準備升級
在升級過程中,Kudu羣集仍然可用。Kudu 和 Hive Metastore 中的表可能會更改或重命名。
可以使用以下命令記錄所有外部表並將其刪除。這減少了與 Kudu 表發生命名衝突,導致升級過程中出現錯誤。升級完成後,重新創建外部表。[root@node01 ~]# sudo -u kudu kudu hms list cdh01:7051,cdh02:7051,cdh03:7051
-
執行升級
- 運行 kudu hms precheck 工具檢查 Kudu 表名稱是否不同。如果未報告任何警告,則可以跳過第二步。
[root@node01 ~]# sudo -u kudu kudu hms precheck cdh01:7051,cdh02:7051,cdh03:7051
- 如果 kudu hms precheck 工具有衝突,可以使用以下命令將它們重命名爲不區分大小寫的唯一名稱
$ sudo -u kudu kudu table rename_table cdh01:7051,cdh02:7051,cdh03:7051 <conflicting_table_name> <new_table_name>
- 使用 kudu hms check 工具檢查目錄是否一致,如無,跳至第七步。
[root@node01 ~]# sudo -u kudu kudu hms check cdh01:7051,cdh02:7051,cdh03:7051 --hive_metastore_uris=thrift://hive-metastore:9083 --ignore_other_clusters=false
- 使用 kudu hms fix 解決可自動修復的問題
[root@node01 ~]# sudo -u kudu kudu hms fix cdh01:7051,cdh02:7051,cdh03:7051 --hive_metastore_uris=thrift://hive-metastore:90 --dryrun=true --ignore_other_clusters=false
- 手動修復檢查工具無法自動修復的所有問題。
- 使用 kudu hms fix 工具自動修復所有剩餘的問題
[root@node01 ~]# sudo -u kudu kudu hms fix cdh01:7051,cdh02:7051,cdh03:7051 --hive_metastore_uris=thrift://hive-metastore:90 --dryrun=true --ignore_other_clusters=false
- 使用 Impala Shell 重新創建在準備升級時刪除的所有外部表。
- 運行 kudu hms precheck 工具檢查 Kudu 表名稱是否不同。如果未報告任何警告,則可以跳過第二步。
-
與 Hive Metastore 集成
- 在 hive-site.xml 中添加如下配置
<property> <name>hive.metastore.transactional.event.listeners</name> <value> org.apache.hive.hcatalog.listener.DbNotificationListener, org.apache.kudu.hive.metastore.KuduMetastorePlugin </value> </property> <property> <name>hive.metastore.disallow.incompatible.col.type.changes</name> <value>false</value> </property> <property> <name>hive.metastore.notifications.add.thrift.objects</name> <value>true</value> </property>
- 將 hms-plugin.jar 添加到 HMS 類路徑下。
- 重新啓動 HMS 服務。
- 在 Kudu 中配置以下屬性
當--hive_metastore_uris=<HMS Thrift URI(s)> --hive_metastore_sasl_enabled=<value of the Hive Metastore's hive.metastore.sasl.enabled configuration>
--hive_metastore_sasl_enabled
設置爲 true 時,--hive_metastore_kerberos_principal
必須與 Hive Metastore 中hive.metastore.kerberos.principal
匹配 - 重新啓動 Kudu 服務。
注意:
如果 Hive Metastore 使用了 Apache Sentry 配置了細粒度的授權並且啓用Sentry HDFS Sync功能時,Kudu 管理員需要能夠訪問和修改 HMS 爲 Kudu 創建的目錄。需要將 Kudu 管理員用戶添加到 Hive 服務用戶組中,usermod -aG hive kudu
。 - 在 hive-site.xml 中添加如下配置