ApsaraDB for SelectDB はフェデレーテッドクエリをサポートしており、データレイク、データベース、リモートファイルなどの外部データソースを迅速に統合して、データ分析を簡素化および高速化できます。 このトピックでは、SelectDB がカタログを使用して Hive データソースを統合し、Hive データに対してフェデレーテッド分析を実行する方法について説明します。
前提条件
Hive クラスター内のすべてのノードが SelectDB インスタンスとネットワーク接続できることを確認してください。
Hive クラスター内のすべてのノードと SelectDB インスタンスが同じ仮想プライベートクラウド (VPC) 内にあること。 同じ VPC 内にない場合は、最初にネットワーク接続を確立する必要があります。 詳細については、「ApsaraDB for SelectDB インスタンスとデータソース間の接続確立に失敗した場合の対処方法」をご参照ください。
Hive クラスター内のすべてのノードの IP アドレスを SelectDB のホワイトリストに追加してください。 詳細については、「IP アドレスホワイトリストの設定」をご参照ください。
Hive クラスターにホワイトリストメカニズムがある場合は、SelectDB インスタンスが存在するネットワークの IP CIDR ブロックを Hive クラスターのホワイトリストに追加してください。
-
ご利用の SelectDB インスタンスが存在する VPC の IP 範囲を取得するには、「ApsaraDB for SelectDB インスタンスが配置されている VPC の IP CIDR ブロックを確認する方法」をご参照ください。
-
SelectDB インスタンスのパブリック IP アドレスを取得するには、そのパブリックエンドポイントSelectDB に対して
PINGコマンドを使用します。
-
Hive が HDFS 上に構築されている場合は、Hive と SelectDB 間のデータ転送のために次のポートが開いていることを確認してください。
hive.metastore.urisで指定されたポート。 デフォルトポートは 9083 です。dfs.namenode.rpc-addressで指定されたポート。 デフォルトポートは 8020 です。dfs.datanode.addressで指定されたポート。 デフォルトポートは 9866 です。
カタログとは何か、またその基本的な操作方法を理解しておいてください。 詳細については、「カタログ」をご参照ください。
考慮事項
Hive バージョン 1、2、3 をサポートしています。
マネージドテーブル、外部テーブル、および一部の Hive ビューをサポートしています。
Hive メタストアに保存されている Hive、Iceberg、Hudi のメタデータの検出をサポートしています。
現在、ApsaraDB for SelectDB は外部カタログ内のデータに対する読み取り操作のみをサポートしています。
サンプル環境
このトピックでは、Linux システムを例として使用します。 SelectDB では、HDFS 上に構築された Hive クラスター内の test_db.test_t に対してフェデレーテッドクエリを実行します。 例の値を、実際のシステムと環境に一致するものに置き換えてください。 サンプル環境は次のとおりです:
ユースケース:非 HA
Hive ストレージバックエンド:HDFS
ソースデータベース:test_db
ソーステーブル:test_t
ソースデータの準備
Hive クラスターにログインします。
test_db という名前のデータベースを作成します。
CREATE database if NOT EXISTS test_db;test_t という名前のテーブルを作成します。
CREATE TABLE IF NOT EXISTS test_t ( id INT, name STRING, age INT );テーブルにデータを挿入します。
-- データを挿入 INSERT INTO TABLE test_t VALUES (1, 'Alice', 25), (2, 'Bob', 30), (3, 'Charlie', 35), (4, 'David', 40), (5, 'Eve', 45);
操作手順
ステップ 1:インスタンスへの接続
SelectDB インスタンスに接続します。 手順については、「MySQL クライアントを使用した ApsaraDB for SelectDB インスタンスへの接続」をご参照ください。
ステップ 2:Hive の統合
SelectDB は、外部カタログを作成することで外部データソースを統合します。 ユースケースによって、必要なカタログプロパティが異なります。 ご使用の環境に合った構文とパラメーター値を選択してください。
カタログを作成すると、ApsaraDB for SelectDB はデータソースからデータベースとテーブルを自動的に同期します。 ApsaraDB for SelectDB は、異なるデータソースとテーブル形式の間で列をマッピングします。 Hive と SelectDB の間のタイプマッピングに慣れていない場合は、「列タイプのマッピング」をご参照ください。
HDFS 上の Hive
構文
CREATE CATALOG <catalog_name> PROPERTIES (
'type'='<type>',
'hive.metastore.uris' = '<hive.metastore.uris>',
'hadoop.username' = '<hadoop.username>',
'dfs.nameservices'='<your-nameservice>',
'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 | はい | カタログの名前。 |
type | はい | カタログタイプ。 このパラメーターを |
hive.metastore.uris | はい | Hive メタストアの URI。
|
HA シナリオ
パラメーター | 必須 | 説明 |
catalog_name | はい | カタログの名前。 |
type | はい | カタログタイプ。 このパラメーターを |
hive.metastore.uris | はい | Hive メタストアの URI。
|
hadoop.username | いいえ | HDFS のユーザー名。 |
dfs.nameservices | いいえ | ネームサービス名。 この値は、Hive 環境の hdfs-site.xml 設定ファイル内の |
dfs.ha.namenodes.your-nameservice | いいえ | NameNode ID のリスト。 この値は、Hive 環境の hdfs-site.xml 設定ファイル内の対応する値と一致する必要があります。 |
dfs.namenode.rpc-address.your-nameservice.[name node ID] | いいえ | NameNode の RPC アドレス。 アドレスの数は NameNode の数と同じである必要があり、アドレスは Hive 環境の hdfs-site.xml 設定ファイル内の対応する設定項目と一致する必要があります。 |
dfs.client.failover.proxy.provider.your-nameservice | いいえ | HDFS クライアントがアクティブな NameNode への接続に使用する Java クラス。 ほとんどの場合、値は |
非 HA シナリオの例
CREATE CATALOG hive_catalog PROPERTIES (
'type'='hms',
'hive.metastore.uris' = 'thrift://master-1-1.c-7fa25a1a****.cn-hangzhou.emr.aliyuncs.com:9083'
);Alibaba Cloud OSS 上の Hive
構文
構文は HDFS 上の Hive と同じですが、必要なパラメーターが異なります。
パラメーター
パラメーター | 必須 | 説明 |
type | はい | カタログタイプ。 このパラメーターを |
hive.metastore.uris | はい | Hive メタストアの URI。
|
oss.endpoint | はい | Object Storage Service (OSS) データへのアクセスに使用するエンドポイント。 エンドポイントの取得方法については、リージョンとエンドポイントをご参照ください。 |
oss.access_key | はい | OSS データへのアクセスに使用する |
oss.secret_key | はい | OSS データへのアクセスに使用する |
例
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"
);ステップ 3:カタログの表示
次のステートメントを実行して、カタログが正常に作成されたことを確認してください。
SHOW CATALOGS; -- カタログが正常に作成されたかどうかを確認します。+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
| 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 |
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+ステップ 4:Hive データの表示
外部カタログから Hive のデータベースとテーブルを表示します。
説明SelectDB インスタンスに接続した後、デフォルトの作業ディレクトリは内部カタログです。
ターゲットの外部カタログに切り替えます。
SWITCH hive_catalog;データを表示します。
ターゲットカタログに切り替えた後、内部カタログのデータにアクセスするのと同じ方法でデータにアクセスできます。 例:
データベースの一覧表示:
SHOW DATABASES;データベースへの切り替え:
USE test_db;データベース内のテーブルの一覧表示:
SHOW TABLES;テーブルデータのクエリ:
SELECT * FROM test_t;
内部カタログから Hive データを表示します。
-- hive_catalog の下の test_db データベース内の test_t テーブルからデータを表示します。 SELECT * FROM hive_catalog.test_db.test_t;
その他の操作:データ移行
データソースを統合した後、INSERT INTO ステートメントを使用して、Hive から SelectDB に履歴データを移行できます。 詳細については、「INSERT INTO」をご参照ください。
列タイプのマッピング
次の Hive メタストアタイプのマッピングは、Hive、Iceberg、Hudi など、Hive メタストアを使用するデータソースに適用されます。
Hive メタストアと SelectDB の一部の複雑なタイプは、ネストをサポートしています。
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 タイプ | SelectDB タイプ |
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, ...> |
その他 | サポート対象外 |