ApsaraDB for SelectDB prend en charge les requêtes fédérées vers des sources de données externes via des catalogues. Cette rubrique explique comment connecter un cluster Hive à SelectDB à l'aide d'un catalogue Hive, afin d'interroger directement les données Hive sans avoir à les déplacer.
Cas d'utilisation
| Scénario | Description |
|---|---|
| Accélération des requêtes | Exécutez le moteur de requêtes distribué de SelectDB directement sur les données Hive, sans processus ETL. |
| Intégration des données | Lisez les données Hive et chargez-les dans des tables internes SelectDB à l'aide d'instructions INSERT INTO. |
Configurations prises en charge
| Dimension | Prise en charge |
|---|---|
| Versions de Hive | Hive 1, Hive 2, Hive 3 |
| Types de table | Tables gérées, tables externes, certaines vues Hive |
| Formats de métadonnées | Métadonnées Hive, Iceberg et Hudi stockées dans un metastore Hive |
| Mode d'accès | Lecture seule — SelectDB ne peut pas écrire dans des catalogues externes |
| Backends de stockage | HDFS (non-HA et HA), Object Storage Service (OSS) |
Prérequis
Avant de commencer, assurez-vous que :
Tous les nœuds de votre cluster Hive se trouvent dans le même VPC que l'instance SelectDB, ou vous avez établi une connectivité inter-VPC. Pour résoudre les échecs de connexion, consultez la rubrique Que faire si la connexion entre une instance ApsaraDB for SelectDB et une source de données échoue ?
Les adresses IP de tous les nœuds du cluster Hive ont été ajoutées à la liste d'autorisation d'adresses IP de l'instance SelectDB. Consultez la documentation Configurer une liste d'autorisation d'adresses IP.
Si le cluster Hive applique sa propre liste d'autorisation, ajoutez également les adresses IP du VPC de l'instance SelectDB à cette liste. Pour trouver l'adresse IP du VPC de l'instance SelectDB, consultez la FAQ Comment afficher les adresses IP du VPC auquel appartient mon instance ApsaraDB SelectDB ?
-
Si le cluster Hive utilise HDFS comme stockage, ouvrez les ports suivants pour permettre le transfert de données entre le cluster Hive et SelectDB :
Paramètre Port par défaut hive.metastore.uris9083 dfs.namenode.rpc-address8020 dfs.datanode.address9866 Vous maîtrisez les concepts et les opérations liés aux catalogues. Consultez la documentation Data lakehouse.
Environnement d'exemple
La procédure décrite dans cette rubrique utilise la configuration suivante. Remplacez les valeurs par les vôtres lorsque ces paramètres apparaissent.
| Paramètre | Valeur |
|---|---|
| Mode haute disponibilité (HA) | Non-HA |
| Stockage du cluster Hive | HDFS |
| Base de données source | test_db |
| Table source | test_t |
Préparer les données source
Connectez-vous au cluster Hive que vous souhaitez interroger.
-
Créez une base de données nommée
test_db.CREATE DATABASE IF NOT EXISTS test_db; -
Créez une table nommée
test_t.CREATE TABLE IF NOT EXISTS test_t ( id INT, name STRING, age INT ); -
Insérez des exemples de données.
INSERT INTO TABLE test_t VALUES (1, 'Alice', 25), (2, 'Bob', 30), (3, 'Charlie', 35), (4, 'David', 40), (5, 'Eve', 45);
Connecter un cluster Hive à SelectDB
Étape 1 : Se connecter à une instance ApsaraDB for SelectDB
Connectez-vous à votre instance SelectDB à l'aide d'un client MySQL. Consultez la documentation Se connecter à une instance ApsaraDB for SelectDB à l'aide d'un client MySQL.
Étape 2 : Créer un catalogue Hive
Créez un catalogue externe mappé à votre cluster Hive. SelectDB découvre automatiquement les bases de données et les tables du catalogue et mappe les types de colonnes Hive aux types SelectDB. Pour consulter le tableau complet de correspondance des types, reportez-vous à la section Mappages des types de données de colonne.
Sélectionnez la configuration correspondant à votre backend de stockage.
Hive basé sur HDFS (non-HA)
Utilisez cette configuration lorsque votre HDFS dispose d'un seul NameNode actif.
CREATE CATALOG hive_catalog PROPERTIES (
'type' = 'hms',
'hive.metastore.uris' = 'thrift://<metastore-host>:9083'
);
Exemple :
CREATE CATALOG hive_catalog PROPERTIES (
'type' = 'hms',
'hive.metastore.uris' = 'thrift://master-1-1.c-7fa25a1a****.cn-hangzhou.emr.aliyuncs.com:9083'
);
| Paramètre | Obligatoire | Description |
|---|---|---|
type |
Oui | Type de catalogue. Définissez la valeur sur hms. |
hive.metastore.uris |
Oui | URI du metastore Hive au format thrift://<host>:<port>. Port par défaut : 9083. Exécutez SET hive.metastore.uris sur un client Hive pour obtenir l'URI. |
Hive basé sur HDFS (HA)
Utilisez cette configuration lorsque votre HDFS utilise la haute disponibilité avec plusieurs NameNodes.
CREATE CATALOG <catalog_name> PROPERTIES (
'type' = 'hms',
'hive.metastore.uris' = 'thrift://<metastore-host>:9083',
'hadoop.username' = '<hadoop-username>',
'dfs.nameservices' = '<nameservice-id>',
'dfs.ha.namenodes.<nameservice-id>' = '<nn1>,<nn2>',
'dfs.namenode.rpc-address.<nameservice-id>.<nn1>' = '<host1>:<port1>',
'dfs.namenode.rpc-address.<nameservice-id>.<nn2>' = '<host2>:<port2>',
'dfs.client.failover.proxy.provider.<nameservice-id>' = '<dfs.client.failover.proxy.provider.your-nameservice>'
);
| Paramètre | Obligatoire | Description |
|---|---|---|
type |
Oui | Type de catalogue. Définissez la valeur sur hms. |
hive.metastore.uris |
Oui | URI du metastore Hive. Format : thrift://<host>:<port>. Port par défaut : 9083. |
hadoop.username |
Non | Nom d'utilisateur pour l'accès HDFS. |
dfs.nameservices |
Non | ID NameService. Doit correspondre à la valeur définie dans hdfs-site.xml. |
dfs.ha.namenodes.[ID NameService] |
Non | IDs des NameNodes. Doivent correspondre aux valeurs définies dans hdfs-site.xml. |
dfs.namenode.rpc-address.[ID NameService].[ID NameNode] |
Non | Adresse RPC de chaque NameNode. Doit correspondre aux valeurs définies dans hdfs-site.xml. |
dfs.client.failover.proxy.provider.[ID NameService] |
Non | Classe Java pour le basculement vers le NameNode actif. Utilisez org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider dans la plupart des cas. |
Hive basé sur OSS
Utilisez cette configuration lorsque les données Hive sont stockées dans Object Storage Service (OSS). La syntaxe est identique à celle de la variante HDFS ; seuls les paramètres de stockage diffèrent.
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" = "<your-access-key-id>",
"oss.secret_key" = "<your-access-key-secret>"
);
| Paramètre | Obligatoire | Description |
|---|---|---|
type |
Oui | Type de catalogue. Définissez la valeur sur hms. |
hive.metastore.uris |
Oui | URI du metastore Hive. Format : thrift://<host>:<port>. |
oss.endpoint |
Oui | Endpoint OSS de la région où vos données sont stockées. Consultez la documentation Régions et endpoints. |
oss.access_key |
Oui | AccessKey ID utilisé pour accéder à OSS. |
oss.secret_key |
Oui | AccessKey secret utilisé pour accéder à OSS. |
Étape 3 : Vérifier le catalogue
Confirmez que le catalogue a été créé avec succès.
SHOW CATALOGS;
Résultat attendu :
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
| 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 |
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
Étape 4 : Interroger les données Hive
Après la connexion, SelectDB utilise par défaut le catalogue interne. Basculez vers le catalogue Hive pour accéder aux données Hive.
Les deux styles de requête ci-dessous sont équivalents — utilisez celui qui correspond le mieux à votre flux de travail.
-- Style 1: Switch catalog, then use database and table
SWITCH hive_catalog;
USE test_db;
SELECT * FROM test_t;
-- Style 2: Use the fully qualified table name (no switch required)
SELECT * FROM hive_catalog.test_db.test_t;
Pour explorer le catalogue avant d'exécuter des requêtes :
SWITCH hive_catalog;
SHOW DATABASES; -- list all databases in the Hive catalog
USE test_db;
SHOW TABLES; -- list all tables in test_db
Après avoir basculé vers le catalogue externe, vous naviguez dans les bases de données et les tables de la même manière que dans le catalogue interne.
Migrer des données de Hive vers SelectDB
Une fois le catalogue Hive connecté, utilisez des instructions INSERT INTO pour migrer les données historiques de Hive vers des tables internes SelectDB. Consultez la documentation Importer des données à l'aide d'instructions INSERT INTO.
Mappages des types de données de colonne
SelectDB mappe automatiquement les types de colonnes Hive aux types SelectDB lors de la création d'un catalogue. Les mappages ci-dessous s'appliquent aux métadonnées Hive, Iceberg et Hudi stockées dans un metastore Hive.
Les types complexes peuvent être imbriqués. Par exemple :
array<map<string, int>>map<string, array<int>>struct<col1: array<int>, col2: map<int, date>>
| Type dans le metastore Hive | Type SelectDB | Remarque |
|---|---|---|
boolean |
boolean |
|
tinyint |
tinyint |
|
smallint |
smallint |
|
int |
int |
|
bigint |
bigint |
|
float |
float |
|
double |
double |
|
char |
char |
|
varchar |
varchar |
|
decimal |
decimal |
|
date |
date |
|
timestamp |
datetime |
|
array<type> |
array<type> |
Prend en charge l'imbrication, par exemple array<map<string, int>>. |
map<KeyType, ValueType> |
map<KeyType, ValueType> |
Prend en charge l'imbrication, par exemple map<string, array<int>>. |
struct<col1: Type1, col2: Type2, ...> |
struct<col1: Type1, col2: Type2, ...> |
Prend en charge l'imbrication, par exemple struct<col1: array<int>, col2: map<int, date>>. |
| Autre | non pris en charge |
Étapes suivantes
Data lakehouse — En savoir plus sur les catalogues externes et les concepts de requêtes fédérées.
Importer des données à l'aide d'instructions INSERT INTO — Déplacer les données Hive vers des tables internes SelectDB.