All Products
Search
Document Center

DataWorks:HDFS

Last Updated:Aug 21, 2026

Data Integration di DataWorks mendukung pembacaan dari dan penulisan ke Hadoop Distributed File System (HDFS) melalui plugin HDFS Reader dan HDFS Writer.

Apsara File Storage for HDFS tidak didukung.

Format file yang didukung

Plugin

Format yang didukung

HDFS Reader

TextFile, ORCFile, RCFile, SequenceFile, CSV, Parquet

HDFS Writer

TextFile, ORCFile, Parquet

Persyaratan kelompok sumber daya

HDFS menggunakan daftar putih jaringan untuk keamanan data, dan kelompok sumber daya default tidak menyediakan akses jaringan yang andal ke titik akhir HDFS NameNode dan DataNode. Gunakan serverless resource group atau exclusive resource group for Data Integration untuk tugas sinkronisasi HDFS.

Plugin

Kelompok sumber daya yang didukung

HDFS Reader

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

HDFS Writer

Kelompok sumber daya eksklusif hanya untuk Data Integration

Batasan

HDFS Reader

  • Pembacaan konkuren multi-thread pada file tunggal tidak didukung karena algoritma chunking internal. Saat beberapa file ditentukan, HDFS Reader membacanya secara konkuren—jumlah thread aktual adalah nilai terkecil antara jumlah file dan pengaturan concurrent.

  • HDFS Reader tidak dapat mengakses metastore Hive. Tentukan tipe data secara eksplisit selama konversi tipe.

  • Data TIMESTAMP yang disimpan dalam TextFile dan ORCFile memiliki presisi hingga nanodetik (misalnya, 2015-08-21 22:40:47.397898389). Mengonversinya ke tipe date akan menghilangkan bagian nanodetik. Untuk mempertahankannya, petakan kolom tersebut ke tipe string sebagai gantinya.

  • Saat mengonfigurasi tugas sinkronisasi HDFS di editor kode, tugas tersebut tidak memerlukan pengujian konektivitas jaringan yang berhasil untuk sumber data HDFS. Abaikan kesalahan yang muncul.

  • Integrasi Data berjalan di bawah akun admin. Akun admin sistem operasi harus memiliki izin baca dan tulis pada file HDFS terkait. Jika tidak, beralihlah ke editor kode dan tambahkan "hdfsUsername": "user_with_permissions" ke skrip.

HDFS Writer

  • Hanya format TextFile, ORCFile, dan Parquet yang didukung. Menulis ke RCFile, SequenceFile, atau CSV tidak didukung.

  • Menulis ke subset kolom tidak didukung. Karena HDFS adalah sistem file tanpa skema, semua kolom harus ditentukan.

  • Tipe data Hive berikut tidak didukung: DECIMAL, BINARY, ARRAY, MAP, STRUCT, dan UNION.

  • Untuk tabel partisi Hive, hanya penulisan satu partisi yang didukung.

  • Untuk TextFile, delimiter bidang yang digunakan untuk menulis harus sesuai dengan delimiter yang digunakan saat tabel Hive dibuat, agar data dapat dikaitkan dengan bidang tabel Hive.

Kompatibilitas versi plugin

HDFS Reader dan HDFS Writer dibangun di atas Hive 1.1.1 dan Hadoop 2.7.1 (Apache, disesuaikan untuk JDK 1.6 untuk Reader dan JDK 1.7 untuk Writer). Plugin ini telah diuji dengan Hadoop 2.5.0, Hadoop 2.6.0, dan Hive 1.2.0.

Cara kerja HDFS Writer

HDFS Writer menggunakan strategi write-and-rename untuk menghindari konflik file dan mencegah proses lain membaca file yang belum selesai ditulis:

  1. Membuat folder sementara di HDFS berdasarkan path yang ditentukan, menggunakan aturan penamaan path_random.

  2. Menulis semua file ke folder sementara.

  3. Setelah semua file ditulis, memindahkannya dari folder sementara ke jalur tujuan.

  4. Menghapus folder sementara.

Jika terjadi gangguan jaringan atau kesalahan koneksi selama langkah 2 atau 3, hapus secara manual folder sementara dan file apa pun yang telah ditulis.

Akun admin harus memiliki izin baca dan tulis pada file HDFS terkait.

Tipe bidang yang didukung

Pemetaan tipe HDFS Reader

Secara default, HDFS Reader mengonversi tipe data Hive ke tipe internal Integrasi Data sebagai berikut:

Kategori tipe

Tipe Integrasi Data

Tipe data Hive

Integer

long

TINYINT, SMALLINT, INT, BIGINT

Floating-point

double

FLOAT, DOUBLE

String

string

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

Date/Time

date

DATE, TIMESTAMP

Boolean

boolean

BOOLEAN

Catatan tentang tipe tertentu:

  • `long`: Nilai integer dalam file HDFS, seperti 123456789.

  • `double`: Nilai floating-point dalam file HDFS, seperti 3.1415.

  • `boolean`: Nilai Boolean (true atau false). Tidak peka huruf besar/kecil.

  • `date`: Nilai waktu dalam file HDFS, seperti 2014-12-31 00:00:00.

Pemetaan tipe HDFS Writer

HDFS Writer mendukung tipe data Hive berikut. Konfigurasi kolom harus sesuai dengan tipe kolom yang sesuai di tabel Hive.

Kategori tipe

Tipe data Hive yang didukung

Integer

TINYINT, SMALLINT, INT, BIGINT

Floating-point

FLOAT, DOUBLE

String

CHAR, VARCHAR, STRING

Boolean

BOOLEAN

Date/Time

DATE, TIMESTAMP

Konfigurasi tugas sinkronisasi

Untuk mengonfigurasi tugas sinkronisasi offline tabel tunggal, lihat:

Untuk semua parameter dan contoh skrip untuk editor kode, lihat Lampiran: Demo skrip dan deskripsi parameter.

Lampiran: Demo skrip dan deskripsi parameter

Demo skrip Reader

Skrip berikut menunjukkan konfigurasi dasar HDFS Reader. Semua contoh menggunakan parameter datasource untuk mereferensikan sumber data HDFS yang dikonfigurasi di 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"
            }
        ]
    }
}

Contoh berikut menunjukkan cara mengonfigurasi HDFS Reader untuk membaca file Parquet menggunakan parquetSchema. Atur fileType ke parquet dan tentukan skema lengkapnya. Gunakan index dalam parameter column untuk memilih dan memetakan kolom yang diperlukan.

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

Parameter Reader

Parameter

Deskripsi

Wajib

Default

path

Jalur file yang akan dibaca. Lihat Menentukan jalur baca untuk detail mengenai jalur statis, wildcard, dan jalur partisi.

Ya

Tidak ada

defaultFS

Alamat HDFS NameNode, misalnya, hdfs://127.0.0.1:9000. Kelompok sumber daya publik tidak mendukung konfigurasi high availability (HA) Hadoop.

Ya

Tidak ada

fileType

Format file: TEXT, ORC, RC, SEQ, CSV, atau parquet. Sebelum membaca, HDFS Reader memverifikasi bahwa semua file di jalur sesuai dengan format ini. Jika tidak, tugas akan gagal. Lihat Catatan penguraian format file.

Ya

Tidak ada

column

Daftar kolom yang akan dibaca. type menentukan tipe data. index menentukan posisi kolom (berbasis 0). value menentukan nilai konstan — bidang dihasilkan dari nilai ini, bukan dibaca dari file sumber. Untuk membaca semua kolom sebagai string, gunakan "column": ["*"].

Ya

Tidak ada

fieldDelimiter

Delimiter bidang untuk data TextFile. Tidak diperlukan untuk ORCFile (delimiter default Hive adalah \u0001). Delimiter tidak boleh \n.

Tidak

,

encoding

Encoding file.

Tidak

UTF-8

nullFormat

String yang diinterpretasikan sebagai nilai null. Misalnya, mengatur "nullFormat": "null" memperlakukan string null sebagai bidang null (tidak sama dengan nilai null sebenarnya).

Tidak

Tidak ada

compress

Format kompresi untuk file CSV. Nilai yang didukung: gzip, bz2, zip, lzo, lzo_deflate, hadoop-snappy, framing-snappy. Tidak diperlukan untuk file ORC. LZO memiliki dua format (lzo dan lzo_deflate) — tentukan yang benar.

Tidak

Tidak ada

parquetSchema

Diperlukan ketika fileType adalah parquet. Menggambarkan struktur file Parquet. Lihat Format skema Parquet.

Tidak

Tidak ada

csvReaderConfig

Konfigurasi lanjutan untuk membaca file CSV (tipe Map). Jika tidak diatur, nilai default akan digunakan. Lihat Konfigurasi reader CSV.

Tidak

Tidak ada

hadoopConfig

Parameter Hadoop lanjutan, seperti konfigurasi HA. Lihat Konfigurasi HA Hadoop.

Tidak

Tidak ada

haveKerberos

Apakah autentikasi Kerberos diaktifkan. Jika true, kerberosKeytabFilePath dan kerberosPrincipal wajib diisi.

Tidak

false

kerberosKeytabFilePath

Jalur mutlak file keytab Kerberos. Wajib jika haveKerberos adalah true.

Tidak

Tidak ada

kerberosPrincipal

Nama principal Kerberos, seperti **/hadoopclient@.***. Wajib jika haveKerberos adalah true.

Tidak

Tidak ada

Menentukan jalur baca

Parameter path mendukung tiga pendekatan:

  • Opsi 1: Jalur statis — Membaca satu file atau semua file dalam direktori. Satu file menggunakan satu thread. Contoh: /user/hive/warehouse/mytable01/data.csv.

  • Opsi 2: Jalur wildcard — Membaca beberapa file yang cocok dengan pola. HDFS Reader mendukung * (mencocokkan karakter apa pun) dan ? (mencocokkan satu karakter). Contoh: /hadoop/data_201704*. Jumlah thread aktual adalah nilai terkecil antara jumlah file yang cocok dan pengaturan concurrent.

  • Opsi 3: Jalur partisi — Membaca data dari direktori partisi Hive. Saat tabel Hive dibuat dengan partisi (misalnya, partition(day="20150820", hour="09")), partisi tersebut muncul sebagai struktur direktori di HDFS. Untuk membaca semua data untuk hari tertentu, atur jalurnya sebagai berikut:

    "path": "/user/hive/warehouse/mytable01/20150820/*"
Integrasi Data memperlakukan semua file dalam tugas sinkronisasi sebagai satu tabel. Semua file harus mengikuti skema yang sama, dan akun admin harus memiliki izin baca pada file-file tersebut. Jika nama file mengikuti pola berbasis waktu, gunakan parameter penjadwalan untuk mengganti jalur secara dinamis berdasarkan Waktu bisnis.

Catatan penguraian format file

TextFile dan ORCFile mengurai tipe Hive kompleks secara berbeda. Untuk tipe map, ORCFile menghasilkan {job=80, team=60} sedangkan TextFile menghasilkan {job:80, team:60}. Datanya sama, tetapi formatnya berbeda. Jika data Anda mencakup tipe Hive kompleks, gunakan format file yang konsisten di seluruh jalur. Untuk menyatukan format, ekspor tabel TextFile ke ORCFile di klien Hive.

Format skema Parquet

message MessageTypeName {
    RequiredStatus DataType ColumnName;
    ...;
}
  • MessageTypeName: Nama untuk tipe pesan.

  • RequiredStatus: Gunakan required untuk kolom non-null dan optional untuk kolom nullable. Atur semua kolom ke optional.

  • DataType: Tipe yang didukung adalah BOOLEAN, INT32, INT64, INT96, FLOAT, DOUBLE, BINARY (gunakan untuk tipe string), dan FIXED_LEN_BYTE_ARRAY.

  • Akhiri setiap definisi kolom dengan titik koma, termasuk yang terakhir.

Contoh:

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

Konfigurasi reader CSV

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

Semua field yang tersedia dan nilai default-nya:

boolean caseSensitive = true;
char textQualifier = 34;
boolean trimWhitespace = true;
boolean useTextQualifier = true;   // Apakah akan menggunakan karakter escape CSV
char delimiter = 44;               // Pemisah
char recordDelimiter = 0;
char comment = 35;
boolean useComments = false;
int escapeMode = 1;
boolean safetySwitch = true;       // Apakah membatasi satu kolom hingga 100.000 karakter
boolean skipEmptyRecords = true;   // Apakah melewati baris kosong
boolean captureRawRecord = true;

Konfigurasi HA 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"
}
Parameter dfs.data.transfer.protection, dfs.datanode.use.datanode.hostname, dan dfs.client.use.datanode.hostname mengaktifkan autentikasi Kerberos di plugin HDFS Reader. Jika autentikasi Kerberos sudah dikonfigurasi pada sumber data HDFS, parameter ini tidak diperlukan dalam konfigurasi plugin. Lihat Konfigurasi sumber data HDFS.

Contoh konfigurasi Kerberos

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

Karena Kerberos memerlukan jalur mutlak ke file keytab, deploy konfigurasi ini pada kelompok sumber daya.

Demo skrip Writer

Skrip berikut menunjukkan konfigurasi dasar 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"
            }
        ]
    }
}

Parameter Writer

Parameter

Deskripsi

Wajib

Default

defaultFS

Alamat NameNode untuk HDFS, misalnya, hdfs://127.0.0.1:9000.

Ya

Tidak ada

fileType

Format file output: text (TextFile), orc (ORCFile), atau parquet (Parquet).

Ya

Tidak ada

path

Jalur tujuan di HDFS. HDFS Writer menulis beberapa file ke direktori ini berdasarkan pengaturan concurrent. Untuk menulis ke tabel Hive, atur ini ke jalur penyimpanan tabel Hive di HDFS. Misalnya, untuk tabel bernama hello di database test dengan jalur gudang data Hive /user/hive/warehouse/, jalurnya adalah /user/hive/warehouse/test.db/hello.

Ya

Tidak ada

fileName

Nama dasar file output. Akhiran acak ditambahkan untuk membuat nama file aktual untuk setiap thread.

Ya

Tidak ada

column

Daftar bidang yang akan ditulis. Tentukan semua nama bidang (name) dan tipe (type) — menulis ke subset kolom tidak didukung. Tidak diperlukan ketika fileType adalah parquet.

Ya (tidak diperlukan untuk parquet)

Tidak ada

writeMode

Perilaku ketika file dengan awalan fileName yang sama sudah ada di jalur tujuan. Lihat Mode penulisan.

Ya

Tidak ada

fieldDelimiter

Delimiter bidang untuk file output. Harus sesuai dengan delimiter yang digunakan saat membuat tabel Hive, jika tidak data tidak dapat diquery di Hive. Hanya delimiter satu karakter yang didukung. Tidak diperlukan ketika fileType adalah parquet.

Ya (tidak diperlukan untuk parquet)

Tidak ada

compress

Tipe kompresi untuk file output. Untuk file teks, gzip dan bzip2 didukung. Biarkan kosong untuk tanpa kompresi.

Tidak

Tidak ada

encoding

Format encoding untuk file output.

Tidak

UTF-8

parquetSchema

Diperlukan ketika fileType adalah parquet. Menggambarkan struktur file Parquet. Menggunakan format yang sama dengan parquetSchema Reader.

Tidak

Tidak ada

hadoopConfig

Parameter Hadoop lanjutan, seperti konfigurasi HA. Menggunakan format yang sama dengan hadoopConfig Reader. Juga mendukung HDFS berbasis OSS ketika dataxParquetMode adalah fields.

Tidak

Tidak ada

dataxParquetMode

Mode untuk menyinkronkan file Parquet. fields mendukung tipe kompleks (ARRAY, MAP, STRUCT) dan HDFS di atas OSS. columns adalah default.

Tidak

columns

haveKerberos

Apakah autentikasi Kerberos diaktifkan. Jika true, kerberosKeytabFilePath dan kerberosPrincipal wajib diisi.

Tidak

false

kerberosKeytabFilePath

Jalur mutlak file keytab Kerberos. Wajib jika haveKerberos adalah true.

Tidak

Tidak ada

kerberosPrincipal

Nama principal Kerberos. Wajib jika haveKerberos adalah true.

Tidak

Tidak ada

Mode penulisan

HDFS Writer menggunakan strategi write-and-rename: pertama-tama menulis ke folder sementara, lalu memindahkan file ke jalur tujuan. Parameter writeMode mengontrol bagaimana file yang sudah ada dengan awalan fileName yang sama ditangani sebelum penulisan dimulai.

Mode

Perilaku

append

Tidak ada pembersihan sebelum menulis. HDFS Writer menambahkan file secara langsung tanpa memeriksa konflik.

nonConflict

Gagal menjalankan tugas jika ada file dengan awalan fileName yang sudah ada di direktori tujuan.

truncate

Menghapus semua file dengan awalan fileName di direktori tujuan sebelum menulis. Misalnya, jika "fileName": "abc", semua file yang diawali dengan abc akan dihapus terlebih dahulu.

Format Parquet tidak mendukung mode append. Gunakan nonConflict untuk file Parquet.

Menulis ke HDFS berbasis OSS

Ketika dataxParquetMode adalah fields, HDFS Writer mendukung OSS sebagai penyimpanan dasar. Tambahkan parameter OSS berikut ke 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"
    }
}

Ganti placeholder berikut dengan nilai aktual:

Placeholder

Deskripsi

<your-access-key-id>

ID AccessKey untuk mengakses OSS

<your-access-key-secret>

Rahasia AccessKey untuk mengakses OSS

Langkah selanjutnya