全部產品
Search
文件中心

ApsaraDB for SelectDB:Hive資料來源

更新時間:Sep 21, 2024

ApsaraDB for SelectDB支援聯邦查詢,能夠快速整合資料湖、資料庫、遠端檔案等外部資料源,為您提供簡便而高效的資料分析體驗。本文介紹SelectDB如何使用Catalog整合Hive資料來源,對Hive資料來源進行聯邦分析。

前提條件

  • 已將Hive叢集所有節點IP添加至SelectDB的白名單。具體操作,請參見設定白名單

  • 如果您的Hive是基於HDFS構建的,確保HDFS開放了以下連接埠,用於Hive與SelectDB之間的傳輸資料。

    • hive.metastore.uris中指定的連接埠,預設為9083。

    • dfs.namenode.rpc-address中指定的連接埠,預設為8020。

    • dfs.datanode.address中指定的連接埠,預設為9866。

  • 瞭解什麼是Catalog,以及Catalog的基本操作。更多詳情,請參見湖倉一體

注意事項

  • 支援Hive1、Hive2、Hive3版本。

  • 支援Managed Table、External Table以及部分Hive View。

  • 支援識別Hive Metastore中儲存的Hive、Iceberg、Hudi中繼資料。

  • 目前,雲資料庫 SelectDB 版對External Catalog中的資料只支援讀操作。

樣本環境

本樣本以Linux系統為例,在SelectDB中,使用聯邦技術查詢基於HDFS構建的Hive中test_db.test_t資料。在實際使用中,請根據您的系統和使用環境修改對應參數。樣本環境如下:

  • 業務情境:非HA

  • 來源資料Hive的構建類型:HDFS

  • 來源資料庫:test_db

  • 來源資料表:test_t

來源資料準備

  1. 登入目標來源資料Hive。

  2. 建立資料庫testdb。

    CREATE database if NOT EXISTS test_db;
  3. 建立表Hive_t。

    CREATE TABLE IF NOT EXISTS test_t (
        id INT,
        name STRING,
        age INT
    );
  4. 插入資料。

    -- 插入資料
    INSERT INTO TABLE test_t VALUES
    (1, 'Alice', 25),
    (2, 'Bob', 30),
    (3, 'Charlie', 35),
    (4, 'David', 40),
    (5, 'Eve', 45);

操作步驟

步驟一:串連執行個體

串連SelectDB執行個體。具體操作,請參見通過MySQL用戶端串連雲資料庫SelectDB版執行個體

步驟二:整合Hive

SelectDB通過建立External Catalog整合外部資料源,不同的業務情境,Catalog的配置參數不同,根據您的業務情境,選擇合適的文法以及參數配置。

建立Catalog後,雲資料庫 SelectDB 版會自動同步資料目錄的資料庫和表。針對不同的資料目錄和資料表格式,雲資料庫 SelectDB 版會進行列與列之間的關係映射。如果您還不清楚Hive與SelectDB的列映射關係,請參見下述列類型映射章節。

Hive基於HDFS構建

文法
CREATE CATALOG <catalog_name> PROPERTIES (
    'type'='<type>',
    'hive.metastore.uris' = '<hive.metastore.uris>',
    'hadoop.username' = '<hadoop.username>',
    'dfs.nameservices'='<hadoop.username>',
    'dfs.ha.namenodes.your-nameservice'='<dfs.ha.namenodes.your-nameservice>',
    'dfs.namenode.rpc-address.your-nameservice.nn1'='<dfs.namenode.rpc-address.your-nameservice.nn1>',
    'dfs.namenode.rpc-address.your-nameservice.nn2'='<dfs.namenode.rpc-address.your-nameservice.nn2>',
    'dfs.client.failover.proxy.provider.your-nameservice'='<dfs.client.failover.proxy.provider.your-nameservice>'
);
參數說明

非HA情境

參數

必選

說明

catalog_name

Catalog的名稱。

type

Catalog類型。固定填寫hms。

hive.metastore.uris

Hive MetaStore的URI。

  • 格式為thrift://<Hive MetaStore的IP地址>:<連接埠號碼>

  • 連接埠號碼預設為9083。

  • 可通過SET hive.metastore.uris在Hive終端執行擷取。

HA情境

參數

必選

說明

catalog_name

Catalog的名稱。

type

Catalog類型。固定填寫hms。

hive.metastore.uris

Hive MetaStore的URI。

  • 格式為thrift://<Hive MetaStore的IP地址>:<連接埠號碼>

  • 連接埠號碼預設為9083。

  • 可通過SET hive.metastore.uris在Hive終端執行擷取。

hadoop.username

HDFS使用者名稱。

dfs.nameservices

Name Service名稱,與已有Hive環境依賴的hdfs-site.xml設定檔裡dfs.nameservices的值保持一致。

dfs.ha.namenodes.[nameservice ID]

NameNode的ID列表,與已有Hive環境依賴的hdfs-site.xml設定檔裡的相應配置項的值保持一致。

dfs.namenode.rpc-address.[nameservice ID].[name node ID]

NameNode的RPC地址,數量與NameNode數量相同,與已有Hive環境依賴的hdfs-site.xml設定檔裡的相應配置項的值保持一致。

dfs.client.failover.proxy.provider.[nameservice ID]

HDFS用戶端串連活躍NameNode的Java類,通常是org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

非HA情境樣本
CREATE CATALOG hive_catalog PROPERTIES (
    'type'='hms',
    'hive.metastore.uris' = 'thrift://master-1-1.c-7fa25a1a****.cn-hangzhou.emr.aliyuncs.com:9083'
);

Hive基於阿里雲OSS構建

文法

此處文法同Hive基於HDFS構建一致,只是必選參數不同。

參數說明

參數

必選

說明

type

Catalog類型。固定填寫hms。

hive.metastore.uris

Hive MetaStore的URI。

  • 格式為thrift://<Hive MetaStore的IP地址>:<連接埠號碼>

  • 連接埠號碼預設為9083。

  • 可通過SET hive.metastore.uris在Hive終端執行擷取。

oss.endpoint

訪問OSS資料的Endpoint。如何擷取,請參見訪問網域名稱和資料中心

oss.access_key

訪問OSS資料的Accesskey ID

oss.secret_key

訪問OSS資料的AccessKey Secret

樣本

CREATE CATALOG hive_catalog PROPERTIES (
    "type"="hms",
    "hive.metastore.uris" = "thrift://172.0.0.1:9083",
    "oss.endpoint" = "oss-cn-beijing.aliyuncs.com",
    "oss.access_key" = "ak",
    "oss.secret_key" = "sk"
);

步驟三:查看Catalog

您可以通過以下語句,查看Catalog建立是否成功。

SHOW CATALOGS; --查看CATALOG是否建立成功
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
| CatalogId    | CatalogName  | Type     | IsCurrent | CreateTime              | LastUpdateTime      | Comment                |
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
| 436009309195 | hive_catalog | hms      |           | 2024-07-19 17:09:08.058 | 2024-07-19 18:04:37 |                        |
|            0 | internal     | internal | yes       | UNRECORDED              | NULL                | Doris internal catalog |
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+

步驟四:查看Hive庫表資料

  • 在目標External Catalog目錄下查看Hive庫表資料。

    說明

    串連SelectDB執行個體後,預設操作目錄為Internal Catalog。

    1. 切換目錄至目標External Catalog。

      SWITCH hive_catalog;
    2. 查看資料。

      完成目標目錄切換後,您可以像使用Internal Catalog一樣,對External Catalog的資料進行查看和訪問。例如以下操作:

      • 查看資料庫列表:SHOW DATABASES;

      • 切換資料庫:USE test_db;

      • 查看資料庫表列表:SHOW TABLES;

      • 查看錶資料:SELECT * FROM test_t;

  • 在Internal Catalog目錄下查看Iceberg庫表資料。

    --查看hive_catalog目錄下,資料庫test_db中表test_t的資料。
    SELECT * FROM hive_catalog.test_db.test_t;

更多操作:遷移資料

完成資料來源整合後,如果你需要將Hive的歷史資料移轉至SelectDB中,您可通過內聯文法進行歷史資料移轉,具體操作,請參見Insert Into

列類型映射

說明
  • 以下HMS Type適用於Hive、Iceberg和Hudi。

  • 以下部分複雜結構的HMS Type和SelectDB Type支援嵌套

    • array<type>:嵌套樣本:array<map<string, int>>

    • map<KeyType, ValueType>:嵌套樣本:map<string, array<int>>

    • struct<col1: Type1, col2: Type2, ...>:嵌套樣本:struct<col1: array<int>, col2: map<int, date>>

HMS Type

SelectDB Type

boolean

boolean

tinyint

tinyint

smallint

smallint

int

int

bigint

bigint

date

date

timestamp

datetime

float

float

double

double

char

char

varchar

varchar

decimal

decimal

array<type>

array<type>

map<KeyType, ValueType>

map<KeyType, ValueType>

struct<col1: Type1, col2: Type2, ...>

struct<col1: Type1, col2: Type2, ...>

other

unsupported