Tüm Ürünler
Search
Belge Merkezi

DataWorks:HDFS

Son Güncelleme:Oct 05, 2026

DataWorks Data Integration, HDFS Reader ve HDFS Writer eklentileri aracılığıyla Hadoop Distributed File System (HDFS) üzerinden veri okumayı ve yazmayı destekler.

Apsara File Storage for HDFS desteklenmez.

Desteklenen dosya biçimleri


Eklenti


Desteklenen biçimler


HDFS Reader


TextFile, ORCFile, RCFile, SequenceFile, CSV, Parquet


HDFS Writer


TextFile, ORCFile, Parquet

Kaynak grubu gereksinimleri

HDFS, veri güvenliği için ağ beyaz listesi kullanır ve varsayılan kaynak grubu, HDFS NameNode ve DataNode uç noktalarına güvenilir ağ erişimi sağlamaz. HDFS senkronizasyon görevleri için bir serverless resource group veya bir exclusive resource group for Data Integration kullanın.


Eklenti


Desteklenen kaynak grupları


HDFS Reader


Serverless resource group (önerilen), exclusive resource group for Data Integration


HDFS Writer


Yalnızca exclusive resource group for Data Integration

Sınırlamalar

HDFS Reader

  • Dahili parçalama algoritması nedeniyle tek bir dosyanın çok iş parçacıklı eşzamanlı okunması desteklenmez. Birden fazla dosya belirtildiğinde HDFS Reader bunları eşzamanlı olarak okur; gerçek iş parçacığı sayısı, dosya sayısı ile concurrent ayarından küçük olanıdır.

  • HDFS Reader, Hive'ın metastore'una erişemez. Tür dönüşümü sırasında veri türlerini açıkça belirtin.

  • TextFile ve ORCFile'da depolanan TIMESTAMP verileri nanosaniye hassasiyetindedir (örneğin, 2015-08-21 22:40:47.397898389). date türüne dönüştürme nanosaniye kısmını düşürür. Bu kısmı korumak için sütunu bunun yerine string türüne eşleyin.

  • Kod düzenleyicide bir HDFS senkronizasyon görevini yapılandırırken görev, HDFS veri kaynağı için başarılı bir ağ bağlantısı testi gerektirmez. Ortaya çıkan hataları yoksayın.

  • Data Integration, admin hesabı altında çalışır. İşletim sisteminin admin hesabının ilgili HDFS dosyalarında okuma ve yazma izinlerine sahip olması gerekir. Aksi takdirde kod düzenleyiciye geçin ve betiğe "hdfsUsername": "user_with_permissions" ekleyin.

HDFS Writer

  • Yalnızca TextFile, ORCFile ve Parquet biçimleri desteklenir. RCFile, SequenceFile veya CSV'ye yazma desteklenmez.

  • Sütunların bir alt kümesine yazma desteklenmez. HDFS şemasız bir dosya sistemi olduğundan tüm sütunlar belirtilmelidir.

  • Aşağıdaki Hive veri türleri desteklenmez: DECIMAL, BINARY, ARRAY, MAP, STRUCT ve UNION.

  • Hive bölümlenmiş tablolar için yalnızca tek bölüm yazma işlemi desteklenir.

  • TextFile için yazma sırasında kullanılan alan sınırlayıcı, Hive tablosu oluşturulurken kullanılan sınırlayıcıyla eşleşmelidir; böylece veriler Hive tablo alanlarıyla ilişkilendirilebilir.

Eklenti sürüm uyumluluğu

Hem HDFS Reader hem de HDFS Writer, Hive 1.1.1 ve Hadoop 2.7.1 (Apache, Reader için JDK 1.6 ve Writer için JDK 1.7'ye uyarlanmış) üzerine kuruludur. Eklentiler Hadoop 2.5.0, Hadoop 2.6.0 ve Hive 1.2.0 ile test edilmiştir.

HDFS Writer'ın çalışma şekli

HDFS Writer, dosya çakışmalarını önlemek ve diğer işlemlerin kısmen yazılmış dosyaları okumasını engellemek için yaz-ve-yeniden-adlandır stratejisini kullanır:

  1. Belirtilen yola göre path_random adlandırma kuralını kullanarak HDFS'de geçici bir klasör oluşturur.

  2. Tüm dosyaları geçici klasöre yazar.

  3. Tüm dosyalar yazıldıktan sonra bunları geçici klasörden hedef yola taşır.

  4. Geçici klasörü siler.

2. veya 3. adımlar sırasında bir ağ kesintisi veya bağlantı hatası oluşursa geçici klasörü ve yazılan tüm dosyaları manuel olarak silin.

admin hesabının ilgili HDFS dosyalarında okuma ve yazma izinlerine sahip olması gerekir.

Desteklenen alan türleri

HDFS Reader tür eşlemesi

Varsayılan olarak HDFS Reader, Hive veri türlerini aşağıdaki gibi Data Integration dahili türlerine dönüştürür:


Tür kategorisi


Data Integration türü


Hive veri türleri


Tamsayı


long


TINYINT, SMALLINT, INT, BIGINT


Kayan nokta


double


FLOAT, DOUBLE


Dize


string


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


Tarih/Saat


date


DATE, TIMESTAMP


Boole


boolean


BOOLEAN

Belirli türlere ilişkin notlar:

  • long: Bir HDFS dosyasındaki tamsayı değerleri, örneğin 123456789.

  • double: Bir HDFS dosyasındaki kayan nokta değerleri, örneğin 3.1415.

  • boolean: Boole değerleri (true veya false). Büyük/küçük harfe duyarlı değildir.

  • date: Bir HDFS dosyasındaki saat değerleri, örneğin 2014-12-31 00:00:00.

HDFS Writer tür eşlemesi

HDFS Writer aşağıdaki Hive veri türlerini destekler. Sütun yapılandırması, Hive tablosundaki karşılık gelen sütun türleriyle eşleşmelidir.


Tür kategorisi


Desteklenen Hive veri türleri


Tamsayı


TINYINT, SMALLINT, INT, BIGINT


Kayan nokta


FLOAT, DOUBLE


Dize


CHAR, VARCHAR, STRING


Boole


BOOLEAN


Tarih/Saat


DATE, TIMESTAMP

Senkronizasyon görevi yapılandırma

Tek tablo çevrimdışı senkronizasyon görevi yapılandırmak için bkz.:

Kod düzenleyici için tüm parametreler ve bir betik örneği için Ek: Betik demosu ve parametre açıklamaları konusuna bakın.

Ek: Betik demosu ve parametre açıklamaları

Reader betik demosu

Aşağıdaki betik temel bir HDFS Reader yapılandırmasını gösterir. Tüm örnekler, DataWorks'te yapılandırılan HDFS veri kaynağını başvurmak için datasource parametresini kullanır.

{
    "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"
            }
        ]
    }
}

Aşağıdaki örnek, parquetSchema kullanarak bir Parquet dosyasını okumak için HDFS Reader'ın nasıl yapılandırılacağını gösterir. fileType değerini parquet olarak ayarlayın ve tam şemayı belirtin. Gerekli sütunları seçmek ve eşlemek için column parametresindeki index değerini kullanın.

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

Reader parametreleri


Parametre


Açıklama


Gerekli


Varsayılan


path


Okunacak dosyaların yolu. Statik yollar, joker karakterler ve bölüm yolları hakkında ayrıntılar için Okuma yolunu belirtme konusuna bakın.


Evet


Yok


defaultFS


HDFS NameNode adresi, örneğin hdfs://127.0.0.1:9000. Genel kaynak grubu Hadoop yüksek kullanılabilirlik (HA) yapılandırmasını desteklemez.


Evet


Yok


fileType


Dosya biçimi: TEXT, ORC, RC, SEQ, CSV veya parquet. Okumadan önce HDFS Reader, yoldaki tüm dosyaların bu biçimle eşleştiğini doğrular. Eşleşmezse görev başarısız olur. Dosya biçimi ayrıştırma notları konusuna bakın.


Evet


Yok


column


Okunacak sütunların listesi. type veri türünü belirtir. index sütun konumunu (0 tabanlı) belirtir. value bir sabit değer belirtir — alan kaynak dosyadan okunmak yerine bu değerden oluşturulur. Tüm sütunları dize olarak okumak için "column": ["*"] kullanın.


Evet


Yok


fieldDelimiter


TextFile verileri için alan sınırlayıcı. ORCFile için gerekli değildir (Hive'ın varsayılan sınırlayıcısı \u0001). Sınırlayıcı \n olamaz.


Hayır


,


encoding


Dosya kodlaması.


Hayır


UTF-8


nullFormat


Null değer olarak yorumlanacak dize. Örneğin, "nullFormat": "null" ayarlamak null dizesini null alan olarak değerlendirir (gerçek bir null değeriyle aynı değildir).


Hayır


Yok


compress


CSV dosyaları için sıkıştırma biçimi. Desteklenen değerler: gzip, bz2, zip, lzo, lzo_deflate, hadoop-snappy, framing-snappy. ORC dosyaları için gerekli değildir. LZO'nun iki biçimi vardır (lzo ve lzo_deflate) — doğru olanı belirtin.


Hayır


Yok


parquetSchema


fileType değeri parquet olduğunda gereklidir. Parquet dosyasının yapısını açıklar. Parquet şema biçimi konusuna bakın.


Hayır


Yok


csvReaderConfig


CSV dosyalarını okumak için gelişmiş yapılandırma (Map türü). Ayarlanmazsa varsayılan değerler kullanılır. CSV reader yapılandırması konusuna bakın.


Hayır


Yok


hadoopConfig


HA yapılandırması gibi gelişmiş Hadoop parametreleri. Hadoop HA yapılandırması konusuna bakın.


Hayır


Yok


haveKerberos


Kerberos kimlik doğrulamasının etkin olup olmadığı. true ise kerberosKeytabFilePath ve kerberosPrincipal gereklidir.


Hayır


false


kerberosKeytabFilePath


Kerberos keytab dosyasının mutlak yolu. haveKerberos değeri true ise gereklidir.


Hayır


Yok


kerberosPrincipal


Kerberos asıl adı, örneğin **/hadoopclient@.***. haveKerberos değeri true ise gereklidir.


Hayır


Yok

Okuma yolunu belirtme

path parametresi üç yaklaşımı destekler:

  • Seçenek 1: Statik yol — Tek bir dosyayı veya bir dizindeki tüm dosyaları okur. Tek bir dosya bir iş parçacığı kullanır. Örnek: /user/hive/warehouse/mytable01/data.csv.

  • Seçenek 2: Joker karakterli yol — Bir desene uyan birden fazla dosyayı okur. HDFS Reader * (herhangi bir karakterle eşleşir) ve ? (tek bir karakterle eşleşir) karakterlerini destekler. Örnek: /hadoop/data_201704*. Gerçek iş parçacığı sayısı, eşleşen dosya sayısı ile concurrent ayarından küçük olanıdır.

  • Seçenek 3: Bölüm yolu — Bir Hive bölüm dizininden veri okur. Bir Hive tablosu bölümlerle oluşturulduğunda (örneğin, partition(day="20150820", hour="09")), bölüm HDFS'de bir dizin yapısı olarak görünür. Belirli bir gün için tüm verileri okumak üzere yolu aşağıdaki gibi ayarlayın:

    "path": "/user/hive/warehouse/mytable01/20150820/*"
Data Integration, bir senkronizasyon görevindeki tüm dosyaları tek bir tablo olarak değerlendirir. Tüm dosyalar aynı şemaya uygun olmalı ve admin hesabında bunlar üzerinde okuma izinleri bulunmalıdır. Dosya adları zamana dayalı bir deseni izliyorsa yolu iş zamanına göre dinamik olarak değiştirmek için zamanlama parametreleri kullanın.

Dosya biçimi ayrıştırma notları

TextFile ve ORCFile karmaşık Hive türlerini farklı şekilde ayrıştırır. map türü için ORCFile {job=80, team=60} üretirken TextFile {job:80, team:60} üretir. Veriler aynıdır ancak biçim farklıdır. Verileriniz karmaşık Hive türleri içeriyorsa yol boyunca tutarlı bir dosya biçimi kullanın. Biçimi birleştirmek için TextFile tablolarını Hive istemcisinde ORCFile'a aktarın.

Parquet şema biçimi

message MessageTypeName {
    RequiredStatus DataType ColumnName;
    ...;
}
  • MessageTypeName: İleti türü için bir ad.

  • RequiredStatus: Null olmayan sütunlar için required ve null kabul eden sütunlar için optional kullanın. Tüm sütunları optional olarak ayarlayın.

  • DataType: Desteklenen türler BOOLEAN, INT32, INT64, INT96, FLOAT, DOUBLE, BINARY (dize türleri için kullanın) ve FIXED_LEN_BYTE_ARRAY şeklindedir.

  • Her sütun tanımını sonuncusu dahil olmak üzere noktalı virgülle bitirin.

Örnek:

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

CSV reader yapılandırması

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

Mevcut tüm alanlar ve varsayılanları:

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;

Hadoop HA yapılandırması

"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"
}
dfs.data.transfer.protection , dfs.datanode.use.datanode.hostname ve dfs.client.use.datanode.hostname parametreleri HDFS Reader eklentisinde Kerberos kimlik doğrulamasını etkinleştirir. HDFS veri kaynağında Kerberos kimlik doğrulaması zaten yapılandırılmışsa bu parametrelerin eklenti yapılandırmasında bulunması gerekmez. HDFS veri kaynağı yapılandırma konusuna bakın.

Kerberos yapılandırma örneği

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

Kerberos, keytab dosyasının mutlak yolunu gerektirdiğinden bu yapılandırmayı bir kaynak grubuna dağıtın.

Writer betik demosu

Aşağıdaki betik temel bir HDFS Writer yapılandırmasını gösterir.

{
    "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"
            }
        ]
    }
}

Writer parametreleri


Parametre


Açıklama


Gerekli


Varsayılan


defaultFS


HDFS için NameNode adresi, örneğin hdfs://127.0.0.1:9000.


Evet


Yok


fileType


Çıktı dosyası biçimi: text (TextFile), orc (ORCFile) veya parquet (Parquet).


Evet


Yok


path


HDFS'deki hedef yol. HDFS Writer, concurrent ayarına göre bu dizine birden fazla dosya yazar. Bir Hive tablosuna yazmak için bunu HDFS üzerindeki Hive tablosunun depolama yoluna ayarlayın. Örneğin, test veritabanındaki hello adlı bir tablo için Hive veri ambarı yolu /user/hive/warehouse/ ise yol /user/hive/warehouse/test.db/hello olur.


Evet


Yok


fileName


Çıktı dosyaları için temel dosya adı. Her iş parçacığı için gerçek dosya adını oluşturmak üzere rastgele bir sonek eklenir.


Evet


Yok


column


Yazılacak alanların listesi. Tüm alan adlarını (name) ve türleri (type) belirtin — sütunların bir alt kümesine yazma desteklenmez. fileType değeri parquet olduğunda gerekli değildir.


Evet (parquet için gerekli değil)


Yok


writeMode


Hedef yolda aynı fileName önekine sahip dosyalar zaten varsa davranış. Yazma modları konusuna bakın.


Evet


Yok


fieldDelimiter


Çıktı dosyaları için alan sınırlayıcı. Hive tablosu oluşturulurken kullanılan sınırlayıcıyla eşleşmelidir; aksi takdirde veriler Hive'da sorgulanamaz. Yalnızca tek karakterli sınırlayıcılar desteklenir. fileType değeri parquet olduğunda gerekli değildir.


Evet (parquet için gerekli değil)


Yok


compress


Çıktı dosyaları için sıkıştırma türü. Metin dosyaları için gzip ve bzip2 desteklenir. Sıkıştırma yoksa boş bırakın.


Hayır


Yok


encoding


Çıktı dosyaları için kodlama biçimi.


Hayır


UTF-8


parquetSchema


fileType değeri parquet olduğunda gereklidir. Parquet dosyasının yapısını açıklar. Reader'ın parquetSchema değeriyle aynı biçimi kullanır.


Hayır


Yok


hadoopConfig


HA yapılandırması gibi gelişmiş Hadoop parametreleri. Reader'ın hadoopConfig değeriyle aynı biçimi kullanır. dataxParquetMode değeri fields olduğunda OSS destekli HDFS'yi de destekler.


Hayır


Yok


dataxParquetMode


Parquet dosyalarını senkronize etme modu. fields karmaşık türleri (ARRAY, MAP, STRUCT) ve OSS üzerinden HDFS'yi destekler. columns varsayılandır.


Hayır


columns


haveKerberos


Kerberos kimlik doğrulamasının etkin olup olmadığı. true ise kerberosKeytabFilePath ve kerberosPrincipal gereklidir.


Hayır


false


kerberosKeytabFilePath


Kerberos keytab dosyasının mutlak yolu. haveKerberos değeri true ise gereklidir.


Hayır


Yok


kerberosPrincipal


Kerberos asıl adı. haveKerberos değeri true ise gereklidir.


Hayır


Yok

Yazma modları

HDFS Writer yaz-ve-yeniden-adlandır stratejisini kullanır: önce geçici bir klasöre yazar, ardından dosyaları hedef yola taşır. writeMode parametresi, yazma başlamadan önce aynı fileName önekine sahip mevcut dosyaların nasıl ele alınacağını kontrol eder.


Mod


Davranış


append


Yazmadan önce temizleme yapılmaz. HDFS Writer, çakışmaları kontrol etmeden dosyaları doğrudan ekler.


nonConflict


Hedef dizinde fileName önekine sahip herhangi bir dosya varsa görevi başarısız kılar.


truncate


Yazmadan önce hedef dizindeki fileName önekine sahip tüm dosyaları siler. Örneğin, "fileName": "abc" ise abc ile başlayan tüm dosyalar önce silinir.

Parquet biçimi append modunu desteklemez. Parquet dosyaları için nonConflict kullanın.

OSS destekli HDFS'ye yazma

dataxParquetMode değeri fields olduğunda HDFS Writer, temel depolama olarak OSS'yi destekler. Aşağıdaki OSS parametrelerini hadoopConfig öğesine ekleyin:

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

Aşağıdaki yer tutucuları gerçek değerlerle değiştirin:


Yer Tutucu


Açıklama


<your-access-key-id>


OSS'ye erişmek için AccessKey ID


<your-access-key-secret>


OSS'ye erişmek için AccessKey secret

Sonraki adımlar