在 Kudu 中集成 Hive Metastore

在啓用 Kudu-HMS 集成之前,要確保 Kudu 和 HMS 現有表的視圖一致。這可能需要重命名Kudu表以符合Hive命名約束。在啓用與 Hive Metastore 集成之前應升級現有 Kudu 表。

  1. 準備升級

    在升級過程中,Kudu羣集仍然可用。Kudu 和 Hive Metastore 中的表可能會更改或重命名。
    可以使用以下命令記錄所有外部表並將其刪除。這減少了與 Kudu 表發生命名衝突,導致升級過程中出現錯誤。升級完成後,重新創建外部表。

    [root@node01 ~]# sudo -u kudu kudu hms list cdh01:7051,cdh02:7051,cdh03:7051
    
  2. 執行升級
    1. 運行 kudu hms precheck 工具檢查 Kudu 表名稱是否不同。如果未報告任何警告,則可以跳過第二步。
      [root@node01 ~]# sudo -u kudu kudu hms precheck cdh01:7051,cdh02:7051,cdh03:7051
      
    2. 如果 kudu hms precheck 工具有衝突,可以使用以下命令將它們重命名爲不區分大小寫的唯一名稱
      $ sudo -u kudu kudu table rename_table cdh01:7051,cdh02:7051,cdh03:7051 <conflicting_table_name> <new_table_name>
      
    3. 使用 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
      
    4. 使用 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
      
    5. 手動修復檢查工具無法自動修復的所有問題。
    6. 使用 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
      
    7. 使用 Impala Shell 重新創建在準備升級時刪除的所有外部表。
  3. 與 Hive Metastore 集成
    1. 在 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>
      
    2. 將 hms-plugin.jar 添加到 HMS 類路徑下。
    3. 重新啓動 HMS 服務。
    4. 在 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 匹配
    5. 重新啓動 Kudu 服務。

    注意:
    如果 Hive Metastore 使用了 Apache Sentry 配置了細粒度的授權並且啓用Sentry HDFS Sync功能時,Kudu 管理員需要能夠訪問和修改 HMS 爲 Kudu 創建的目錄。需要將 Kudu 管理員用戶添加到 Hive 服務用戶組中,usermod -aG hive kudu

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章