Connectez l'intégration des données de DataWorks à Apache Hive pour une synchronisation bidirectionnelle des données hors ligne. Cette rubrique explique le fonctionnement de la lecture et de l'écriture, les versions Hive prises en charge, ainsi que la configuration d'une source de données et des tâches de synchronisation.
Opérations prises en charge
| Opération | Synchronisation de table unique | Synchronisation de base de données complète |
|---|---|---|
| Lecture (Hive comme source) | Oui | Oui |
| Écriture (Hive comme destination) | Oui | Non |
Fonctionnement
Les plug-ins Hive Reader et Hive Writer utilisent Hive Metastore pour accéder aux métadonnées des tables, notamment le chemin de stockage des fichiers du système de fichiers distribués Hadoop (HDFS), le format de fichier et le séparateur.
Lecture
Deux modes de lecture sont disponibles. Choisissez celui qui correspond à vos besoins en matière de filtrage.
| Mode | Fonctionnement | Prend en charge le filtre WHERE | Performances |
|---|---|---|---|
hdfs |
Lit directement les données de la table à partir des fichiers HDFS | Non | Supérieures — contourne le moteur de requête |
jdbc |
Se connecte à HiveServer2 via un client JDBC Hive | Oui | Inférieures — peut déclencher une tâche MapReduce |
Écriture
Le plug-in Hive Writer écrit les données dans des fichiers HDFS, puis exécute une instruction LOAD DATA SQL via un client JDBC Hive pour charger les données dans la table Hive cible. La logique sous-jacente est identique à celle du plug-in HDFS Writer : les paramètres de HDFS Writer peuvent être configurés dans Hive Writer et sont transmis directement.
Versions prises en charge
Versions standard : 0.8.0, 0.8.1, 0.9.0, 0.10.0, 0.11.0, 0.12.0, 0.13.0, 0.13.1, 0.14.0, 1.0.0, 1.0.1, 1.1.0, 1.1.1, 1.2.0, 1.2.1, 1.2.2, 2.0.0, 2.0.1, 2.1.0, 2.1.1, 2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.3.5, 2.3.6, 2.3.7, 3.0.0, 3.1.0, 3.1.1, 3.1.2, 3.1.3
Versions CDH (versions sélectionnées) : de 0.8.1-cdh4.0.0 à 3.1.1-cdh7.1.1, y compris CDH 4.x, CDH 5.x (jusqu'à 5.16.99) et les variantes CDH 6.x/7.x.
Limites
| Limite | Détail |
|---|---|
| Groupes de ressources pris en charge | Groupes de ressources serverless (recommandé) et groupes de ressources exclusifs pour l'intégration des données |
| Formats de fichiers lisibles | TextFile, ORCFile ou ParquetFile |
| Authentification | Kerberos et SSL. Si aucune authentification n'est requise, sélectionnez No Authentication pour Authentication Options lors de l'ajout de la source de données |
| Vues Hive | Non prises en charge en mode de lecture HDFS |
| Caractère générique de partition multiniveau | Le caractère générique * est pris en charge uniquement pour les partitions à un seul niveau |
Fichiers temporaires pendant les tâches de synchronisation
Les tâches de synchronisation hors ligne génèrent des fichiers temporaires sur le serveur HDFS. Ces fichiers sont automatiquement supprimés une fois la tâche terminée. Surveillez le nombre de fichiers dans le répertoire HDFS pour éviter que le système de fichiers ne devienne indisponible.
Le paramètre dfs.namenode.fs-limits.max-directory-items contrôle le nombre maximal de fichiers ou de répertoires qu'un seul répertoire HDFS peut contenir. La valeur par défaut est 1 048 576 et la plage va de 1 à 6 400 000. Pour éviter d'atteindre cette limite, augmentez la valeur de ce paramètre ou supprimez les fichiers inutiles.
Kerberos avec principals distincts
Si HiveServer2 et Hive Metastore ont tous deux Kerberos activé mais utilisent des principals différents, ajoutez les éléments suivants aux paramètres d'extension :
{
"hive.metastore.kerberos.principal": "<your-metastore-principal>"
}
Types de champs pris en charge
Les types de données Hive suivants sont pris en charge pour les lectures hors ligne.
| Catégorie | Types de données Hive |
|---|---|
| Chaîne | CHAR, VARCHAR, STRING |
| Entier | TINYINT, SMALLINT, INT, INTEGER, BIGINT |
| Virgule flottante | FLOAT, DOUBLE, DECIMAL |
| Date et heure | TIMESTAMP, DATE |
| Booléen | BOOLEAN |
Prérequis
Avant de configurer une source de données Hive, effectuez les étapes de configuration correspondant à votre mode de déploiement.
Mode instance Alibaba Cloud
Sélectionnez une Access Identity disposant des autorisations OSS nécessaires pour les tables que vous souhaitez synchroniser. Les identités prises en charge sont Alibaba Cloud Account, RAM User et RAM Role.
Le test de connectivité ne vérifie pas les autorisations de lecture et d'écriture des données. Des autorisations insuffisantes entraîneront l'échec des tâches de synchronisation.
Mode chaîne de connexion
Configuration DLF
Si votre source de données Hive provient d'EMR et utilise DLF (Data Lake Formation) pour la gestion des métadonnées, ajoutez les éléments suivants au champ Extension Parameters :
{"dlf.catalog.id" : "my_catalog_xxxx"}
Remplacez my_catalog_xxxx par la valeur de dlf.catalog.id issue de votre configuration EMR Hive.
Configuration haute disponibilité (HA)
Si le cluster EMR Hive a la haute disponibilité (HA) activée, activez le High-availability Mode et configurez les paramètres HA dans Extension Parameters . Obtenez les valeurs de configuration depuis la console EMR en accédant au cluster cible et en cliquant sur Cluster Services dans la colonne Actions .
{
"dfs.nameservices": "testDfs",
"dfs.ha.namenodes.testDfs": "namenode1,namenode2",
"dfs.namenode.rpc-address.testDfs.namenode1": "",
"dfs.namenode.rpc-address.testDfs.namenode2": "",
"dfs.client.failover.proxy.provider.testDfs": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
"fs.oss.accessKeyId": "<yourAccessKeyId>",
"fs.oss.accessKeySecret": "<yourAccessKeySecret>",
"fs.oss.endpoint": "oss-cn-<yourRegion>-internal.aliyuncs.com"
}
Les trois derniers champs OSS ( fs.oss.* ) sont requis uniquement si le stockage sous-jacent est OSS.
Configuration de table externe OSS
Si le stockage sous-jacent est OSS :
Définissez defaultFS avec le préfixe
oss://, par exempleoss://bucketName.-
Pour les tables externes OSS, ajoutez les éléments suivants à Extension Parameters :
{ "fs.oss.accessKeyId": "<yourAccessKeyId>", "fs.oss.accessKeySecret": "<yourAccessKeySecret>", "fs.oss.endpoint": "oss-cn-<yourRegion>-internal.aliyuncs.com" } -
Pour les tables externes OSS-HDFS, utilisez plutôt le format de point de terminaison OSS-HDFS :
{ "fs.oss.accessKeyId": "<yourAccessKeyId>", "fs.oss.accessKeySecret": "<yourAccessKeySecret>", "fs.oss.endpoint": "cn-<yourRegion>.oss-dls.aliyuncs.com" }
Mode CDH
Enregistrez le cluster CDH auprès de DataWorks avant de configurer une source de données Hive en mode CDH.
Créer une source de données
Créez une source de données Hive dans DataWorks avant de développer des tâches de synchronisation. Pour la procédure complète, consultez Gestion des sources de données. Les descriptions des paramètres s'affichent sous forme d'indications contextuelles sur la page de configuration.
Les tableaux suivants décrivent les paramètres spécifiques à chaque valeur de Authentication Options .
Authentification Kerberos
| Paramètre | Description |
|---|---|
| Fichier keytab | Le fichier .keytab généré lors de l'enregistrement d'un principal de service dans l'environnement Kerberos. |
| Fichier conf | Le fichier de configuration Kerberos. Les fichiers principaux sont krb5.conf (paramètres du client et de la bibliothèque : valeurs globales par défaut, configurations de domaine, mappages de domaine, journalisation) et kdc.conf (paramètres du serveur Key Distribution Center : emplacement de la base de données, emplacement du fichier journal). |
| Principal | L'entité d'identité — un utilisateur ou un service — dotée d'un nom unique et d'une clé de chiffrement associée. Format utilisateur : username@REALM . Format service : service/hostname@REALM . |
Authentification SSL
| Paramètre | Description |
|---|---|
| Fichier de certificat Truststore | Le fichier de certificat Truststore généré lorsque l'authentification SSL est activée, tel que truststore.jks . |
| Mot de passe Truststore | Le mot de passe du fichier de certificat Truststore. |
| Fichier de certificat Keystore | Le fichier de certificat Keystore généré lorsque l'authentification SSL est activée, tel que keystore.jks . |
| Mot de passe Keystore | Le mot de passe du fichier de certificat Keystore. |
Développer une tâche de synchronisation
Configurer une tâche de synchronisation hors ligne pour une table unique
Interface sans code : Configurer une tâche dans l'interface sans code
Éditeur de code : Configurer une tâche dans l'éditeur de code. Pour la référence complète des paramètres et des exemples de scripts, consultez la Référence des scripts ci-dessous.
Configurer une tâche de lecture hors ligne pour une base de données complète
Consultez Tâche de synchronisation hors ligne pour une base de données entière.
Référence des scripts
Utilisez les exemples de scripts et les tableaux de paramètres suivants lors de la configuration des tâches de synchronisation dans l'éditeur de code. Pour le format général des scripts, consultez Configurer une tâche dans l'éditeur de code.
Exemples de scripts Reader
Deux modes de lecture sont disponibles. Tous les exemples utilisent "stepType": "hive" pour l'étape de lecture.
Lecture via des fichiers HDFS (plus rapide ; aucun filtrage par clause WHERE ; les vues ne sont pas prises en charge)
{
"type": "job",
"steps": [
{
"stepType": "hive",
"parameter": {
"datasource": "hive_not_ha_****",
"table": "part_table_1",
"readMode": "hdfs",
"partition": "pt1=a,pt2=b,pt3=c",
"column": ["id", "pt2", "pt1"],
"fileSystemUsername": "hdfs",
"hivePartitionColumn": [
{"type": "string", "value": "partition name 1"},
{"type": "string", "value": "partition name 2"}
],
"successOnNoFile": true
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "hive",
"parameter": {},
"name": "Writer",
"category": "writer"
}
],
"version": "2.0",
"order": {"hops": [{"from": "Reader", "to": "Writer"}]},
"setting": {
"errorLimit": {"record": ""},
"speed": {
"concurrent": 2,
"throttle": true,
"mbps": "12"
}
}
}
Lecture via Hive JDBC (prend en charge la clause WHERE et les requêtes SQL ; peut déclencher MapReduce)
{
"type": "job",
"steps": [
{
"stepType": "hive",
"parameter": {
"datasource": "hive_not_ha_****",
"table": "part_table_1",
"readMode": "jdbc",
"querySql": "select id,name,age from part_table_1 where pt2='B'",
"column": ["id", "name", "age"],
"where": "",
"session": ["mapred.task.timeout=600000"]
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "hive",
"parameter": {},
"name": "Writer",
"category": "writer"
}
],
"version": "2.0",
"order": {"hops": [{"from": "Reader", "to": "Writer"}]},
"setting": {
"errorLimit": {"record": ""},
"speed": {
"concurrent": 2,
"throttle": true,
"mbps": "12"
}
}
}
Paramètres Reader
| Paramètre | Obligatoire | Description |
|---|---|---|
datasource |
Oui | Nom de la source de données. Doit correspondre au nom enregistré. |
table |
Oui | Table à lire. Sensible à la casse. |
column |
Oui | Colonnes à lire, par exemple ["id", "name"] . Ne peut pas être vide. Prend en charge le découpage des colonnes, la réorganisation, les colonnes de clé de partition et les constantes. |
readMode |
Non | Mode de lecture : hdfs pour lire directement les fichiers HDFS, ou jdbc pour lire via Hive JDBC. |
partition |
Non | Filtre de partition pour les tables partitionnées. Prend en charge * comme caractère générique uniquement pour les partitions à un seul niveau (pas pour les partitions multiniveaux). Non requis pour les tables non partitionnées ou en mode JDBC. |
querySql |
Non | Requête SQL à utiliser en mode JDBC, par exemple "SELECT id, name FROM table WHERE pt='2024-01-01'" . |
where |
Non | Clause WHERE pour le filtrage des données en mode JDBC. |
session |
Non | Configuration Hive au niveau de la session pour les lectures JDBC, par exemple ["SET hive.exec.parallel=true"] . |
fileSystemUsername |
Non | Utilisateur HDFS pour les lectures en mode HDFS. Par défaut, il s'agit de l'utilisateur défini sur la page de la source de données. Si la connexion anonyme est configurée, la valeur par défaut est le compte admin . Définissez ce paramètre en cas de problème d'autorisation. |
hivePartitionColumn |
Non | Valeurs des champs de partition à synchroniser vers la destination en aval. Basculez vers l'éditeur de code pour configurer. |
successOnNoFile |
Non | En mode HDFS, indique si la tâche s'exécute normalement lorsque le répertoire HDFS est vide. |
Exemple de script Writer
{
"type": "job",
"steps": [
{
"stepType": "hive",
"parameter": {},
"name": "Reader",
"category": "reader"
},
{
"stepType": "hive",
"parameter": {
"datasource": "hive_ha_shanghai",
"table": "partitiontable2",
"partition": "year=a,month=b,day=c",
"column": ["id", "name", "age"],
"writeMode": "append",
"fileSystemUsername": "hdfs"
},
"name": "Writer",
"category": "writer"
}
],
"version": "2.0",
"order": {"hops": [{"from": "Reader", "to": "Writer"}]},
"setting": {
"errorLimit": {"record": ""},
"speed": {
"concurrent": 2,
"throttle": true,
"mbps": "12"
}
}
}
Paramètres Writer
| Paramètre | Obligatoire | Description |
|---|---|---|
datasource |
Oui | Nom de la source de données. Doit correspondre au nom enregistré. |
table |
Oui | Table Hive dans laquelle écrire. Sensible à la casse. |
column |
Oui | Colonnes à écrire, par exemple ["id", "name"] . Ne peut pas être vide. La réorganisation des colonnes n'est pas prise en charge par défaut ; utilisez enableColumnExchange pour l'activer pour le format Text. |
writeMode |
Oui | Contrôle le comportement de LOAD DATA INPATH après l'écriture sur HDFS. Valeurs autorisées : truncate (efface les données existantes avant le chargement), append (conserve les données existantes) ou toute autre valeur (écrit uniquement sur HDFS, sans chargement dans la table Hive). Il s'agit d'un paramètre à haut risque : vérifiez le répertoire d'écriture et le comportement attendu avant utilisation. |
hiveConfig |
Oui | Paramètres de connexion Hive pour l'opération LOAD DATA . Configurez soit hiveCommand (chemin complet vers le client Hive, utilisé avec hive -e ), soit jdbcUrl + username + password (accès Hive JDBC). Accepte également les paramètres avancés du client HDFS. |
partition |
Non | Partition pour les tables partitionnées. Requis lors de l'écriture dans une table partitionnée. |
fileSystemUsername |
Non | Utilisateur HDFS pour les opérations d'écriture. Par défaut, il s'agit de l'utilisateur défini sur la page de la source de données. Si la connexion anonyme est configurée, la valeur par défaut est le compte admin . |
enableColumnExchange |
Non | Définissez sur true pour activer la réorganisation des colonnes. Pris en charge uniquement pour le format Text. |
nullFormat |
Non | Définit quelles valeurs de chaîne sont traitées comme nulles. Par exemple, "nullFormat": "null" interprète la chaîne null comme une valeur nulle. Notez que la chaîne "null" est distincte d'une valeur nulle réelle. |