すべてのプロダクト
Search
ドキュメントセンター

DataWorks:HDFS

最終更新日:Aug 22, 2026

DataWorks の Data Integration は、HDFS リーダーと HDFS ライターのプラグインを使用して、Hadoop 分散ファイルシステム (HDFS) に対するデータの読み取りと書き込みをサポートします。

Apsara File Storage for HDFS はサポート対象外です。

サポートされているファイル形式

プラグイン

サポートされているフォーマット

HDFS リーダー

TextFile、ORCFile、RCFile、SequenceFile、CSV、Parquet

HDFS ライター

TextFile、ORCFile、Parquet

リソースグループの要件

HDFS はデータセキュリティのためネットワークホワイトリストを使用しているため、デフォルトリソースグループでは HDFS NameNode および DataNode エンドポイントへの信頼性の高いネットワークアクセスが提供されません。HDFS 同期タスクには、サーバーレスリソースグループまたはデータ統合専用リソースグループを使用してください。

プラグイン

対応リソースグループ

HDFS Reader

サーバーレスリソースグループ (推奨)、データ統合専用リソースグループ

HDFS Writer

データ統合専用リソースグループのみ

制限事項

HDFS リーダー

  • 内部のチャンク分割アルゴリズムのため、単一ファイル のマルチスレッドによる並列読み取りはサポートされていません。複数のファイルを指定した場合、HDFS リーダーはそれらを並列に読み取ります。実際のスレッド数は、ファイル数と concurrent 設定のいずれか小さい方の値になります。

  • HDFS リーダーは Hive のメタストアにアクセスできません。型変換時にデータ型を明示的に指定してください。

  • TextFile および ORCFile に格納された TIMESTAMP データはナノ秒精度です (例: 2015-08-21 22:40:47.397898389) 。 date 型に変換すると、ナノ秒部分が切り捨てられます。ナノ秒部分を保持するには、代わりに列を string 型にマッピングしてください。

  • コードエディタで HDFS の同期タスクを設定する場合、HDFS データソースへのネットワーク接続テストが成功する必要はありません。発生したエラーは無視してください。

  • Data Integration は admin アカウントで実行されます。オペレーティングシステムの admin アカウントには、該当する HDFS ファイルへの読み取りおよび書き込み権限が必要です。権限がない場合は、コードエディタに切り替え、スクリプトに "hdfsUsername": "user_with_permissions" を追加してください。

HDFS ライター

  • サポートされているのは、TextFile、ORCFile、および Parquet 形式のみです。RCFile、SequenceFile、または CSV への書き込みはサポートされていません。

  • 一部の列への書き込みはサポートされていません。HDFS はスキーマを持たないファイルシステムであるため、すべての列を指定する必要があります。

  • 次の Hive データ型はサポートされていません: DECIMAL、BINARY、ARRAY、MAP、STRUCT、および UNION。

  • Hive のパーティションテーブルでは、単一パーティションへの書き込みのみがサポートされています。

  • TextFile の場合、書き込みに使用するフィールドデリミタは、Hive テーブルの作成時に使用したデリミタと一致させる必要があります。これにより、データを Hive テーブルのフィールドに関連付けることができます。

プラグインバージョンの互換性

HDFS リーダーと HDFS ライターは、Hive 1.1.1 および Hadoop 2.7.1 (Apache、リーダーは JDK 1.6 に、ライターは JDK 1.7 に対応) をベースに構築されています。これらのプラグインは、Hadoop 2.5.0、Hadoop 2.6.0、および Hive 1.2.0 でテスト済みです。

HDFS Writer の仕組み

HDFS Writer は、ファイルの競合を回避し、他のプロセスが部分的に書き込まれたファイルを読み取るのを防ぐために、書き込みとリネーム戦略を使用します。

  1. 指定されたパスに基づいて、path_random 命名規則を使用して HDFS 内に一時フォルダーを作成します。

  2. すべてのファイルを一時フォルダーに書き込みます。

  3. すべてのファイルの書き込みが完了したら、一時フォルダーから宛先パスにファイルを移動します。

  4. 一時フォルダーを削除します。

ステップ 2 またはステップ 3 でネットワーク中断または接続エラーが発生した場合は、一時フォルダーと書き込まれたファイルを手動で削除してください。

admin アカウントには、関連する HDFS ファイルに対する読み取りおよび書き込み権限が必要です。

対応フィールドタイプ

HDFS リーダーのタイプマッピング

デフォルトでは、HDFS リーダーは Hive データ型を、Data Integration の内部データ型に次のように変換します。

タイプカテゴリ

Data Integration のデータ型

Hive データ型

整数

long

TINYINT、SMALLINT、INT、BIGINT

浮動小数点

double

FLOAT、DOUBLE

文字列

string

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

日時

date

DATE、タイムスタンプ

ブール

boolean

BOOLEAN

特定のデータ型に関する注記:

  • long:HDFS ファイル内の整数値 (例:123456789)。

  • double:HDFS ファイル内の浮動小数点数 (例:3.1415)。

  • boolean:ブール値 (true または false)。大文字と小文字を区別しません。

  • date:HDFS ファイル内の時刻値 (例:2014-12-31 00:00:00)。

HDFS ライターのタイプマッピング

HDFS ライターは、以下の Hive データ型をサポートしています。カラム設定は、Hive テーブルの対応するカラムのデータ型と一致させる必要があります。

タイプカテゴリ

サポートする Hive データ型

整数

TINYINT、SMALLINT、INT、BIGINT

浮動小数点

FLOAT、DOUBLE

文字列

CHAR、VARCHAR、STRING

ブール

BOOLEAN

日時

DATE、タイムスタンプ

同期タスクの設定

単一テーブルのオフライン同期タスクを設定するには、次をご参照ください。

コードエディタのすべてのパラメーターとスクリプトのデモについては、付録:スクリプトのデモとパラメーターの説明をご参照ください。

付録:スクリプトのデモとパラメーターの説明

Reader スクリプトのデモ

次のスクリプトは、基本的な HDFS Reader の設定を示しています。すべての例では、datasource パラメーターを使用して、DataWorks で設定された HDFS データソースを参照します。

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

次の例は、parquetSchema を使用して HDFS Reader を設定し、Parquet ファイルを読み取る方法を示しています。fileType を parquet に設定し、完全なスキーマを指定します。column パラメーター内の index を使用して、必要な列を選択し、マッピングします。

"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 のパラメーター

パラメーター

説明

必須

デフォルト

path

読み取るファイルのパス。静的パス、ワイルドカード、パーティションパスの詳細については、「読み取りパスの指定」をご参照ください。

はい

なし

defaultFS

HDFS NameNode のアドレス (例:hdfs://127.0.0.1:9000)。パブリックリソースグループは、Hadoop の高可用性 (HA) 設定をサポートしていません。

はい

なし

fileType

ファイル形式:TEXT、ORC、RC、SEQ、CSV、または parquet。読み取り前に、HDFS Reader はパス内のすべてのファイルがこの形式と一致することを確認します。一致しない場合、ジョブは失敗します。「ファイル形式の解析に関する注意事項」をご参照ください。

はい

なし

column

読み取る列のリスト。type はデータ型を指定します。index は列の位置 (0 から始まる) を指定します。value は定数を指定します。フィールドはソースファイルから読み取るのではなく、この値から生成されます。すべての列を文字列として読み取るには、"column": ["*"] を使用します。

はい

なし

fieldDelimiter

TextFile データのフィールド区切り文字。ORCFile には不要です (Hive のデフォルトの区切り文字は \u0001 です)。区切り文字を \n にすることはできません。

いいえ

,

encoding

ファイルエンコーディング。

いいえ

UTF-8

nullFormat

null 値として解釈する文字列。たとえば、"nullFormat": "null" と設定すると、文字列 null が null フィールドとして扱われます (実際の null 値とは異なります)。

いいえ

なし

compress

CSV ファイルの圧縮形式。サポートされている値:gzip、bz2、zip、lzo、lzo_deflate、hadoop-snappy、framing-snappy。ORC ファイルには不要です。LZO には 2 つの形式 (lzo と lzo_deflate) があります。正しい形式を指定してください。

いいえ

なし

parquetSchema

fileType が parquet の場合に必須です。Parquet ファイルの構造を記述します。「Parquetスキーマ形式」をご参照ください。

いいえ

なし

csvReaderConfig

CSV ファイルを読み取るための高度な設定 (Map 型)。設定しない場合は、デフォルト値が使用されます。「CSV リーダーの設定」をご参照ください。

いいえ

なし

hadoopConfig

HA 設定などの高度な Hadoop パラメーター。「Hadoop HA設定」をご参照ください。

いいえ

なし

haveKerberos

Kerberos 認証が有効かどうか。true の場合、kerberosKeytabFilePath と kerberosPrincipal が必須です。

いいえ

false

kerberosKeytabFilePath

Kerberos キータブファイルの絶対パス。haveKerberos が true の場合に必須です。

いいえ

なし

kerberosPrincipal

Kerberos プリンシパル名 (例:**/hadoopclient@.***)。haveKerberos が true の場合に必須です。

いいえ

なし

読み取りパスの指定

path パラメーターは、3 つのアプローチをサポートしています:

  • オプション1:静的パス。単一のファイル、またはディレクトリ内のすべてのファイルを読み取ります。単一のファイルは 1 つのスレッドを使用します。例:/user/hive/warehouse/mytable01/data.csv。

  • オプション 2: ワイルドカードパス — パターンに一致する複数のファイルを読み取ります。HDFS Reader は * (任意の文字に一致) と ? (単一の文字に一致) をサポートしています。例: /hadoop/data_201704*。実際のスレッド数は、一致するファイルの数と concurrent 設定のうち、小さい方の値になります。

  • オプション3:パーティションパス。Hive パーティションディレクトリからデータを読み取ります。Hive テーブルがパーティション付きで作成されると (例:partition(day="20150820", hour="09"))、パーティションは HDFS 上でディレクトリ構造として表示されます。特定の日のすべてのデータを読み取るには、パスを次のように設定します:

    "path": "/user/hive/warehouse/mytable01/20150820/*"
データ統合では、同期タスク内のすべてのファイルが 1 つのテーブルとして扱われます。すべてのファイルは同じスキーマに準拠する必要があり、admin アカウントには、それらのファイルに対する読み取り権限が必要です。ファイル名が時間ベースのパターンに従っている場合は、スケジューリングパラメーター を使用して、業務時間に基づいてパスを動的に置き換えることができます。

ファイル形式の解析に関する注意事項

TextFile と ORCFile では、Hive の複雑なデータ型の解析方法が異なります。map 型の場合、ORCFile は {job=80, team=60} を生成しますが、TextFile は {job:80, team:60} を生成します。データは同じですが、形式が異なります。データに Hive の複雑なデータ型が含まれている場合は、パス全体で一貫したファイル形式を使用してください。形式を統一するには、Hive クライアントで TextFile テーブルを ORCFile にエクスポートします。

Parquet スキーマ形式

message MessageTypeName {
    RequiredStatus DataType ColumnName;
    ...;
}
  • MessageTypeName:メッセージタイプの名前。

  • RequiredStatus: 非 null 列には required を、null 許容列には optional を使用します。すべての列を optional に設定します。

  • データ型: サポートされている型は BOOLEAN、INT32、INT64、INT96、FLOAT、DOUBLE、BINARY (文字列型に使用します)、および FIXED_LEN_BYTE_ARRAY です。

  • 最後の列定義を含め、各列定義の末尾にセミコロンを付けます。

例:

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

CSV リーダーの設定

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

利用可能なすべてのフィールドとそのデフォルト値:

boolean caseSensitive = true;
char textQualifier = 34;
boolean trimWhitespace = true;
boolean useTextQualifier = true;   // CSV エスケープ文字を使用するかどうか
char delimiter = 44;               // 区切り文字
char recordDelimiter = 0;
char comment = 35;
boolean useComments = false;
int escapeMode = 1;
boolean safetySwitch = true;       // 単一の列を 100,000 文字に制限するかどうか
boolean skipEmptyRecords = true;   // 空の行をスキップするかどうか
boolean captureRawRecord = true;

Hadoop HA 設定

"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、および dfs.client.use.datanode.hostname パラメーターは、HDFS Reader プラグインで Kerberos 認証を有効にします。 HDFS データソースで Kerberos 認証がすでに設定されている場合、これらのパラメーターはプラグイン設定では必要ありません。 詳細については、「HDFS データソースを設定する」をご参照ください。

Kerberos 設定の例

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

Kerberos はキータブファイルへの絶対パスを必要とするため、この設定をリソースグループにデプロイしてください。

Writer スクリプトのデモ

次のスクリプトは、基本的な 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"
            }
        ]
    }
}

Writer のパラメーター

パラメーター

説明

必須

デフォルト

defaultFS

HDFS の NameNode アドレス、たとえば hdfs://127.0.0.1:9000 です。

はい

なし

fileType

出力ファイル形式: text (TextFile)、orc (ORCFile)、または parquet (Parquet)。

はい

なし

path

HDFS 内の宛先パスです。 HDFS Writer は、concurrent 設定に基づいてこのディレクトリに複数のファイルを書き込みます。 Hive テーブルに書き込むには、このパスを HDFS 上の Hive テーブルのストレージパスに設定します。 たとえば、test データベースにあり、Hive データウェアハウスのパスが /user/hive/warehouse/ である hello という名前のテーブルの場合、パスは /user/hive/warehouse/test.db/hello となります。

はい

なし

fileName

出力ファイルのベースファイル名。各スレッドの実際のファイル名を作成するために、ランダムなサフィックスが追加されます。

はい

なし

column

書き込むフィールドのリスト。すべてのフィールド名 (name) と型 (type) を指定します。一部の列への書き込みはサポートされていません。fileType が parquet の場合は不要です。

はい (parquet の場合は不要です)

なし

writeMode

宛先パスに同じ fileName プレフィックスを持つファイルが既に存在する場合の動作。詳細については、「書き込みモード」をご参照ください。

はい

なし

fieldDelimiter

出力ファイルのフィールド区切り文字です。Hive テーブルの作成時に使用した区切り文字と一致させる必要があります。そうでない場合、Hive でデータをクエリできません。単一文字の区切り文字のみがサポートされています。fileType が parquet の場合は不要です。

はい (parquet の場合は不要です)

なし

compress

出力ファイルの圧縮タイプです。テキストファイルでは、gzip と bzip2 がサポートされています。圧縮しない場合は、空白のままにしてください。

いいえ

なし

encoding

出力ファイルのエンコーディング形式。

いいえ

UTF-8

parquetSchema

fileType が parquet の場合に必須です。Parquet ファイルの構造を記述します。Reader の parquetSchema と同じ形式を使用します。

はい (fileType が parquet の場合)

なし

hadoopConfig

HA 設定などの高度な Hadoop パラメーターです。Reader の hadoopConfig と同じ形式を使用します。また、dataxParquetMode が fields の場合、OSS ベースの HDFS もサポートします。

いいえ

なし

dataxParquetMode

Parquet ファイルを同期するためのモードです。fields は、複合型 (ARRAY、MAP、STRUCT) および HDFS over OSS をサポートします。columns がデフォルトです。

いいえ

columns

haveKerberos

Kerberos 認証が有効かどうか。 true の場合、kerberosKeytabFilePath と kerberosPrincipal が必須です。

いいえ

false

kerberosKeytabFilePath

Kerberos keytab ファイルの絶対パス。haveKerberos が true の場合は必須です。

いいえ

なし

kerberosPrincipal

Kerberos プリンシパル名。haveKerberos が true の場合は必須です。

いいえ

なし

書き込みモード

HDFS Writer は、最初に一時フォルダーに書き込み、次にファイルを宛先パスに移動する「書き込みとリネーム」戦略を採用しています。writeMode パラメーターは、書き込みが開始される前に、同じ fileName プレフィックスを持つ既存のファイルがどのように処理されるかを制御します。

モード

動作

append

書き込み前にクリーンアップは行いません。HDFS Writer は、競合をチェックせずにファイルを直接追加します。

nonConflict

宛先ディレクトリに fileName プレフィックスを持つファイルがすでに存在する場合、タスクは失敗します。

truncate

書き込みの前に、宛先ディレクトリで fileName プレフィックスで始まるすべてのファイルを削除します。たとえば、"fileName": "abc" の場合、abc で始まるすべてのファイルが最初に削除されます。

Parquet フォーマットは append モードをサポートしていません。Parquet ファイルには nonConflict を使用してください。

OSS バックエンドの HDFS への書き込み

dataxParquetMode が fields の場合、HDFS Writer は基盤となるストレージとして OSS をサポートします。hadoopConfig に次の OSS パラメーターを追加します:

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

次のプレースホルダーを実際の値に置き換えてください:

プレースホルダー

説明

<お使いのアクセスキー ID>

OSS にアクセスするための AccessKey ID

<お使いのアクセスキーシークレット>

OSS にアクセスするための AccessKey シークレット

次のステップ