À partir de la version V2.2, Hologres prend en charge Hive Metastore (HMS) comme source de métadonnées pour les lacs de données construits sur Object Storage Service (OSS). Si votre lac de données s'exécute sur un cluster E-MapReduce (EMR) utilisant OSS ou OSS-HDFS comme couche de stockage, connectez Hologres à HMS pour interroger directement les données OSS via SQL, sans migration ni copie des données.
Prérequis
Avant de commencer, assurez-vous d'avoir :
Un service OSS activé. Consultez Démarrage rapide dans la console.
-
Un cluster de lac de données EMR avec des données de test chargées. Consultez Accès à OSS-HDFS depuis EMR Hive ou Spark et Créer un cluster. Le cluster doit répondre à toutes les conditions suivantes :
Version de Hive 3.1.3 ou ultérieure
Authentification Kerberos désactivée
Metadata défini sur Self-managed RDS ou Built-in MySQL
-
Une instance Hologres avec l'accélération du lac de données activée et une base de données créée. Consultez Acheter une instance Hologres et Créer une base de données.
Pour activer l'accélération du lac de données, accédez à la console Hologres. Dans la colonne Actions de l'instance cible, cliquez sur Lake Acceleration et confirmez.
-
Une connexion réseau entre Hologres et le cluster EMR. Étant donné que Hologres est déployé sur un réseau classique et qu'EMR s'exécute dans un cloud privé virtuel (VPC), un endpoint inversé est requis pour permettre la communication entre les deux services. Soumettez une demande de connexion réseau. L'équipe support Hologres vous guidera ensuite à travers les étapes suivantes :
Connectez-vous à la console VPC et créez un endpoint inversé. Consultez Accéder aux services Alibaba Cloud.
-
Pour le paramètre Type et saisissez le nom du service d'endpoint pour la région où se trouve votre cluster EMR :
Region
Endpoint service name
China (Beijing)
com.aliyuncs.privatelink.cn-beijing.epsrv-2zeokrydzjd6kx3cbwmbChina (Shanghai)
com.aliyuncs.privatelink.cn-shanghai.epsrv-uf61fvlfwta7f7dv9n3xChina (Zhangjiakou)
com.aliyuncs.privatelink.cn-zhangjiakou.epsrv-8vbno4k4wwvys0eg2swp
Si votre région n'est pas répertoriée, l'équipe Hologres créera un service d'endpoint et fournira le nom après soumission de votre demande. La connexion utilise une adresse IP. Si l'adresse IP du cluster EMR change, reconfigurez la connexion.
Limitations
Les instances secondaires Hologres en lecture seule ne prennent pas en charge l'accélération du lac de données.
Les commandes
UPDATE,DELETEetTRUNCATEne sont pas prises en charge sur les tables externes.Auto Load (mappage par lot des tables externes depuis HMS) n'est pas pris en charge.
Les clusters EMR avec authentification Kerberos activée ne sont pas pris en charge.
Connecter Hologres à HMS
Hologres propose deux méthodes pour se connecter à HMS. Choisissez celle qui correspond à la version de votre instance et au niveau de contrôle souhaité sur le mappage des colonnes.
Méthode 1 : base de données externe (recommandée). Nécessite Hologres V3.0 ou ultérieur. Une base de données externe mappe simultanément chaque base de données et table HMS vers une base de données externe, un schéma et une table externe dans Hologres, ce qui permet d'interroger les données avec un nom en trois parties au lieu de créer une table externe à la fois.
Méthode 2 : hive_fdw. Utilisez cette méthode sur Hologres V2.2 ou ultérieur mais antérieur à V3.0, ou lorsque vous devez mapper un sous-ensemble de colonnes ou renommer des tables.
Méthode 1 : Utiliser une base de données externe (recommandée)
-
Connectez-vous à votre instance Hologres et créez la base de données externe. Cette étape requiert des autorisations de superutilisateur.
Pour la syntaxe complète, consultez CREATE EXTERNAL DATABASE.
CREATE EXTERNAL DATABASE <EXTERNAL_DATABASE_NAME> owner '<ACCOUNT_NAME>' metastore_type 'hms' catalog_type 'hive' hive_metastore_uris 'thrift://<HIVE_METASTORE_IP>:<PORT>' metadata_cache_ttl_sec '600' metadata_cache_update_interval_sec '60' metadata_refresh_interval_sec '7200' oss_endpoint 'oss-<REGION_ID>-internal.aliyuncs.com' table_count_limitation_per_schema '2000' comment '<EXTERNAL_DATABASE_COMMENT>';Parameter
Description
Example
external_database_nameNom de la base de données externe.
catalog_hiveownerCompte Hologres propriétaire de la base de données externe.
p4_<ACCOUNT_ID>metastore_typeType de service de métadonnées. Définissez sur hms pour Hive Metastore.
hmscatalog_typeType de catalogue. Définissez sur hive pour un catalogue Hive.
hivehive_metastore_urisURI du Hive Metastore. Format : thrift://<HIVE_METASTORE_IP>:<PORT>. Le port par défaut est 9083.
thrift://10.0.0.1:9083metadata_cache_ttl_secFacultatif. Durée de validité des métadonnées mises en cache, en secondes.
600 (default)metadata_cache_update_interval_secFacultatif. Intervalle entre les mises à jour du cache de métadonnées, en secondes.
60 (default)metadata_refresh_interval_secFacultatif. Intervalle entre les actualisations complètes des métadonnées, en secondes.
7200 (default)oss_endpointEndpoint OSS. Pour OSS natif, utilisez l'endpoint interne pour de meilleures performances.
oss-cn-beijing-internal.aliyuncs.comtable_count_limitation_per_schemaFacultatif. Nombre maximal de tables chargées par schéma.
2000 (default)commentFacultatif. Description de la base de données externe.
holo-emr-hiveLes intervalles de cache et la limite de tables ci-dessus sont des valeurs d'exemple. Ajustez-les en fonction de la fréquence de mise à jour de vos métadonnées et du nombre de tables dans HMS.
-
(Facultatif) Créez un mappage utilisateur.
Un mappage utilisateur fournit les identifiants qu'un compte Hologres donné utilise pour lire depuis OSS. Pour plus de détails, consultez CREATE USER MAPPING.
CREATE USER MAPPING FOR <ACCOUNT_NAME> EXTERNAL DATABASE <EXTERNAL_DATABASE_NAME> OPTIONS ( oss_access_id '<ACCESS_KEY_ID>', oss_access_key '<ACCESS_KEY_SECRET>' ); -
Interrogez les tables externes.
Une fois la base de données externe créée, référencez n'importe quelle table avec un nom en trois parties : base de données externe, base de données Hive, table Hive.
Table non partitionnée :
SELECT * FROM <EXTERNAL_DATABASE_NAME>.<HIVE_DATABASE_NAME>.<HIVE_TABLE_NAME>;Table partitionnée : filtrez sur la clé de partition dans la clause WHERE.
SELECT * FROM <EXTERNAL_DATABASE_NAME>.<HIVE_DATABASE_NAME>.<HIVE_PARTITION_TABLE_NAME> WHERE <PARTITION_KEY> = '<PARTITION_VALUE>';
Méthode 2 : Utiliser hive_fdw
Étape 1 : Créer l'extension
Exécutez la commande SQL suivante pour installer le wrapper de données étrangères (FDW) hive_fdw. Cette opération requiert des autorisations de superutilisateur et ne doit être exécutée qu'une seule fois par base de données.
CREATE EXTENSION IF NOT EXISTS hive_fdw;
Étape 2 : Créer un serveur étranger
Créez un serveur étranger pointant vers votre instance HMS et votre stockage OSS.
Avant d'exécuter la commande, collectez les valeurs suivantes :
Adresse IP HMS : Dans la console E-MapReduce, cliquez sur Other Endpoint Services pour votre cluster. Dans l'onglet Node Management, recherchez l'Node Management du nœud maître.
Endpoint OSS : Dans la console OSS, ouvrez la page de présentation du bucket et vérifiez la zone Internal IP.
CREATE SERVER IF NOT EXISTS <SERVER_NAME> FOREIGN DATA WRAPPER hive_fdw
OPTIONS (
hive_metastore_uris 'thrift://<HIVE_METASTORE_IP>:<PORT>',
oss_endpoint '<OSS_ENDPOINT>'
);
|
Parameter |
Required |
Description |
Example |
|
|
Yes |
Nom personnalisé pour le serveur étranger. |
|
|
|
Yes |
URI du Hive Metastore. Format : |
|
|
|
Yes |
Endpoint OSS. Pour OSS natif, utilisez l'endpoint interne pour de meilleures performances. Pour OSS-HDFS, seul l'endpoint interne est pris en charge. |
Voir les exemples ci-dessous |
Pour oss_endpoint, choisissez en fonction de votre type de stockage :
-
OSS natif : Utilisez l'endpoint interne.
oss-cn-shanghai-internal.aliyuncs.com -
OSS-HDFS : Seul l'accès via le réseau interne est pris en charge.
<BUCKET_NAME>.cn-beijing.oss-dls.aliyuncs.com
Étape 3 : (Facultatif) Créer un mappage utilisateur
Un mappage utilisateur contrôle quels comptes Hologres peuvent accéder aux données externes via un serveur étranger. Par exemple, le propriétaire d'un serveur étranger peut accorder à un utilisateur Resource Access Management (RAM) l'accès aux données OSS.
Pour plus de détails sur la syntaxe CREATE USER MAPPING, consultez la documentation PostgreSQL.
-- Grant the current user access to the foreign server
CREATE USER MAPPING FOR current_user SERVER <SERVER_NAME> OPTIONS (
dlf_access_id '<ACCESS_KEY_ID>',
dlf_access_key '<ACCESS_KEY_SECRET>',
oss_access_id '<ACCESS_KEY_ID>',
oss_access_key '<ACCESS_KEY_SECRET>'
);
-- Grant a RAM user (123xxx) access to the foreign server
CREATE USER MAPPING FOR "p4_123xxx" SERVER <SERVER_NAME> OPTIONS (
dlf_access_id '<ACCESS_KEY_ID>',
dlf_access_key '<ACCESS_KEY_SECRET>',
oss_access_id '<ACCESS_KEY_ID>',
oss_access_key '<ACCESS_KEY_SECRET>'
);
-- Remove user mappings
DROP USER MAPPING FOR CURRENT_USER SERVER <SERVER_NAME>;
DROP USER MAPPING FOR "p4_123xxx" SERVER <SERVER_NAME>;
Étape 4 : Créer une table externe
Hologres propose deux commandes pour créer des tables externes :
|
Command |
Best for |
|
Un petit nombre de tables, ou lorsque vous devez mapper un sous-ensemble de colonnes ou attribuer un nom de table personnalisé. |
|
|
Mappage par lot de plusieurs tables depuis un schéma externe. |
Hologres prend en charge les tables partitionnées dans OSS. Les types de clés de partition pris en charge sont TEXT, VARCHAR et INT.
Avec CREATE FOREIGN TABLE : définissez les champs de partition comme des colonnes régulières, car cette commande mappe le schéma sans stocker les données.
Avec IMPORT FOREIGN SCHEMA : le système gère automatiquement le mappage des champs.
Si un nom de table externe entre en conflit avec une table interne Hologres existante,IMPORT FOREIGN SCHEMAignore cette table. UtilisezCREATE FOREIGN TABLEpour la mapper avec un nom différent.
-- Create a single foreign table
CREATE FOREIGN TABLE <HOLO_SCHEMA_NAME>.<TABLE_NAME>
(
column_name data_type
[, ...]
)
SERVER <SERVER_NAME>
OPTIONS (
schema_name '<HIVE_DATABASE_NAME>',
table_name '<HIVE_TABLE_NAME>'
);
-- Import multiple foreign tables in batch
IMPORT FOREIGN SCHEMA <HIVE_DATABASE_NAME>
[
{ LIMIT TO | EXCEPT }
( table_name [, ...] )
]
FROM SERVER <SERVER_NAME>
INTO <HOLO_SCHEMA_NAME>
OPTIONS (
if_table_exist 'update',
if_unsupported_type 'error'
);
Étape 5 : Interroger la table externe
Après avoir créé la table externe, interrogez-la directement pour lire les données depuis OSS.
Table non partitionnée :
SELECT * FROM <HOLO_SCHEMA_NAME>.<TABLE_NAME>;
Table partitionnée :
SELECT * FROM <HOLO_SCHEMA_NAME>.<PARTITION_TABLE_NAME>
WHERE <PARTITION_KEY> = '<PARTITION_VALUE>';