全部產品
Search
文件中心

Realtime Compute for Apache Flink:管理Hive Catalog

更新時間:Aug 03, 2024

配置Hive Catalog後,您可以在Flink開發控制台直接讀取Hive中繼資料,無需再手動註冊Hive表,提高作業開發的效率且保證資料的正確性。本文為您介紹如何配置Hive中繼資料、建立和使用Hive Catalog等。

背景資訊

您可以將Hive Catalog設定檔和Hadoop依賴存放至Object Storage Service控制台指定目錄後,再在Flink開發控制台上配置Hive Catalog功能。配置成功後,可在Flink開發控制台上直接使用DML建立商務邏輯,擷取Hive中表的中繼資料資訊,無需再使用DDL語句聲明相應的表資訊。Hive Catalog中的表可以作為流作業和批作業的源表或結果表。

Flink支援Hive MetaStore和阿里雲資料湖構建(Data Lake Formation,簡稱DLF)作為Hive Catalog的中繼資料中心。本文將從以下方面為您介紹如何管理Hive Catalog:

前提條件

在使用Hive MetaStore或阿里雲DLF作為Hive Catalog中繼資料中心前,需要完成以下配置:

  • 使用Hive MetaStore作為Hive Catalog中繼資料中心

    要求

    說明

    已在Hive Metastore側開啟了Hive Metastore服務。

    相關命令如下:

    • 開啟Hive Metastore服務命令:hive --service metastore

    • 查詢Hive Metastore服務是否已開啟:netstat -ln | grep 9083

      其中9083是Hive Metastore的預設連接埠號碼。如果您在hive-site.xml配置了其他的連接埠號碼,則需要將9083改為對應的連接埠號碼。

    已在Hive Metastore側配置了白名單,使得Flink可以訪問Hive Metastore。

    Flink網段的擷取方法請參見設定白名單,在Hive Metastore側配置白名單的方法請參見添加安全性群組規則

  • 使用阿里雲DLF作為Hive Catalog中繼資料中心

    已開通阿里雲DLF。

使用限制

  • Hive Metastore不支援Kerberos鑒權。

  • 支援自建Hive Metastore。

  • 由於從Flink社區從1.16版本開始廢棄了對Hive 1.x,2.1.x,2.2.x版本的支援,所以僅VVR 6.x 版本支援Hive 1.x,2.1.x,2.2.x。

  • Realtime Compute引擎VVR 4.0.11及以上版本支援DLF作為Hive Catalog的中繼資料管理中心。

    說明

    如果Hive版本為3.1.0+,對於VVR 6.0.x版本,只有 VVR 6.0.7及以上版本才支援DLF作為Hive Catalog的中繼資料管理中心。

  • 如果Hive Catalog是以DLF作為中繼資料管理中心,則僅計算引擎VVR 8.0.6及以上版本支援在該Catalog中建立非Hive表。

  • 僅VVR 8.0.6及以上版本才支援寫入OSS-HDFS。

配置Hive中繼資料

  1. 連通Hadoop叢集和Flink的VPC。

    您可以使用雲解析PrivateZone產品連通Hadoop叢集和Flink的VPC,詳情請參見解析器(Resolver)。網路連通後,Flink就可以使用Hadoop叢集的設定檔訪問Hadoop叢集。

  2. 在OSS控制台建立目錄,並將Hive設定檔和Hadoop依賴上傳至目標路徑。

    1. 登入OSS管理主控台

    2. 單擊Bucket列表

    3. 單擊目標Bucket名稱。

    4. oss://${bucket}/artifacts/namespaces/${ns}/路徑下,建立${hms}目錄。

      在OSS上建立目錄的操作詳情,請參見建立目錄。目標路徑中的變數含義如下表所示:

      目錄

      說明

      ${bucket}

      您Flink使用的Bucket名稱。

      ${ns}

      您要使用Hive Catalog功能的Flink專案空間名稱。

      ${hms}

      建議與下文建立的Hive Catalog名稱保持一致。

      說明

      開通Flink工作空間後,系統會自動在您指定的Bucket下建立/artifacts/namespaces/${ns}/目錄來儲存JAR包等資料。如果您在OSS控制台沒有看到如上目錄,則需要在Flink開發控制台的資源管理頁面,手動上傳一個檔案來觸發目錄建立。

    5. oss://${bucket}/artifacts/namespaces/${ns}/${hms}路徑下,建立hive-conf-dir和hadoop-conf-dir目錄。在OSS上建立目錄的操作請參見建立目錄

      其中hive-conf-dir和hadoop-conf-dir目錄中存放的檔案詳情如下:

      • oss://${bucket}/artifacts/namespaces/${ns}/${hms}/hive-conf-dir/用於存放Hive設定檔hive-site.xml。

      • oss://${bucket}/artifacts/namespaces/${ns}/${hms}/hadoop-conf-dir/用於存放Hadoop設定檔,包括core-site.xml、hdfs-site.xml、yarn-site.xml和mapred-site.xml。

      建立成功後,您可以在檔案清單頁面中,查看建立的目錄及檔案,並複製OSS連結資訊。

    6. 將您的Hive設定檔(hive-site.xml)上傳到hive-conf-dir目錄下。上傳檔案的操作請參見上傳檔案

      Hive Catalog支援Hive MetaStore和阿里雲DLF作為中繼資料管理中心,相關配置說明詳情如下:

      • Hive MetaStore

        需要檢查下設定檔hive-site.xml中hive.metastore.uris參數配置是否符合下列要求。

        <property>
            <name>hive.metastore.uris</name>
            <value>thrift://xx.yy.zz.mm:9083</value>
            <description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
         </property>

        其中xx.yy.zz.mm為Hive的內網IP或者公網IP。

        說明

        如果您將hive.metastore.uris填寫為hostname,則需要佈建網域名解析服務。否則Flink開發控制台遠端存取Hive時,hive.metastore.uris參數值會被解析失敗並報錯UnknownHostException。佈建網域名解析服務詳情請參見添加PrivateZone解析記錄

      • 阿里雲DLF

        需要在設定檔hive-site.xml中添加如下配置項,以便Hive Catalog可以訪問DLF。

        說明

        如果您的hive-site.xml包含了dlf.catalog.akMode的配置項,則需要將該配置項刪掉,否則將無法訪問DLF。

        <property>
          <name>hive.imetastoreclient.factory.class</name>
          <value>com.aliyun.datalake.metastore.hive2.DlfMetaStoreClientFactory</value>
        </property>
        <property>
          <name>dlf.catalog.uid</name>
          <value>${YOUR_DLF_CATALOG_UID}</value>
        </property>
        <property>
          <name>dlf.catalog.endpoint</name>
          <value>${YOUR_DLF_ENDPOINT}</value>
        </property>
        <property>
          <name>dlf.catalog.region</name>
          <value>${YOUR_DLF_CATALOG_REGION}</value>
        </property>
        <property>
          <name>dlf.catalog.accessKeyId</name>
          <value>${YOUR_ACCESS_KEY_ID}</value>
        </property>
        <property>
          <name>dlf.catalog.accessKeySecret</name>
          <value>${YOUR_ACCESS_KEY_SECRET}</value>
        </property>

        如果您的Hive表被儲存在OSS中,則還需要添加如下配置。

        <property>
          <name>fs.oss.impl.disable.cache</name>
          <value>true</value>
        </property>
        <property>
          <name>fs.oss.impl</name>
          <value>org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem</value>
        </property>
        <property>
          <name>hive.metastore.warehouse.dir</name>
          <value>${YOUR_OSS_WAREHOUSE_DIR}</value>
        </property>
        <property>
          <name>fs.oss.endpoint</name>
          <value>${YOUR_OSS_ENDPOINT}</value>
        </property>
        <property>
          <name>fs.oss.accessKeyId</name>
          <value>${YOUR_ACCESS_KEY_ID}</value>
        </property>
        <property>
          <name>fs.oss.accessKeySecret</name>
          <value>${YOUR_ACCESS_KEY_SECRET}</value>
        </property>
        <property>
          <name>fs.defaultFS</name>
          <value>oss://${YOUR_OSS_BUCKET_DOMIN}</value>
        </property>

        如果您的Hive表被儲存在OSS-HDFS中,則還需要添加如下配置。

        <property>
          <name>fs.jindo.impl</name>
          <value>com.aliyun.jindodata.jindo.JindoFileSystem</value>
        </property>
        <property>
          <name>hive.metastore.warehouse.dir</name>
          <value>${YOUR_OSS_WAREHOUSE_DIR}</value>
        </property>
        <property>
          <name>fs.oss.endpoint</name>
          <value>${YOUR_OSS_ENDPOINT}</value>
        </property>
        <property>
          <name>fs.oss.accessKeyId</name>
          <value>${YOUR_ACCESS_KEY_ID}</value>
        </property>
        <property>
          <name>fs.oss.accessKeySecret</name>
          <value>${YOUR_ACCESS_KEY_SECRET}</value>
        </property>
        <property>
          <name>fs.defaultFS</name>
          <value>oss://${YOUR_OSS_HDFS_BUCKET_DOMIN}</value>
        </property>

        其中涉及的參數解釋如下表所示。

        參數

        說明

        備忘

        dlf.catalog.uid

        阿里雲帳號的帳號ID。

        帳號資訊,請通過使用者資訊頁面擷取。

        dlf.catalog.endpoint

        DLF服務的Endpoint。

        詳情請參見已開通的地區和訪問網域名稱

        說明
        • 推薦您為dlf.endpoint參數配置DLF的VPC Endpoint。例如,如果您選擇的地區為cn-hangzhou地區,則dlf.endpoint參數需要配置為dlf-vpc.cn-hangzhou.aliyuncs.com。

        • 如果您需要跨VPC訪問DLF,則請參見如何訪問跨VPC的其他服務?

        dlf.catalog.region

        DLF服務的地區名。

        詳情請參見已開通的地區和訪問網域名稱

        說明

        請和dlf.endpoint選擇的地區保持一致。

        dlf.catalog.accessKeyIdfs.oss.accessKeyId

        阿里雲帳號的Access Key。

        擷取方法請參見擷取AccessKey

        dlf.catalog.accessKeySecretfs.oss.accessKeySecret

        阿里雲帳號的Access Secret。

        擷取方法請參見擷取AccessKey

        fs.oss.endpoint

        阿里雲Object Storage Service的網域名稱。

        詳情請參見訪問網域名稱和資料中心

        hive.metastore.warehouse.dir

        表資料存放的路徑。

        無。

        fs.defaultFS

        表資料預設存放的檔案系統。

        如果是寫OSS-HDFS,請確保該值為目標Bucket對應HDFS服務的網域名稱,例如oss://oss-hdfs-bucket.cn-hangzhou.oss-dls.aliyuncs.com/

    7. 將以下設定檔上傳到hadoop-conf-dir目錄。上傳檔案的操作請參見上傳檔案

      • hive-site.xml

      • core-site.xml

      • hdfs-site.xml

      • mapred-site.xml

      • 其他檔案,例如Hive作業使用的壓縮包。

建立Hive Catalog

完成前面的Hive中繼資料配置後,您可以建立Hive Catalog,支援UI與SQL命令兩種方式配置Hive Catalog,推薦使用UI方式配置Hive Catalog。

UI方式

  1. 進入中繼資料管理頁面。

    1. 登入Realtime Compute控制台,單擊目標工作空間操作列下的控制台

    2. 單擊中繼資料管理

  2. 單擊建立Catalog,在建立Catalog頁面,選擇Hive後,單擊下一步

  3. 填寫參數配置資訊。

    重要

    Catalog建立完成後,以下配置資訊都不支援修改。如果需要修改,需要刪除掉已建立的Catalog,重新進行建立。

    image

    參數

    說明

    catalog name

    Hive Catalog名稱。

    hive-version

    Hive Metastore版本號碼。

    Flink僅支援Hive 2.0.0~2.3.9,3.1.0 ~ 3.1.3版本。在建立Hive Catalog時,hive-version取值填寫詳情如下:

    • 對於Hive 2.0.x、2.1.x版本,hive-version需要指定為2.2.0。

    • 對於Hive 2.2.x、2.3.x、3.1.x版本,hive-version需要分別指定為2.2.0、2.3.6、3.1.2。

    default-database

    預設資料庫名稱。

    hive-conf-dir

    存放Hive設定檔的目錄。您需要提前手動建立hive-conf-dir的目錄,詳情請參見配置Hive中繼資料

    hadoop-conf-dir

    存放Hadoop依賴的目錄。您需要提前手動建立hadoop-conf-dir的目錄,詳情請參見配置Hive中繼資料

  4. 單擊確定。

  5. 在左側中繼資料地區,查看建立的Catalog。

SQL方式

  1. 查詢指令碼文本編輯地區,輸入以下命令。

    CREATE CATALOG ${HMS Name} WITH (
        'type' = 'hive',
        'default-database' = 'default',
        'hive-version' = '<hive-version>',
        'hive-conf-dir' = '<hive-conf-dir>',
        'hadoop-conf-dir' = '<hadoop-conf-dir>'
    );

    參數

    說明

    ${HMS Name}

    Hive Catalog名稱。

    type

    Connector類型,固定值為hive。

    default-database

    預設資料庫名稱。

    hive-version

    Hive Metastore版本號碼。

    Flink僅支援Hive 2.0.0~2.3.9,3.1.0 ~ 3.1.3版本。在建立Hive Catalog時,hive-version取值填寫詳情如下:

    • 對於Hive 2.0.x、2.1.x版本,hive-version需要指定為2.2.0。

    • 對於Hive 2.2.x、2.3.x、3.1.x版本,hive-version需要分別指定為2.2.0、2.3.6、3.1.2。

    hive-conf-dir

    存放Hive設定檔的目錄。您需要提前手動建立hive-conf-dir的目錄,詳情請參見配置Hive中繼資料

    hadoop-conf-dir

    存放Hadoop依賴的目錄。您需要提前手動建立hadoop-conf-dir的目錄,詳情請參見配置Hive中繼資料

  2. 選中建立Catalog的代碼後,單擊左側程式碼數上的運行

    Hive Catalog配置完成後,您就可以在作業中引用Hive Catalog表資訊,作為結果表和維表,無需聲明表的DDL。Hive Catalog表名稱格式為${hive-catalog-name}.${hive-db-name}.${hive-table-name}

    此外,如果您想停用Hive Catalog服務,詳情請參見刪除Hive Catalog

使用Hive Catalog

建立Hive表

UI方式

  1. 進入中繼資料管理頁面。

    1. 登入Realtime Compute控制台,單擊目標工作空間操作列下的控制台

    2. 單擊中繼資料管理

  2. 單擊目標Catalog名稱對應操作列的查看

  3. 單擊目標資料庫名稱對應操作列的查看

  4. 單擊建立表

  5. 使用內建連接器串連頁簽,選擇連接器後,單擊下一步

  6. 填寫建表語句並配置相關參數資訊。程式碼範例如下。

    CREATE TABLE `${catalog_name}`.`${db_name}`.`${table_name}` (
      id INT,
      name STRING
    ) WITH (
      'connector' = 'hive'
    );
  7. 單擊確定

SQL命令方式

  1. 查詢指令碼文本編輯地區,輸入以下命令。

    CREATE TABLE `${catalog_name}`.`${db_name}`.`${table_name}` (
      id INT,
      name STRING
    ) WITH (
      'connector' = 'hive'
    );
  2. 選中建表語句,單擊左側程式碼數上的運行

image

樣本如下:

-- 在Catalog flinkexporthive下的flinkhive資料庫中建立表格flink_hive_test。
CREATE TABLE `flinkexporthive`.`flinkhive`.`flink_hive_test` (
  id INT,
  name STRING
) WITH (
  'connector' = 'hive'
);

修改Hive表

查詢指令碼文本編輯地區,輸入以下命令。

-- HIVE表增加欄位。
ALTER TABLE `${catalog_name}`.`${db_name}`.`${table_name}` 
ADD column type-column;

-- HIVE表刪除欄位。
ALTER TABLE `${catalog_name}`.`${db_name}`.`${table_name}` 
DROP column;

樣本如下:

-- HIVE表增加欄位color。
ALTER TABLE `flinkexporthive`.`flinkhive`.`flink_hive_test` 
ADD color STRING;

-- HIVE表刪除欄位color。
ALTER TABLE `flinkexporthive`.`flinkhive`.`flink_hive_test` 
DROP color;

從Hive表中讀取資料

INSERT INTO ${other_sink_table}
SELECT ...
FROM `${catalog_name}`.`${db_name}`.`${table_name}`;

寫入結果資料至Hive表

INSERT INTO `${catalog_name}`.`${db_name}`.`${table_name}`
SELECT ... 
FROM ${other_source_table};

刪除Hive表

UI方式

  1. 進入中繼資料管理頁面。

    1. 登入Realtime Compute控制台,單擊目標工作空間操作列下的控制台

    2. 單擊中繼資料管理

  2. 中繼資料列表中依次單擊Catalog名稱、資料庫名稱、表名稱。

  3. 在表詳情頁面,單擊刪除表

  4. 在刪除對話方塊中,單擊確定

SQL命令方式

查詢指令碼文本編輯地區,輸入以下命令。

-- 刪除HIVE表。
DROP TABLE `${catalog_name}`.`${db_name}`.`${table_name}`;

樣本如下:

-- 刪除HIVE表。
DROP TABLE `flinkexporthive`.`flinkhive`.`flink_hive_test`;

查看Hive Catalog

  1. 進入中繼資料管理頁面。

    1. 登入Realtime Compute控制台

    2. 單擊目標工作空間操作列下的控制台

    3. 單擊中繼資料管理

  2. Catalog列表頁面,查看Catalog名稱類型

    說明

    如果您需要查看Catalog下的資料庫和表,請單擊操作列下的查看

刪除Hive Catalog

警告

刪除Hive Catalog不會影響已啟動並執行作業,但對未上線或者需要暫停恢複的作業,均產生影響,請您謹慎操作。

UI方式

  1. 進入中繼資料管理頁面。

    1. 登入Realtime Compute控制台,單擊目標工作空間操作列下的控制台

    2. 單擊中繼資料管理

  2. Catalog列表頁面,單擊目標Catalog名稱對應操作列的刪除

  3. 在彈出的提示頁面中,單擊刪除

  4. 左側中繼資料地區下,查看目標Catalog是否已刪除。

SQL命令方式

  1. 查詢指令碼文本編輯地區,輸入以下命令。

    DROP CATALOG ${HMS Name};

    其中,HMS Name為您要刪除的在Flink開發控制台上顯示的Hive Catalog名稱。

  2. 選中刪除Catalog的命令,滑鼠右鍵選擇運行

  3. 在左側中繼資料地區,查看目標Catalog是否已刪除。