Tous les produits
Search
Centre de documentation

DataWorks:HDFS

Dernière mise à jour :Aug 20, 2026

DataWorks Data Integration permet de lire et d'écrire des données dans le système de fichiers distribué Hadoop (HDFS) via les plug-ins HDFS Reader et HDFS Writer.

Apsara File Storage for HDFS n'est pas pris en charge.

Formats de fichiers pris en charge

Plugin

Formats pris en charge

HDFS Reader

TextFile, ORCFile, RCFile, SequenceFile, CSV, Parquet

HDFS Writer

TextFile, ORCFile, Parquet

Exigences relatives aux groupes de ressources

HDFS utilise une liste blanche réseau pour sécuriser les données. Le groupe de ressources par défaut ne garantit pas un accès réseau fiable aux endpoints NameNode et DataNode de HDFS. Pour les tâches de synchronisation HDFS, utilisez un groupe de ressources serverless ou un groupe de ressources exclusif pour Data Integration.

Plugin

Groupes de ressources pris en charge

HDFS Reader

Groupe de ressources serverless (recommandé), groupe de ressources exclusif pour Data Integration

HDFS Writer

Groupe de ressources exclusif pour Data Integration uniquement

Limitations

HDFS Reader

  • La lecture simultanée multithread d'un fichier unique n'est pas prise en charge en raison de l'algorithme de découpage interne. Si vous spécifiez plusieurs fichiers, HDFS Reader les lit de manière concurrente : le nombre réel de threads correspond au minimum entre le nombre de fichiers et la valeur du paramètre concurrent.

  • HDFS Reader ne peut pas accéder au metastore de Hive. Spécifiez explicitement les types de données lors de la conversion.

  • Les données TIMESTAMP stockées dans TextFile et ORCFile sont précises à la nanoseconde près (par exemple, 2015-08-21 22:40:47.397898389). La conversion vers le type date supprime la partie nanoseconde. Pour la conserver, mappez la colonne sur le type string.

  • Lorsque vous configurez une tâche de synchronisation HDFS dans l'éditeur de code, le test de connectivité réseau pour la source de données HDFS n'est pas obligatoire. Ignorez les erreurs éventuelles.

  • Data Integration s'exécute sous le compte admin. Le compte admin du système d'exploitation doit disposer des autorisations de lecture et d'écriture sur les fichiers HDFS concernés. Si ce n'est pas le cas, basculez vers l'éditeur de code et ajoutez "hdfsUsername": "user_with_permissions" au script.

HDFS Writer

  • Seuls les formats TextFile, ORCFile et Parquet sont pris en charge. L'écriture dans RCFile, SequenceFile ou CSV n'est pas prise en charge.

  • L'écriture dans un sous-ensemble de colonnes n'est pas prise en charge. Comme HDFS est un système de fichiers sans schéma, vous devez spécifier toutes les colonnes.

  • Les types de données Hive suivants ne sont pas pris en charge : DECIMAL, BINARY, ARRAY, MAP, STRUCT et UNION.

  • Pour les tables partitionnées Hive, seules les écritures sur une partition unique sont prises en charge.

  • Pour TextFile, le délimiteur de champ utilisé lors de l'écriture doit correspondre à celui défini lors de la création de la table Hive, afin que les données soient correctement associées aux champs de la table.

Compatibilité des versions de plug-in

HDFS Reader et HDFS Writer reposent tous deux sur Hive 1.1.1 et Hadoop 2.7.1 (Apache, adapté pour JDK 1.6 pour Reader et JDK 1.7 pour Writer). Les plug-ins ont été testés avec Hadoop 2.5.0, Hadoop 2.6.0 et Hive 1.2.0.

Fonctionnement de HDFS Writer

HDFS Writer utilise une stratégie d'écriture suivie d'un renommage pour éviter les conflits de fichiers et empêcher la lecture de fichiers partiellement écrits par d'autres processus :

  1. Crée un dossier temporaire dans HDFS selon le chemin spécifié, en appliquant la règle de nommage path_random.

  2. Écrit tous les fichiers dans le dossier temporaire.

  3. Une fois l'écriture terminée, déplace les fichiers du dossier temporaire vers le chemin de destination.

  4. Supprime le dossier temporaire.

En cas d'interruption réseau ou d'erreur de connexion durant l'étape 2 ou 3, supprimez manuellement le dossier temporaire ainsi que les fichiers écrits.

Le compte admin doit disposer des autorisations de lecture et d'écriture sur les fichiers HDFS concernés.

Types de champs pris en charge

Mappage des types pour HDFS Reader

Par défaut, HDFS Reader convertit les types de données Hive en types internes Data Integration comme suit :

Catégorie de type

Type Data Integration

Types de données Hive

Entier

long

TINYINT, SMALLINT, INT, BIGINT

Virgule flottante

double

FLOAT, DOUBLE

Chaîne

string

STRING, CHAR, VARCHAR, STRUCT, MAP, ARRAY, UNION, BINARY

Date/Heure

date

DATE, TIMESTAMP

Booléen

boolean

BOOLEAN

Remarques sur certains types spécifiques :

  • long : Valeurs entières dans un fichier HDFS, telles que 123456789.

  • double : Valeurs à virgule flottante dans un fichier HDFS, telles que 3.1415.

  • boolean : Valeurs booléennes (true ou false). Non sensible à la casse.

  • date : Valeurs temporelles dans un fichier HDFS, telles que 2014-12-31 00:00:00.

Mappage des types pour HDFS Writer

HDFS Writer prend en charge les types de données Hive suivants. La configuration des colonnes doit correspondre aux types de colonnes de la table Hive.

Catégorie de type

Types de données Hive pris en charge

Entier

TINYINT, SMALLINT, INT, BIGINT

Virgule flottante

FLOAT, DOUBLE

Chaîne

CHAR, VARCHAR, STRING

Booléen

BOOLEAN

Date/Heure

DATE, TIMESTAMP

Configurer une tâche de synchronisation

Pour configurer une tâche de synchronisation hors ligne pour une seule table, consultez :

Pour la description de tous les paramètres et un exemple de script pour l'éditeur de code, consultez Annexe : Démo de script et description des paramètres.

Annexe : Démo de script et description des paramètres

Démo de script pour Reader

Le script suivant présente une configuration de base de HDFS Reader. Tous les exemples utilisent le paramètre datasource pour référencer la source de données HDFS configurée dans DataWorks.

{
    "type": "job",
    "version": "2.0",
    "steps": [
        {
            "stepType": "hdfs",
            "parameter": {
                "datasource": "",
                "path": "",
                "fileType": "",
                "column": [
                    {
                        "index": 0,
                        "type": "string"
                    },
                    {
                        "index": 1,
                        "type": "long"
                    },
                    {
                        "index": 2,
                        "type": "double"
                    },
                    {
                        "index": 3,
                        "type": "boolean"
                    },
                    {
                        "index": 4,
                        "type": "date",
                        "format": "yyyy-MM-dd HH:mm:ss"
                    }
                ],
                "fieldDelimiter": ",",
                "encoding": "UTF-8",
                "hadoopConfig": {
                    "dfs.data.transfer.protection": "integrity",
                    "dfs.datanode.use.datanode.hostname": "true",
                    "dfs.client.use.datanode.hostname": "true"
                }
            },
            "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"
            }
        ]
    }
}

L'exemple suivant montre comment configurer HDFS Reader pour lire un fichier Parquet en utilisant parquetSchema. Définissez fileType sur parquet et spécifiez le schéma complet. Utilisez l'index dans le paramètre column pour sélectionner et mapper les colonnes requises.

"reader": {
    "name": "hdfsreader",
    "parameter": {
        "path": "/user/hive/warehouse/addata.db/dw_ads_rtb_monitor_minute/thedate=20170103/hour_id=22/*",
        "defaultFS": "h10s010.07100.149:8020",
        "fileType": "parquet",
        "encoding": "UTF-8",
        "column": [
            {
                "index": 0,
                "type": "string"
            },
            {
                "index": 1,
                "type": "long"
            },
            {
                "index": 2,
                "type": "double"
            }
        ],
        "parquetSchema": "message m { optional int32 minute_id; optional int32 dsp_id; optional int32 adx_pid; optional int64 req; optional int64 res; optional int64 suc; optional int64 imp; optional double revenue; }"
    }
}

Paramètres de Reader

Paramètre

Description

Obligatoire

Valeur par défaut

path

Chemin des fichiers à lire. Consultez Spécification du chemin de lecture pour plus de détails sur les chemins statiques, les caractères génériques et les chemins de partition.

Oui

Aucune

defaultFS

Adresse du NameNode HDFS, par exemple hdfs://127.0.0.1:9000. Le groupe de ressources public ne prend pas en charge la configuration haute disponibilité (HA) de Hadoop.

Oui

Aucune

fileType

Format de fichier : TEXT, ORC, RC, SEQ, CSV ou parquet. Avant la lecture, HDFS Reader vérifie que tous les fichiers du chemin correspondent à ce format. Sinon, la tâche échoue. Consultez Notes sur l'analyse des formats de fichier.

Oui

Aucune

column

Liste des colonnes à lire. type spécifie le type de données. index spécifie la position de la colonne (base 0). value spécifie une constante : le champ est généré à partir de cette valeur plutôt que lu depuis le fichier source. Pour lire toutes les colonnes sous forme de chaînes, utilisez "column": ["*"].

Oui

Aucune

fieldDelimiter

Délimiteur de champ pour les données TextFile. Non requis pour ORCFile (le délimiteur par défaut de Hive est \u0001). Le délimiteur ne peut pas être \n.

Non

,

encoding

Encodage du fichier.

Non

UTF-8

nullFormat

Chaîne à interpréter comme une valeur null. Par exemple, définir "nullFormat": "null" traite la chaîne null comme un champ null (ce qui diffère d'une valeur null réelle).

Non

Aucune

compress

Format de compression pour les fichiers CSV. Valeurs prises en charge : gzip, bz2, zip, lzo, lzo_deflate, hadoop-snappy, framing-snappy. Non requis pour les fichiers ORC. LZO possède deux formats (lzo et lzo_deflate) : spécifiez le bon.

Non

Aucune

parquetSchema

Requis lorsque fileType est parquet. Décrit la structure du fichier Parquet. Consultez Format du schéma Parquet.

Non

Aucune

csvReaderConfig

Configuration avancée pour la lecture des fichiers CSV (type Map). Si non défini, les valeurs par défaut sont utilisées. Consultez Configuration du lecteur CSV.

Non

Aucune

hadoopConfig

Paramètres Hadoop avancés, tels que la configuration HA. Consultez Configuration HA de Hadoop.

Non

Aucune

haveKerberos

Indique si l'authentification Kerberos est activée. Si true, kerberosKeytabFilePath et kerberosPrincipal sont requis.

Non

false

kerberosKeytabFilePath

Chemin absolu du fichier keytab Kerberos. Requis si haveKerberos est true.

Non

Aucune

kerberosPrincipal

Nom principal Kerberos, tel que **/hadoopclient@.***. Requis si haveKerberos est true.

Non

Aucune

Spécification du chemin de lecture

Le paramètre path prend en charge trois approches :

  • Option 1 : Chemin statique — Lit un seul fichier ou tous les fichiers d'un répertoire. Un seul fichier utilise un thread. Exemple : /user/hive/warehouse/mytable01/data.csv.

  • Option 2 : Chemin avec caractère générique — Lit plusieurs fichiers correspondant à un modèle. HDFS Reader prend en charge * (correspond à n'importe quels caractères) et ? (correspond à un seul caractère). Exemple : /hadoop/data_201704*. Le nombre réel de threads correspond au minimum entre le nombre de fichiers correspondants et la valeur du paramètre concurrent.

  • Option 3 : Chemin de partition — Lit les données d'un répertoire de partition Hive. Lorsqu'une table Hive est créée avec des partitions (par exemple, partition(day="20150820", hour="09")), la partition apparaît comme une structure de répertoire dans HDFS. Pour lire toutes les données d'un jour donné, définissez le chemin comme suit :

    "path": "/user/hive/warehouse/mytable01/20150820/*"
Data Integration traite tous les fichiers d'une tâche de synchronisation comme une seule table. Tous les fichiers doivent respecter le même schéma, et le compte admin doit disposer des autorisations de lecture sur ces fichiers. Si les noms de fichiers suivent un modèle basé sur le temps, utilisez les paramètres de planification pour remplacer dynamiquement le chemin en fonction de l'heure métier.

Notes sur l'analyse des formats de fichier

TextFile et ORCFile analysent différemment les types complexes Hive. Pour le type map, un fichier ORCFile produit {job=80, team=60} tandis qu'un fichier TextFile produit {job:80, team:60}. Les données sont identiques, mais le format diffère. Si vos données incluent des types complexes Hive, utilisez un format de fichier cohérent sur tout le chemin. Pour uniformiser le format, exportez les tables TextFile vers ORCFile dans le client Hive.

Format du schéma Parquet

message MessageTypeName {
    RequiredStatus DataType ColumnName;
    ...;
}
  • MessageTypeName : Nom du type de message.

  • RequiredStatus : Utilisez required pour les colonnes non nulles et optional pour les colonnes pouvant être nulles. Définissez toutes les colonnes sur optional.

  • DataType : Types pris en charge : BOOLEAN, INT32, INT64, INT96, FLOAT, DOUBLE, BINARY (à utiliser pour les types chaîne) et FIXED_LEN_BYTE_ARRAY.

  • Terminez chaque définition de colonne par un point-virgule, y compris la dernière.

Exemple :

"parquetSchema": "message m { optional int32 minute_id; optional int32 dsp_id; optional int64 req; optional double revenue; }"

Configuration du lecteur CSV

"csvReaderConfig": {
    "safetySwitch": false,
    "skipEmptyRecords": false,
    "useTextQualifier": false
}

Tous les champs disponibles et leurs valeurs par défaut :

boolean caseSensitive = true;
char textQualifier = 34;
boolean trimWhitespace = true;
boolean useTextQualifier = true;   // Whether to use a CSV escape character
char delimiter = 44;               // Separator
char recordDelimiter = 0;
char comment = 35;
boolean useComments = false;
int escapeMode = 1;
boolean safetySwitch = true;       // Whether to limit a single column to 100,000 characters
boolean skipEmptyRecords = true;   // Whether to skip empty rows
boolean captureRawRecord = true;

Configuration HA de Hadoop

"hadoopConfig": {
    "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",
    "dfs.data.transfer.protection": "integrity",
    "dfs.datanode.use.datanode.hostname": "true",
    "dfs.client.use.datanode.hostname": "true"
}
Les paramètres dfs.data.transfer.protection , dfs.datanode.use.datanode.hostname et dfs.client.use.datanode.hostname activent l'authentification Kerberos dans le plug-in HDFS Reader. Si l'authentification Kerberos est déjà configurée sur la source de données HDFS, ces paramètres ne sont pas requis dans la configuration du plug-in. Consultez Configurer une source de données HDFS .

Exemple de configuration Kerberos

"haveKerberos": true,
"kerberosKeytabFilePath": "/opt/datax/**.keytab",
"kerberosPrincipal": "**/hadoopclient@**.**"

Comme Kerberos nécessite le chemin absolu vers le fichier keytab, déployez cette configuration sur un groupe de ressources.

Démo de script pour Writer

Le script suivant présente une configuration de base de HDFS Writer.

{
    "type": "job",
    "version": "2.0",
    "steps": [
        {
            "stepType": "stream",
            "parameter": {},
            "name": "Reader",
            "category": "reader"
        },
        {
            "stepType": "hdfs",
            "parameter": {
                "datasource": "",
                "path": "",
                "fileName": "",
                "fileType": "text",
                "column": [
                    {
                        "name": "col1",
                        "type": "string"
                    },
                    {
                        "name": "col2",
                        "type": "int"
                    },
                    {
                        "name": "col3",
                        "type": "double"
                    },
                    {
                        "name": "col4",
                        "type": "boolean"
                    },
                    {
                        "name": "col5",
                        "type": "date"
                    }
                ],
                "writeMode": "",
                "fieldDelimiter": ",",
                "encoding": "UTF-8",
                "compress": ""
            },
            "name": "Writer",
            "category": "writer"
        }
    ],
    "setting": {
        "errorLimit": {
            "record": ""
        },
        "speed": {
            "concurrent": 3,
            "throttle": false
        }
    },
    "order": {
        "hops": [
            {
                "from": "Reader",
                "to": "Writer"
            }
        ]
    }
}

Paramètres de Writer

Paramètre

Description

Obligatoire

Valeur par défaut

defaultFS

Adresse NameNode pour HDFS, par exemple hdfs://127.0.0.1:9000.

Oui

Aucune

fileType

Format de fichier de sortie : text (TextFile), orc (ORCFile) ou parquet (Parquet).

Oui

Aucune

path

Chemin de destination dans HDFS. HDFS Writer écrit plusieurs fichiers dans ce répertoire en fonction du paramètre concurrent. Pour écrire dans une table Hive, définissez-le sur le chemin de stockage de la table Hive sur HDFS. Par exemple, pour une table nommée hello dans la base de données test avec un chemin de data warehouse Hive de /user/hive/warehouse/, le chemin est /user/hive/warehouse/test.db/hello.

Oui

Aucune

fileName

Nom de fichier de base pour les fichiers de sortie. Un suffixe aléatoire est ajouté pour créer le nom de fichier réel pour chaque thread.

Oui

Aucune

column

Liste des champs à écrire. Spécifiez tous les noms de champs (name) et types (type) : l'écriture dans un sous-ensemble de colonnes n'est pas prise en charge. Non requis lorsque fileType est parquet.

Oui (non requis pour parquet)

Aucune

writeMode

Comportement lorsque des fichiers avec le même préfixe fileName existent déjà dans le chemin de destination. Consultez Modes d'écriture.

Oui

Aucune

fieldDelimiter

Délimiteur de champ pour les fichiers de sortie. Doit correspondre au délimiteur utilisé lors de la création de la table Hive, sinon les données ne peuvent pas être interrogées dans Hive. Seuls les délimiteurs à caractère unique sont pris en charge. Non requis lorsque fileType est parquet.

Oui (non requis pour parquet)

Aucune

compress

Type de compression pour les fichiers de sortie. Pour les fichiers texte, gzip et bzip2 sont pris en charge. Laissez vide pour aucune compression.

Non

Aucune

encoding

Format d'encodage pour les fichiers de sortie.

Non

UTF-8

parquetSchema

Requis lorsque fileType est parquet. Décrit la structure du fichier Parquet. Utilise le même format que le parquetSchema de Reader.

Non

Aucune

hadoopConfig

Paramètres Hadoop avancés, tels que la configuration HA. Utilise le même format que le hadoopConfig de Reader. Prend également en charge HDFS basé sur OSS lorsque dataxParquetMode est fields.

Non

Aucune

dataxParquetMode

Mode de synchronisation des fichiers Parquet. fields prend en charge les types complexes (ARRAY, MAP, STRUCT) et HDFS sur OSS. columns est la valeur par défaut.

Non

columns

haveKerberos

Indique si l'authentification Kerberos est activée. Si true, kerberosKeytabFilePath et kerberosPrincipal sont requis.

Non

false

kerberosKeytabFilePath

Chemin absolu du fichier keytab Kerberos. Requis si haveKerberos est true.

Non

Aucune

kerberosPrincipal

Nom principal Kerberos. Requis si haveKerberos est true.

Non

Aucune

Modes d'écriture

HDFS Writer utilise une stratégie d'écriture suivie d'un renommage : il écrit d'abord dans un dossier temporaire, puis déplace les fichiers vers le chemin de destination. Le paramètre writeMode contrôle la gestion des fichiers existants avec le même préfixe fileName avant le début de l'écriture.

Mode

Comportement

append

Aucun nettoyage avant l'écriture. HDFS Writer ajoute des fichiers directement sans vérifier les conflits.

nonConflict

Échec de la tâche si un fichier avec le préfixe fileName existe déjà dans le répertoire de destination.

truncate

Supprime tous les fichiers avec le préfixe fileName dans le répertoire de destination avant l'écriture. Par exemple, si "fileName": "abc", tous les fichiers commençant par abc sont d'abord supprimés.

Le format Parquet ne prend pas en charge le mode append . Utilisez nonConflict pour les fichiers Parquet.

Écriture dans HDFS basé sur OSS

Lorsque dataxParquetMode est fields, HDFS Writer prend en charge OSS comme stockage sous-jacent. Ajoutez les paramètres OSS suivants à hadoopConfig :

"writer": {
    "name": "hdfswriter",
    "parameter": {
        "defaultFS": "oss://test-bucket",
        "fileType": "parquet",
        "path": "/datasets/oss_demo/kpt",
        "fileName": "test",
        "writeMode": "truncate",
        "encoding": "UTF-8",
        "hadoopConfig": {
            "fs.oss.accessKeyId": "<your-access-key-id>",
            "fs.oss.accessKeySecret": "<your-access-key-secret>",
            "fs.oss.endpoint": "oss-cn-hangzhou.aliyuncs.com"
        },
        "parquetSchema": "message test {\n  required int64 id;\n  optional binary name (UTF8);\n  optional int64 gmt_create;\n  required group map_col (MAP) {\n    repeated group key_value {\n      required binary key (UTF8);\n      required binary value (UTF8);\n    }\n  }\n  required group array_col (LIST) {\n    repeated group list {\n      required binary element (UTF8);\n    }\n  }\n  required group struct_col {\n    required int64 id;\n    required binary name (UTF8);\n  }\n}",
        "dataxParquetMode": "fields"
    }
}

Remplacez les espaces réservés suivants par des valeurs réelles :

Espace réservé

Description

<your-access-key-id>

ID AccessKey pour accéder à OSS

<your-access-key-secret>

Secret AccessKey pour accéder à OSS

Étapes suivantes