Todos os produtos
Search
Central de documentação

DataWorks:HDFS

Última atualização: Jun 27, 2026

O Data Integration do DataWorks permite ler e gravar dados no Hadoop Distributed File System (HDFS) pelos plugins HDFS Reader e HDFS Writer.

O Apsara File Storage for HDFS não é compatível.

Formatos de arquivo compatíveis

Plugin

Formatos compatíveis

HDFS Reader

TextFile, ORCFile, RCFile, SequenceFile, CSV, Parquet

HDFS Writer

TextFile, ORCFile, Parquet

Requisitos de grupo de recursos

O HDFS usa uma lista de permissões de rede para garantir a segurança dos dados. O grupo de recursos padrão não oferece acesso de rede confiável aos endpoints NameNode e DataNode do HDFS. Use um grupo de recursos serverless ou um grupo de recursos exclusivo para Data Integration nas tarefas de sincronização do HDFS.

Plugin

Grupos de recursos compatíveis

HDFS Reader

Grupo de recursos serverless (recomendado), grupo de recursos exclusivo para Data Integration

HDFS Writer

Apenas grupo de recursos exclusivo para Data Integration

Limitações

HDFS Reader

  • O algoritmo interno de fragmentação impede a leitura simultânea multithread de um único arquivo. Ao especificar vários arquivos, o HDFS Reader os lê simultaneamente. O número real de threads corresponde ao menor valor entre a quantidade de arquivos e a configuração concurrent.

  • O HDFS Reader não acessa o metastore do Hive. Especifique os tipos de dados explicitamente durante a conversão.

  • Dados TIMESTAMP armazenados em TextFile e ORCFile têm precisão de nanossegundos (por exemplo, 2015-08-21 22:40:47.397898389). A conversão para o tipo date descarta os nanossegundos. Para preservá-los, mapeie a coluna para o tipo string.

  • Ao configurar uma tarefa de sincronização HDFS no editor de código, ignore erros de teste de conectividade de rede da fonte de dados HDFS. O sucesso desse teste não é obrigatório.

  • O Data Integration executa sob a conta admin. A conta admin do sistema operacional precisa ter permissões de leitura e gravação nos arquivos HDFS relevantes. Caso contrário, alterne para o editor de código e adicione "hdfsUsername": "user_with_permissions" ao script.

HDFS Writer

  • Apenas os formatos TextFile, ORCFile e Parquet são compatíveis. Não há suporte para gravação em RCFile, SequenceFile ou CSV.

  • Não é possível gravar em um subconjunto de colunas. Como o HDFS é um sistema de arquivos sem esquemas, especifique todas as colunas.

  • Os seguintes tipos de dados do Hive não são compatíveis: DECIMAL, BINARY, ARRAY, MAP, STRUCT e UNION.

  • Tabelas particionadas do Hive aceitam apenas gravações em partição única.

  • No formato TextFile, o delimitador de campo usado para gravação deve corresponder ao delimitador definido na criação da tabela Hive. Isso permite associar corretamente os dados aos campos da tabela.

Compatibilidade de versões dos plugins

Tanto o HDFS Reader quanto o HDFS Writer baseiam-se no Hive 1.1.1 e Hadoop 2.7.1 (Apache, adaptado para JDK 1.6 no Reader e JDK 1.7 no Writer). Os plugins foram testados com Hadoop 2.5.0, Hadoop 2.6.0 e Hive 1.2.0.

Funcionamento do HDFS Writer

O HDFS Writer adota uma estratégia de gravação e renomeação para evitar conflitos de arquivos e impedir que outros processos leiam arquivos parcialmente gravados:

  1. Crie uma pasta temporária no HDFS com base no caminho especificado, seguindo a regra de nomenclatura path_random.

  2. Grava todos os arquivos na pasta temporária.

  3. Move os arquivos da pasta temporária para o caminho de destino após concluir a gravação.

  4. Exclui a pasta temporária.

Se ocorrer uma interrupção de rede ou erro de conexão durante a etapa 2 ou 3, exclua manualmente a pasta temporária e quaisquer arquivos gravados.

A conta admin deve ter permissões de leitura e gravação nos arquivos HDFS relevantes.

Tipos de campo compatíveis

Mapeamento de tipos do HDFS Reader

Por padrão, o HDFS Reader converte os tipos de dados do Hive para os tipos internos do Data Integration da seguinte forma:

Categoria de tipo

Tipo do Data Integration

Tipos de dados do Hive

Inteiro

long

TINYINT, SMALLINT, INT, BIGINT

Ponto flutuante

double

FLOAT, DOUBLE

String

string

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

Data/Hora

date

DATE, TIMESTAMP

Booleano

boolean

BOOLEAN

Observações sobre tipos específicos:

  • long: Valores inteiros em um arquivo HDFS, como 123456789.

  • double: Valores de ponto flutuante em um arquivo HDFS, como 3.1415.

  • boolean: Valores booleanos (true ou false). Não diferencia maiúsculas de minúsculas.

  • date: Valores de tempo em um arquivo HDFS, como 2014-12-31 00:00:00.

Mapeamento de tipos do HDFS Writer

O HDFS Writer aceita os seguintes tipos de dados do Hive. A configuração das colunas deve corresponder aos tipos de coluna respectivos na tabela Hive.

Categoria de tipo

Tipos de dados do Hive compatíveis

Inteiro

TINYINT, SMALLINT, INT, BIGINT

Ponto flutuante

FLOAT, DOUBLE

String

CHAR, VARCHAR, STRING

Booleano

BOOLEAN

Data/Hora

DATE, TIMESTAMP

Configure uma tarefa de sincronização

Para configurar uma tarefa de sincronização offline de tabela única, consulte:

Para ver todos os parâmetros e um exemplo de script para o editor de código, consulte Apêndice: Exemplo de script e descrições de parâmetros.

Apêndice: Exemplo de script e descrições de parâmetros

Exemplo de script do Reader

O script a seguir mostra uma configuração básica do HDFS Reader. Todos os exemplos usam o parâmetro datasource para referenciar a fonte de dados HDFS configurada no 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"
            }
        ]
    }
}

O exemplo a seguir demonstra como configurar o HDFS Reader para ler um arquivo Parquet usando parquetSchema. Defina fileType como parquet e especifique o esquema completo. Use o index no parâmetro column para selecionar e mapear as colunas necessárias.

"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 do Reader

Parâmetro

Descrição

Obrigatório

Padrão

path

Caminho dos arquivos a serem lidos. Consulte Especificando o caminho de leitura para detalhes sobre caminhos estáticos, curingas e caminhos de partição.

Sim

Nenhum

defaultFS

Endereço do NameNode do HDFS, por exemplo, hdfs://127.0.0.1:9000. O grupo de recursos público não suporta configuração de alta disponibilidade (HA) do Hadoop.

Sim

Nenhum

fileType

Formato do arquivo: TEXT, ORC, RC, SEQ, CSV ou parquet. Antes da leitura, o HDFS Reader verifica se todos os arquivos no caminho correspondem a este formato. Caso contrário, a tarefa falha. Consulte Notas sobre análise de formato de arquivo.

Sim

Nenhum

column

Lista de colunas a serem lidas. type especifica o tipo de dado. index especifica a posição da coluna (baseada em 0). value especifica uma constante — o campo é gerado a partir deste valor em vez de ser lido do arquivo de source. Para ler todas as colunas como strings, use "column": ["*"].

Sim

Nenhum

fieldDelimiter

Delimitador de campo para dados TextFile. Não é necessário para ORCFile (o delimitador padrão do Hive é \u0001). O delimitador não pode ser \n.

Não

,

encoding

Codificação do arquivo.

Não

UTF-8

nullFormat

String a ser interpretada como valor nulo. Por exemplo, definir "nullFormat": "null" trata a string null como um campo nulo (diferente de um valor nulo real).

Não

Nenhum

compress

Formato de compactação para arquivos CSV. Valores compatíveis: gzip, bz2, zip, lzo, lzo_deflate, hadoop-snappy, framing-snappy. Não é necessário para arquivos ORC. O LZO possui dois formatos (lzo e lzo_deflate) — especifique o correto.

Não

Nenhum

parquetSchema

Obrigatório quando fileType é parquet. Descreve a estrutura do arquivo Parquet. Consulte Formato de esquema Parquet.

Não

Nenhum

csvReaderConfig

Configuração avançada para leitura de arquivos CSV (tipo Map). Se não definido, valores padrão são usados. Consulte Configuração do leitor CSV.

Não

Nenhum

hadoopConfig

Parâmetros avançados do Hadoop, como configuração de HA. Consulte Configuração de HA do Hadoop.

Não

Nenhum

haveKerberos

Indica se a autenticação Kerberos está ativada. Se true, kerberosKeytabFilePath e kerberosPrincipal são obrigatórios.

Não

false

kerberosKeytabFilePath

Caminho absoluto do arquivo keytab do Kerberos. Obrigatório se haveKerberos for true.

Não

Nenhum

kerberosPrincipal

Nome do principal Kerberos, como **/hadoopclient@.***. Obrigatório se haveKerberos for true.

Não

Nenhum

Especificando o caminho de leitura

O parâmetro path aceita três abordagens:

  • Opção 1: Caminho estático — Lê um único arquivo ou todos os arquivos em um diretório. Um único arquivo utiliza uma thread. Exemplo: /user/hive/warehouse/mytable01/data.csv.

  • Opção 2: Caminho com curinga — Lê múltiplos arquivos correspondentes a um padrão. O HDFS Reader aceita * (corresponde a quaisquer caracteres) e ? (corresponde a um único caractere). Exemplo: /hadoop/data_201704*. O número real de threads corresponde ao menor valor entre a quantidade de arquivos correspondentes e a configuração concurrent.

  • Opção 3: Caminho de partição — Lê dados de um diretório de partição do Hive. Quando uma tabela Hive é criada com partições (por exemplo, partition(day="20150820", hour="09")), a partição aparece como uma estrutura de diretórios no HDFS. Para ler todos os dados de um determinado dia, defina o caminho da seguinte forma:

    "path": "/user/hive/warehouse/mytable01/20150820/*"
O Data Integration trata todos os arquivos em uma tarefa de sincronização como uma única tabela. Todos os arquivos devem estar em conformidade com o mesmo esquema, e a conta admin deve ter permissões de leitura sobre eles. Se os nomes dos arquivos seguirem um padrão baseado em tempo, use parâmetros de agendamento para substituir o caminho dinamicamente com base no horário comercial.

Notas sobre análise de formato de arquivo

TextFile e ORCFile analisam tipos complexos do Hive de maneira diferente. Para o tipo map, um ORCFile produz {job=80, team=60}, enquanto um TextFile produz {job:80, team:60}. Os dados são os mesmos, mas o formato difere. Se seus dados incluírem tipos complexos do Hive, use um formato de arquivo consistente em todo o caminho. Para unificar o formato, exporte tabelas TextFile para ORCFile no cliente Hive.

Formato de esquema Parquet

message MessageTypeName {
    RequiredStatus DataType ColumnName;
    ...;
}
  • MessageTypeName: Nome para o tipo de mensagem.

  • RequiredStatus: Use required para colunas não nulas e optional para colunas anuláveis. Defina todas as colunas como optional.

  • DataType: Os tipos compatíveis são BOOLEAN, INT32, INT64, INT96, FLOAT, DOUBLE, BINARY (use para tipos string) e FIXED_LEN_BYTE_ARRAY.

  • Termine cada definição de coluna com ponto e vírgula, incluindo a última.

Exemplo:

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

Configuração do leitor CSV

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

Todos os campos disponíveis e seus padrões:

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;

Configuração de HA do 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"
}
Os parâmetros dfs.data.transfer.protection , dfs.datanode.use.datanode.hostname e dfs.client.use.datanode.hostname habilitam a autenticação Kerberos no plugin HDFS Reader. Se a autenticação Kerberos já estiver configurada na fonte de dados HDFS, esses parâmetros não são necessários na configuração do plugin. Consulte Configure uma fonte de dados HDFS .

Exemplo de configuração Kerberos

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

Como o Kerberos requer o caminho absoluto para o arquivo keytab, implante esta configuração em um grupo de recursos.

Exemplo de script do Writer

O script a seguir mostra uma configuração básica do 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 do Writer

Parâmetro

Descrição

Obrigatório

Padrão

defaultFS

Endereço do NameNode para HDFS, por exemplo, hdfs://127.0.0.1:9000.

Sim

Nenhum

fileType

Formato do arquivo de saída: text (TextFile), orc (ORCFile) ou parquet (Parquet).

Sim

Nenhum

path

Caminho de destino no HDFS. O HDFS Writer grava vários arquivos neste diretório com base na configuração concurrent. Para gravar em uma tabela Hive, defina este parâmetro como o caminho de armazenamento da tabela Hive no HDFS. Por exemplo, para uma tabela chamada hello no banco de dados test com um caminho de data warehouse Hive de /user/hive/warehouse/, o caminho é /user/hive/warehouse/test.db/hello.

Sim

Nenhum

fileName

Nome base para os arquivos de saída. Um sufixo aleatório é anexado para criar o nome real do arquivo para cada thread.

Sim

Nenhum

column

Lista de campos a serem gravados. Especifique todos os nomes (name) e tipos (type) dos campos — não há suporte para gravação em um subconjunto de colunas. Não é necessário quando fileType é parquet.

Sim (não necessário para parquet)

Nenhum

writeMode

Comportamento adotado quando arquivos com o mesmo prefixo fileName já existem no caminho de destino. Consulte Modos de gravação.

Sim

Nenhum

fieldDelimiter

Delimitador de campo para arquivos de saída. Deve corresponder ao delimitador usado ao criar a tabela Hive, caso contrário, os dados não poderão ser consultados no Hive. Apenas delimitadores de caractere único são compatíveis. Não é necessário quando fileType é parquet.

Sim (não necessário para parquet)

Nenhum

compress

Tipo de compactação para arquivos de saída. Para arquivos de texto, gzip e bzip2 são compatíveis. Deixe em branco para nenhuma compactação.

Não

Nenhum

encoding

Formato de codificação para arquivos de saída.

Não

UTF-8

parquetSchema

Obrigatório quando fileType é parquet. Descreve a estrutura do arquivo Parquet. Usa o mesmo formato do parquetSchema do Reader.

Não

Nenhum

hadoopConfig

Parâmetros avançados do Hadoop, como configuração de HA. Usa o mesmo formato do hadoopConfig do Reader. Também aceita HDFS com base em OSS quando dataxParquetMode é fields.

Não

Nenhum

dataxParquetMode

Modo para sincronizar arquivos Parquet. fields aceita tipos complexos (ARRAY, MAP, STRUCT) e HDFS sobre OSS. columns é o padrão.

Não

columns

haveKerberos

Indica se a autenticação Kerberos está ativada. Se true, kerberosKeytabFilePath e kerberosPrincipal são obrigatórios.

Não

false

kerberosKeytabFilePath

Caminho absoluto do arquivo keytab do Kerberos. Obrigatório se haveKerberos for true.

Não

Nenhum

kerberosPrincipal

Nome do principal Kerberos. Obrigatório se haveKerberos for true.

Não

Nenhum

Modos de gravação

O HDFS Writer usa uma estratégia de gravação e renomeação: ele grava primeiro em uma pasta temporária e depois move os arquivos para o caminho de destino. O parâmetro writeMode controla como os arquivos existentes com o mesmo prefixo fileName são tratados antes do início da gravação.

Modo

Comportamento

append

Nenhuma limpeza antes da gravação. O HDFS Writer anexa arquivos diretamente sem verificar conflitos.

nonConflict

Falha a tarefa se qualquer arquivo com o prefixo fileName já existir no diretório de destino.

truncate

Exclui todos os arquivos com o prefixo fileName no diretório de destino antes da gravação. Por exemplo, se "fileName": "abc", todos os arquivos começando com abc são excluídos primeiro.

O formato Parquet não aceita o modo append . Use nonConflict para arquivos Parquet.

Gravação em HDFS com base em OSS

Quando dataxParquetMode é fields, o HDFS Writer aceita OSS como armazenamento subjacente. Adicione os seguintes parâmetros OSS ao 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"
    }
}

Substitua os seguintes espaços reservados pelos valores reais:

Espaço reservado

Descrição

<your-access-key-id>

AccessKey ID para acessar o OSS

<your-access-key-secret>

AccessKey secret para acessar o OSS

Próximos passos