Todos los productos
Search
Centro de documentos

DataWorks:HDFS

Última actualización: Sep 04, 2026

DataWorks Data Integration admite la lectura y escritura en Hadoop Distributed File System (HDFS) mediante los plugins HDFS Reader y HDFS Writer.

Apsara File Storage for HDFS no es compatible.

Formatos de archivo compatibles

Plugin

Supported formats

HDFS Reader

TextFile, ORCFile, RCFile, SequenceFile, CSV, Parquet

HDFS Writer

TextFile, ORCFile, Parquet

Requisitos de resource group

HDFS utiliza una lista de permitidos de red para garantizar la seguridad de los datos, y el resource group predeterminado no proporciona acceso de red confiable a los endpoints de NameNode y DataNode de HDFS. Utilice un serverless resource group o un exclusive resource group for Data Integration para las tareas de sincronización de HDFS.

Plugin

Supported resource groups

HDFS Reader

Serverless resource group (recomendado), exclusive resource group for Data Integration

HDFS Writer

Exclusive resource group for Data Integration únicamente

Limitaciones

HDFS Reader

  • La lectura concurrente con varios hilos de un archivo único no es compatible debido al algoritmo interno de fragmentación. Cuando se especifican varios archivos, HDFS Reader los lee de forma concurrente; la cantidad real de hilos corresponde al valor menor entre el número de archivos y la configuración concurrent.

  • HDFS Reader no puede acceder al metastore de Hive. Especifique los tipos de datos explícitamente durante la conversión de tipos.

  • Los datos TIMESTAMP almacenados en TextFile y ORCFile tienen precisión de nanosegundos (por ejemplo, 2015-08-21 22:40:47.397898389). La conversión al tipo date elimina la parte de nanosegundos. Para conservarla, asigne la columna al tipo string en su lugar.

  • Al configurar una tarea de sincronización de HDFS en el editor de código, no es necesario que la prueba de conectividad de red del origen de datos HDFS sea exitosa. Ignore cualquier error resultante.

  • Data Integration se ejecuta con la cuenta admin. La cuenta admin del sistema operativo debe tener permisos de lectura y escritura sobre los archivos de HDFS correspondientes. De lo contrario, cambie al editor de código y agregue "hdfsUsername": "user_with_permissions" al script.

HDFS Writer

  • Solo se admiten los formatos TextFile, ORCFile y Parquet. No se admite la escritura en RCFile, SequenceFile ni CSV.

  • No se admite la escritura en un subconjunto de columnas. Dado que HDFS es un sistema de archivos sin esquemas, se deben especificar todas las columnas.

  • Los siguientes tipos de datos de Hive no son compatibles: DECIMAL, BINARY, ARRAY, MAP, STRUCT y UNION.

  • Para tablas particionadas de Hive, solo se admite la escritura en una sola partición.

  • En TextFile, el delimitador de campos utilizado para la escritura debe coincidir con el delimitador usado al crear la tabla de Hive, de modo que los datos puedan asociarse correctamente con los campos de dicha tabla.

Compatibilidad de versiones de plugins

Tanto HDFS Reader como HDFS Writer están basados en Hive 1.1.1 y Hadoop 2.7.1 (Apache, adaptado para JDK 1.6 en Reader y JDK 1.7 en Writer). Los plugins se han probado con Hadoop 2.5.0, Hadoop 2.6.0 y Hive 1.2.0.

Funcionamiento de HDFS Writer

HDFS Writer emplea una estrategia de escritura y renombrado para evitar conflictos de archivos e impedir que otros procesos lean archivos parcialmente escritos:

  1. Crea una carpeta temporal en HDFS basada en la ruta especificada, utilizando la regla de nomenclatura path_random.

  2. Escribe todos los archivos en la carpeta temporal.

  3. Una vez escritos todos los archivos, los mueve de la carpeta temporal a la ruta de destino.

  4. Elimina la carpeta temporal.

Si ocurre una interrupción de red o un error de conexión durante el paso 2 o 3, elimine manualmente la carpeta temporal y cualquier archivo que se haya escrito.

La cuenta admin debe tener permisos de lectura y escritura sobre los archivos de HDFS correspondientes.

Tipos de campo compatibles

Asignación de tipos de HDFS Reader

De forma predeterminada, HDFS Reader convierte los tipos de datos de Hive a los tipos internos de Data Integration de la siguiente manera:

Type category

Data Integration type

Hive data types

Entero

long

TINYINT, SMALLINT, INT, BIGINT

Punto flotante

double

FLOAT, DOUBLE

Cadena

string

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

Fecha/Hora

date

DATE, TIMESTAMP

Booleano

boolean

BOOLEAN

Notas sobre tipos específicos:

  • long: Valores enteros en un archivo HDFS, como 123456789.

  • double: Valores de punto flotante en un archivo HDFS, como 3.1415.

  • boolean: Valores booleanos (true o false). No distingue entre mayúsculas y minúsculas.

  • date: Valores de tiempo en un archivo HDFS, como 2014-12-31 00:00:00.

Asignación de tipos de HDFS Writer

HDFS Writer admite los siguientes tipos de datos de Hive. La configuración de columnas debe coincidir con los tipos de columna correspondientes en la tabla de Hive.

Type category

Supported Hive data types

Entero

TINYINT, SMALLINT, INT, BIGINT

Punto flotante

FLOAT, DOUBLE

Cadena

CHAR, VARCHAR, STRING

Booleano

BOOLEAN

Fecha/Hora

DATE, TIMESTAMP

Configurar una tarea de sincronización

Para configurar una tarea de sincronización sin conexión de tabla única, consulte:

Para consultar todos los parámetros y un ejemplo de script para el editor de código, véase Appendix: Script demo and parameter descriptions.

Apéndice: Demostración de scripts y descripción de parámetros

Demostración de script de Reader

El siguiente script muestra una configuración básica de HDFS Reader. Todos los ejemplos utilizan el parámetro datasource para hacer referencia al origen de datos HDFS configurado en 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"
            }
        ]
    }
}

El siguiente ejemplo muestra cómo configurar HDFS Reader para leer un archivo Parquet mediante parquetSchema. Establezca fileType en parquet y especifique el esquema completo. Utilice el index en el parámetro column para seleccionar y asignar las columnas necesarias.

"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; }"
    }
}

Parámetros de Reader

Parameter

Description

Required

Default

path

La ruta de los archivos que se van a leer. Consulte Especificación de la ruta de lectura para obtener detalles sobre rutas estáticas, comodines y rutas de particiones.

Sí

Ninguna

defaultFS

La dirección del NameNode de HDFS, por ejemplo, hdfs://127.0.0.1:9000. El resource group público no admite la configuración de alta disponibilidad (HA) de Hadoop.

Sí

Ninguna

fileType

El formato de archivo: TEXT, ORC, RC, SEQ, CSV o parquet. Antes de leer, HDFS Reader verifica que todos los archivos de la ruta coincidan con este formato. Si no coinciden, la tarea falla. Consulte Notas sobre el análisis de formatos de archivo.

Sí

Ninguna

column

La lista de columnas que se van a leer. type especifica el tipo de dato. index especifica la posición de la columna (base 0). value especifica una constante; el campo se genera a partir de este valor en lugar de leerse del archivo de origen. Para leer todas las columnas como cadenas, utilice "column": ["*"].

Sí

Ninguna

fieldDelimiter

El delimitador de campos para datos TextFile. No es obligatorio para ORCFile (el delimitador predeterminado de Hive es \u0001). El delimitador no puede ser \n.

No

,

encoding

La codificación del archivo.

No

UTF-8

nullFormat

La cadena que se interpretará como valor nulo. Por ejemplo, establecer "nullFormat": "null" hace que la cadena null se trate como un campo nulo (no equivale a un valor nulo real).

No

Ninguna

compress

El formato de compresión para archivos CSV. Valores admitidos: gzip, bz2, zip, lzo, lzo_deflate, hadoop-snappy, framing-snappy. No es obligatorio para archivos ORC. LZO tiene dos formatos (lzo y lzo_deflate); especifique el correcto.

No

Ninguna

parquetSchema

Obligatorio cuando fileType es parquet. Describe la estructura del archivo Parquet. Consulte Formato de esquema Parquet.

No

Ninguna

csvReaderConfig

Configuración avanzada para leer archivos CSV (tipo Map). Si no se establece, se utilizan los valores predeterminados. Consulte Configuración del lector CSV.

No

Ninguna

hadoopConfig

Parámetros avanzados de Hadoop, como la configuración de HA. Consulte Configuración de HA de Hadoop.

No

Ninguna

haveKerberos

Indica si la autenticación Kerberos está habilitada. Si es true, se requieren kerberosKeytabFilePath y kerberosPrincipal.

No

false

kerberosKeytabFilePath

La ruta absoluta del archivo keytab de Kerberos. Obligatorio si haveKerberos es true.

No

Ninguna

kerberosPrincipal

El nombre de entidad de seguridad de Kerberos, como **/hadoopclient@.***. Obligatorio si haveKerberos es true.

No

Ninguna

Especificación de la ruta de lectura

El parámetro path admite tres enfoques:

  • Opción 1: Ruta estática — Lee un solo archivo o todos los archivos de un directorio. Un solo archivo utiliza un hilo. Ejemplo: /user/hive/warehouse/mytable01/data.csv.

  • Opción 2: Ruta con comodines — Lee varios archivos que coinciden con un patrón. HDFS Reader admite * (coincide con cualquier carácter) y ? (coincide con un solo carácter). Ejemplo: /hadoop/data_201704*. La cantidad real de hilos corresponde al valor menor entre el número de archivos coincidentes y la configuración concurrent.

  • Opción 3: Ruta de partición — Lee datos de un directorio de partición de Hive. Cuando se crea una tabla de Hive con particiones (por ejemplo, partition(day="20150820", hour="09")), la partición aparece como una estructura de directorios en HDFS. Para leer todos los datos de un día determinado, establezca la ruta de la siguiente manera:

    "path": "/user/hive/warehouse/mytable01/20150820/*"
Data Integration trata todos los archivos de una tarea de sincronización como una sola tabla. Todos los archivos deben cumplir con el mismo esquema y la cuenta admin debe tener permisos de lectura sobre ellos. Si los nombres de archivo siguen un patrón basado en tiempo, utilice scheduling parameters para reemplazar la ruta dinámicamente según el tiempo del negocio.

Notas sobre el análisis de formatos de archivo

TextFile y ORCFile analizan los tipos complejos de Hive de manera diferente. Para el tipo map, un ORCFile produce {job=80, team=60}, mientras que un TextFile produce {job:80, team:60}. Los datos son los mismos, pero el formato difiere. Si sus datos incluyen tipos complejos de Hive, utilice un formato de archivo consistente en toda la ruta. Para unificar el formato, exporte las tablas TextFile a ORCFile en el cliente de Hive.

Formato de esquema Parquet

message MessageTypeName {
    RequiredStatus DataType ColumnName;
    ...;
}
  • MessageTypeName: Un nombre para el tipo de mensaje.

  • RequiredStatus: Utilice required para columnas no nulas y optional para columnas que aceptan valores nulos. Establezca todas las columnas como optional.

  • DataType: Los tipos admitidos son BOOLEAN, INT32, INT64, INT96, FLOAT, DOUBLE, BINARY (utilizar para tipos de cadena) y FIXED_LEN_BYTE_ARRAY.

  • Finalice cada definición de columna con punto y coma, incluida la última.

Ejemplo:

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

Configuración del lector CSV

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

Todos los campos disponibles y sus valores predeterminados:

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;

Configuración de 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"
}
Los parámetros dfs.data.transfer.protection , dfs.datanode.use.datanode.hostname y dfs.client.use.datanode.hostname habilitan la autenticación Kerberos en el plugin HDFS Reader. Si la autenticación Kerberos ya está configurada en el origen de datos HDFS, estos parámetros no son necesarios en la configuración del plugin. Consulte Configure an HDFS data source .

Ejemplo de configuración de Kerberos

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

Dado que Kerberos requiere la ruta absoluta al archivo keytab, despliegue esta configuración en un resource group.

Demostración de script de Writer

El siguiente script muestra una configuración básica 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"
            }
        ]
    }
}

Parámetros de Writer

Parameter

Description

Required

Default

defaultFS

La dirección del NameNode para HDFS, por ejemplo, hdfs://127.0.0.1:9000.

Sí

Ninguna

fileType

El formato de archivo de salida: text (TextFile), orc (ORCFile) o parquet (Parquet).

Sí

Ninguna

path

La ruta de destino en HDFS. HDFS Writer escribe varios archivos en este directorio según la configuración concurrent. Para escribir en una tabla de Hive, establézcalo en la ruta de almacenamiento de la tabla de Hive en HDFS. Por ejemplo, para una tabla llamada hello en la base de datos test con una ruta de almacén de datos de Hive de /user/hive/warehouse/, la ruta es /user/hive/warehouse/test.db/hello.

Sí

Ninguna

fileName

El nombre base para los archivos de salida. Se agrega un sufijo aleatorio para crear el nombre de archivo real de cada hilo.

Sí

Ninguna

column

La lista de campos que se van a escribir. Especifique todos los nombres de campo (name) y tipos (type); no se admite la escritura en un subconjunto de columnas. No es obligatorio cuando fileType es parquet.

Sí (no obligatorio para parquet)

Ninguna

writeMode

El comportamiento cuando ya existen archivos con el mismo prefijo fileName en la ruta de destino. Consulte Modos de escritura.

Sí

Ninguna

fieldDelimiter

El delimitador de campos para los archivos de salida. Debe coincidir con el delimitador utilizado al crear la tabla de Hive; de lo contrario, los datos no se podrán consultar en Hive. Solo se admiten delimitadores de un solo carácter. No es obligatorio cuando fileType es parquet.

Sí (no obligatorio para parquet)

Ninguna

compress

El tipo de compresión para los archivos de salida. Para archivos de texto, se admiten gzip y bzip2. Déjelo en blanco para no aplicar compresión.

No

Ninguna

encoding

El formato de codificación para los archivos de salida.

No

UTF-8

parquetSchema

Obligatorio cuando fileType es parquet. Describe la estructura del archivo Parquet. Utiliza el mismo formato que el parquetSchema de Reader.

No

Ninguna

hadoopConfig

Parámetros avanzados de Hadoop, como la configuración de HA. Utiliza el mismo formato que el hadoopConfig de Reader. También admite HDFS respaldado por OSS cuando dataxParquetMode es fields.

No

Ninguna

dataxParquetMode

El modo para sincronizar archivos Parquet. fields admite tipos complejos (ARRAY, MAP, STRUCT) y HDFS sobre OSS. columns es el valor predeterminado.

No

columns

haveKerberos

Indica si la autenticación Kerberos está habilitada. Si es true, se requieren kerberosKeytabFilePath y kerberosPrincipal.

No

false

kerberosKeytabFilePath

La ruta absoluta del archivo keytab de Kerberos. Obligatorio si haveKerberos es true.

No

Ninguna

kerberosPrincipal

El nombre de entidad de seguridad de Kerberos. Obligatorio si haveKerberos es true.

No

Ninguna

Modos de escritura

HDFS Writer utiliza una estrategia de escritura y renombrado: primero escribe en una carpeta temporal y luego mueve los archivos a la ruta de destino. El parámetro writeMode controla cómo se manejan los archivos existentes con el mismo prefijo fileName antes de comenzar la escritura.

Mode

Behavior

append

Sin limpieza previa a la escritura. HDFS Writer anexa archivos directamente sin comprobar si hay conflictos.

nonConflict

Falla la tarea si ya existe algún archivo con el prefijo fileName en el directorio de destino.

truncate

Elimina todos los archivos con el prefijo fileName en el directorio de destino antes de escribir. Por ejemplo, si "fileName": "abc", primero se eliminan todos los archivos que comienzan con abc.

El formato Parquet no admite el modo append . Utilice nonConflict para archivos Parquet.

Escritura en HDFS respaldado por OSS

Cuando dataxParquetMode es fields, HDFS Writer admite OSS como almacenamiento subyacente. Agregue los siguientes parámetros de OSS a 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"
    }
}

Reemplace los siguientes marcadores de posición con los valores reales:

Placeholder

Description

<your-access-key-id>

El AccessKey ID para acceder a OSS

<your-access-key-secret>

El AccessKey secret para acceder a OSS

Pasos siguientes