Le service OSS-HDFS (service JindoFS) est une solution de stockage de lac de données native du cloud. Une source de données OSS-HDFS offre un canal bidirectionnel pour lire et écrire dans OSS-HDFS. Cette rubrique décrit les capacités de synchronisation des données que DataWorks propose pour OSS-HDFS.
Fonctionnalités prises en charge
| Fonctionnalité | Prise en charge |
|---|---|
| Lecture hors ligne | Oui |
| Écriture hors ligne | Oui |
| Écriture en temps réel | Oui |
Limitations
Lecture hors ligne
La connexion réseau entre un groupe de ressources et OSS-HDFS peut s'avérer complexe. Pour exécuter des tâches de synchronisation de données, utilisez un groupe de ressources Serverless (recommandé) ou un groupe de ressources dédié pour Data Integration. Assurez-vous que votre groupe de ressources peut accéder à OSS-HDFS via le réseau.
OSS-HDFS Reader prend en charge les éléments suivants :
Les fichiers aux formats texte, CSV, ORC et Parquet. Le contenu du fichier doit former une table logique à deux dimensions.
La lecture de plusieurs types de données et de constantes de colonne.
Les lectures récursives ainsi que les caractères génériques
*et?.Les lectures simultanées depuis plusieurs fichiers. Le nombre réel de threads concurrents correspond à la valeur la plus faible entre le nombre de fichiers à lire et le paramètre
concurrent.
En raison de l'algorithme interne de découpage des fichiers uniques, OSS-HDFS Reader ne prend pas en charge les lectures simultanées multithread sur un seul fichier.
Écriture hors ligne
OSS-HDFS Writer prend uniquement en charge les formats texte, ORC et Parquet. Le contenu du fichier doit former une table logique à deux dimensions.
Pour les fichiers texte, veillez à ce que le délimiteur de champ utilisé lors de l'écriture corresponde à celui défini lors de la création de la table Hive. Cela garantit que les données écrites dans OSS-HDFS correspondent correctement aux champs de la table Hive.
Écriture en temps réel
Prend en charge les écritures en temps réel.
Prend en charge les écritures en temps réel pour la version 0.14.x du format Hudi.
Types de champs pris en charge
Lecture hors ligne
OSS-HDFS Reader convertit les types de données issus des formats ParquetFile, ORCFile, TextFile et CsvFile vers les types internes pris en charge par Data Integration.
| Catégorie de type | Types de données OSS-HDFS |
|---|---|
| Entier | TINYINT, SMALLINT, INT, BIGINT |
| Nombre à virgule flottante | FLOAT, DOUBLE, DECIMAL |
| Chaîne | STRING, CHAR, VARCHAR |
| Date et heure | DATE, TIMESTAMP |
| Booléen | BOOLEAN |
Les exemples suivants illustrent les représentations des types internes :
LONG : données entières dans un fichier OSS-HDFS, par exemple 123456789.
DOUBLE : données à virgule flottante dans un fichier OSS-HDFS, par exemple 3.1415.
BOOLEAN : données booléennes dans un fichier OSS-HDFS, telles que true ou false. La casse n'est pas prise en compte.
DATE : données de date et d'heure dans un fichier OSS-HDFS, par exemple 2014-12-31 00:00:00.
Écriture hors ligne
OSS-HDFS Writer écrit des fichiers aux formats TextFile, ORCFile et ParquetFile dans un chemin spécifié du système de fichiers OSS-HDFS.
| Catégorie de type | Types de données OSS-HDFS |
|---|---|
| Entier | TINYINT, SMALLINT, INT, BIGINT |
| Nombre à virgule flottante | FLOAT, DOUBLE |
| Chaîne | CHAR, VARCHAR, STRING |
| Booléen | BOOLEAN |
| Date et heure | DATE, TIMESTAMP |
Ajouter une source de données
Avant de développer une tâche de synchronisation dans DataWorks, ajoutez la source de données requise en suivant les instructions indiquées dans la section Gestion des sources de données. Les descriptions des paramètres sont disponibles dans la console DataWorks lors de l'ajout d'une source de données.
Développer une tâche de synchronisation de données
Configurer une tâche de synchronisation hors ligne pour une seule table
Pour obtenir des instructions détaillées, consultez les rubriques Configurer une tâche dans l'interface sans code et Configurer une tâche dans l'éditeur de code.
Pour consulter la liste complète des paramètres et un exemple de script, reportez-vous à la section Annexe : Exemples de scripts et descriptions des paramètres.
Configurer une tâche de synchronisation en temps réel pour une seule table
Consultez les rubriques Configurer la synchronisation incrémentielle en temps réel pour une seule table et Configurer une tâche de synchronisation en temps réel dans DataStudio.
Configurer une tâche de synchronisation complète et incrémentielle en temps réel pour une base de données entière
Reportez-vous à la rubrique Configurer une tâche de synchronisation en temps réel pour une base de données entière.
Annexe : Exemples de scripts et descriptions des paramètres
Exemple de script pour Reader
Tous les paramètres respectent le format de script unifié requis par l'éditeur de code. Pour plus de détails sur le format, consultez la rubrique Configurer une tâche dans l'éditeur de code.
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "oss_hdfs",
"parameter": {
"path": "",
"datasource": "",
"column": [
{
"index": 0,
"type": "string"
},
{
"index": 1,
"type": "long"
},
{
"index": 2,
"type": "double"
},
{
"index": 3,
"type": "boolean"
},
{
"format": "yyyy-MM-dd HH:mm:ss",
"index": 4,
"type": "date"
}
],
"fieldDelimiter": ",",
"encoding": "UTF-8",
"fileFormat": ""
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "stream",
"parameter": {},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": ""
},
"speed": {
"concurrent": 3,
"throttle": true,
"mbps": "12"
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
Paramètres du script Reader
| Paramètre | Description | Obligatoire | Valeur par défaut |
|---|---|---|---|
path |
Chemin du fichier ou du répertoire à lire. Trois modes d'entrée sont pris en charge : OPTION 1 : Fichier unique — OSS-HDFS Reader utilise un seul thread pour lire le fichier. OPTION 2 : Plusieurs fichiers — OSS-HDFS Reader lit les fichiers de manière concurrente. Le nombre réel de threads correspond à la valeur la plus faible entre le nombre de fichiers et le paramètre concurrent. Utilisez des modèles regex simples tels que /hadoop/data_201704*, ou utilisez des paramètres de planification pour les noms de fichiers basés sur l'heure. OPTION 3 : Chemin avec caractères génériques — OSS-HDFS Reader parcourt les fichiers correspondants. La spécification de / permet de lire tous les fichiers du répertoire racine. Seuls les caractères génériques * et ? sont pris en charge. Tous les fichiers d'une même tâche de synchronisation sont traités comme une seule table de données ; assurez-vous que tous les fichiers partagent le même schéma. La paire AccessKey configurée dans la source de données doit disposer des autorisations de lecture sur le chemin OSS-HDFS correspondant. |
Oui | Aucune |
fileFormat |
Type de fichier. Valeurs valides : text, orc, csv, parquet. OSS-HDFS Reader détecte automatiquement le type de fichier et applique la politique de lecture correspondante. Avant le début de la synchronisation, il vérifie que tous les fichiers du chemin spécifié correspondent à la valeur de fileFormat. La tâche échoue en cas d'incompatibilité. |
Oui | Aucune |
column |
Liste des champs à lire. Définissez cette valeur sur ["*"] pour lire toutes les colonnes en tant que STRING. Pour spécifier des colonnes individuelles, indiquez le type et soit l'index (lecture à partir du fichier de données, en commençant par 0), soit la value (génère une colonne constante sans lire le fichier). Une seule des valeurs index ou value peut être définie par entrée de colonne. |
Oui | Aucune |
fieldDelimiter |
Délimiteur de champ pour la lecture des données TextFile. Non requis pour les fichiers ORC ou Parquet. | Non | , |
encoding |
Encodage du fichier. | Non | utf-8 |
nullFormat |
Chaîne à traiter comme une valeur nulle. Par exemple, définir nullFormat: "null" amène Data Integration à traiter la chaîne source null comme un champ nul. |
Non | Aucune |
compress |
Format de compression. Valeurs valides : gzip, bzip2, snappy. |
Non | Aucune |
Exemple de script pour Writer
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "stream",
"parameter": {},
"name": "Reader",
"category": "reader"
},
{
"stepType": "oss_hdfs",
"parameter": {
"path": "",
"fileName": "",
"compress": "",
"datasource": "",
"column": [
{
"name": "col1",
"type": "string"
},
{
"name": "col2",
"type": "int"
},
{
"name": "col3",
"type": "double"
},
{
"name": "col4",
"type": "boolean"
},
{
"name": "col5",
"type": "date"
}
],
"writeMode": "",
"fieldDelimiter": ",",
"encoding": "",
"fileFormat": "text"
},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": ""
},
"speed": {
"concurrent": 3,
"throttle": false
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
Paramètres du script Writer
| Paramètre | Description | Obligatoire | Valeur par défaut | |
|---|---|---|---|---|
fileFormat |
Type de fichier. Valeurs valides : text, orc, parquet. |
Oui | Aucune | |
path |
Chemin dans le système de fichiers OSS-HDFS où les données sont stockées. OSS-HDFS Writer écrit plusieurs fichiers dans ce répertoire en fonction de la configuration de concurrence. Lors de l'association avec une table Hive, spécifiez le chemin de stockage de la table Hive sur OSS-HDFS. | Oui | Aucune | |
fileName |
Nom de base des fichiers de sortie. Un suffixe aléatoire est ajouté à ce nom pour chaque thread concurrent afin de créer les noms de fichiers réels. | Oui | Aucune | |
column |
Champs à écrire. L'écriture dans un sous-ensemble de colonnes n'est pas prise en charge. Lors de l'association avec une table Hive, spécifiez tous les noms et types de champs. Utilisez name pour le nom du champ et type pour le type de champ. Non requis lorsque fileFormat est défini sur parquet. |
Oui (non requis si fileFormat est défini sur parquet) |
Aucune | |
writeMode |
Méthode utilisée par OSS-HDFS Writer pour gérer les fichiers existants avant l'écriture. OSS-HDFS Writer adopte une stratégie d'écriture suivie d'un renommage : les données sont d'abord écrites dans un répertoire temporaire nommé selon la règle path_random, puis déplacées vers le chemin de destination une fois toutes les écritures terminées, garantissant des noms de fichiers uniques. Après le déplacement, le répertoire temporaire est automatiquement supprimé. Si la connexion est interrompue, le répertoire temporaire et les fichiers partiellement écrits ne sont pas nettoyés automatiquement ; supprimez-les manuellement avant de réessayer. Valeurs valides : append — écrit directement sans prétraitement, garantissant l'absence de conflits de noms de fichiers. nonConflict — signale une erreur si un fichier avec le préfixe fileName existe déjà dans le répertoire. truncate — supprime tous les fichiers correspondant au préfixe fileName avant l'écriture (par exemple, si fileName est abc, tous les fichiers commençant par abc dans le répertoire sont d'abord supprimés). |
Oui | Aucune | |
fieldDelimiter |
Délimiteur de champ pour les fichiers de sortie. Seuls les délimiteurs à un seul caractère sont pris en charge ; plusieurs caractères provoquent une erreur d'exécution. Non requis lorsque fileFormat est défini sur parquet. |
Oui (non requis si fileFormat est défini sur parquet) |
Aucune | |
compress |
Format de compression pour les fichiers texte. Valeurs valides : gzip, bzip2. Laissez vide pour écrire sans compression. |
Non | Aucune | |
encoding |
Encodage du fichier. | Non | utf-8 |
|
parquetSchema |
Définition du schéma pour les fichiers de sortie Parquet. Ne prend effet que lorsque fileFormat est défini sur parquet. Utilisez le format suivant : `message | optional> optional pour les champs pouvant être nuls et required pour les champs non nuls. Il est recommandé de définir tous les champs sur optional. Chaque définition de ligne doit se terminer par un point-virgule, y compris la dernière. Exemple : message m { optional int64 id; optional binary username; optional int32 status; } |
Non |
Aucune |