全部產品
Search
文件中心

DataWorks:HDFS資料來源

更新時間:Oct 25, 2024

HDFS是一個Distributed File System,為您提供讀取和寫入HDFS雙向通道的功能,本文為您介紹DataWorks的HDFS資料同步的能力支援情況。

支援的版本

目前不支援阿里雲Apsara File Storage for HDFS版。

使用限制

離線讀

使用HDFS Reader時,請注意以下事項:

  • 由於連通預設資源群組到HDFS的網路鏈路比較複雜,建議您使用Serverless資源群組(推薦)獨享Data Integration資源群組完成資料同步任務。您需要確保您的資源群組具備HDFS的namenodedatanode的網路訪問能力。

  • HDFS預設情況下,使用網路白名單進行資料安全。基於此種情況,建議您使用Serverless資源群組(推薦)獨享Data Integration資源群組完成針對HDFS的資料同步任務。

  • 您通過指令碼模式配置HDFS同步作業,並不依賴HDFS資料來源網路連通性測試通過,針對此類錯誤您可以臨時忽略。

  • Data Integration同步進程以admin帳號啟動,您需要確保作業系統的admin帳號具備訪問相應HDFS檔案的讀寫權限,若無許可權,可以轉指令碼模式,添加"hdfsUsername": "有許可權的使用者"

HDFS Reader支援以下功能:

  • 支援TextFile、ORCFile、rcfile、sequence file、csv和parquet格式的檔案,且要求檔案內容存放的是一張邏輯意義上的二維表。

  • 支援多種類型資料讀取(使用String表示),支援列裁剪,支援列常量。

  • 支援遞迴讀取、支援Regex*?

  • 支援ORCFile資料壓縮,目前支援SNAPPYZLIB兩種壓縮方式。

  • 支援SequenceFile資料壓縮,目前支援lZO壓縮方式。

  • 多個File可以支援並發讀取。

  • CSV類型支援壓縮格式有gzip、bz2、zip、lzo、lzo_deflate和snappy。

  • 目前外掛程式中Hive版本為1.1.1,Hadoop版本為2.7.1(Apache適配JDK1.6],在Hadoop 2.5.0、Hadoop 2.6.0和Hive 1.2.0測試環境中寫入正常。

重要

HDFS Reader暫不支援單個File多線程並發讀取,此處涉及到單個File內部切分演算法。

離線寫

使用HDFS Writer時,請注意以下事項:

  • 目前HDFS Writer僅支援TextFile、ORCFile和ParquetFile三種格式的檔案,且檔案內容存放的必須是一張邏輯意義上的二維表。

  • 由於HDFS是檔案系統,不存在schema的概念,因此不支援對部分列寫入。

  • 目前不支援DECIMAL、BINARY、ARRAYS、MAPS、STRUCTS和UNION等Hive資料類型。

  • 對於Hive分區表目前僅支援一次寫入單個分區。

  • 對於TextFile,需要保證寫入HDFS檔案的分隔字元與在Hive上建立表時的分隔字元一致,從而實現寫入HDFS資料與Hive表欄位關聯。

  • 目前外掛程式中的Hive版本為1.1.1,Hadoop版本為2.7.1(Apache為適配JDK1.7)。在Hadoop2.5.0、Hadoop2.6.0和Hive1.2.0測試環境中寫入正常。

  • HDFS Writer僅支援使用獨享Data Integration資源群組

實現過程

HDFS Writer的實現過程如下所示:

  1. 根據您指定的path,建立一個HDFS檔案系統上不存在的臨時目錄。

    建立規則:path_隨機

  2. 將讀取的檔案寫入這個臨時目錄。

  3. 全部寫入後,將臨時目錄下的檔案移動到您指定的目錄(在建立檔案時保證檔案名稱不重複)。

  4. 刪除臨時目錄。如果在此過程中,發生網路中斷等情況造成無法與HDFS建立串連,需要您手動刪除已經寫入的檔案和臨時目錄。

說明

資料同步需要使用Admin帳號,並且有訪問相應檔案的讀寫權限。

支援的欄位類型

離線讀

由於檔案表的中繼資料資訊由Hive維護,並存放在Hive自己維護的中繼資料庫(如MySQL)中。目前HDFS Reader不支援對Hive中繼資料的資料庫進行訪問查詢,因此您在進行類型轉換時,必須指定資料類型。

RCFile、ParquetFile、ORCFile、TextFile和SequenceFile中的類型,會預設轉為Data Integration支援的內部類型,如下表所示。

類型分類

Data Integrationcolumn配置類型

Hive資料類型

整數類

long

tinyint、smallint、int和bigint

浮點類

double

float和double

字串類

string

string、char、varchar、struct、map、array、union和binary

日期時間類

date

date和timestamp

布爾類

boolean

boolean

說明
  • long:HDFS檔案中的整數型別資料,例如123456789

  • double:HDFS檔案中的浮點類型資料,例如3.1415

  • bool:HDFS檔案中的布爾類型資料,例如truefalse,不區分大小寫。

  • date:HDFS檔案中的時間類型資料,例如2014-12-31 00:00:00

Hive支援的資料類型TIMESTAMP可以精確到納秒層級,所以TextFile、ORCFile中TIMESTAMP存放的資料類似於2015-08-21 22:40:47.397898389。如果轉換的類型配置為Data Integration的DATE,轉換之後會導致納秒部分丟失。所以如果需要保留納秒部分的資料,請配置轉換類型為Data Integration的字串類型。

離線寫

HDFS Writer提供向HDFS檔案系統指定路徑中寫入TextFile檔案、 ORCFile檔案以及ParquetFile格式檔案,檔案內容可以與Hive中的表關聯。目前HDFS Writer支援大部分Hive類型,請注意檢查您的資料類型。

HDFS Writer針對Hive資料類型的轉換列表,如下所示。

說明

column的配置需要和Hive表對應的列類型保持一致。

類型分類

資料庫資料類型

整數類

TINYINT、SMALLINT、INT和BIGINT

浮點類

FLOAT和DOUBLE

字串類

CHAR、VARCHAR和STRING

布爾類

BOOLEAN

日期時間類

DATE和TIMESTAMP

建立資料來源

在進行資料同步任務開發時,您需要在DataWorks上建立一個對應的資料來源,操作流程請參見建立並管理資料來源詳細的配置參數解釋可在配置介面查看對應參數的文案提示

資料同步任務開發

資料同步任務的配置入口和通用配置流程可參見下文的配置指導。

單表離線同步任務配置指導

附錄:指令碼Demo與參數說明

離線任務指令碼配置方式

如果您配置離線任務時使用指令碼模式的方式進行配置,您需要按照統一的指令碼格式要求,在任務指令碼中編寫相應的參數,詳情請參見通過指令碼模式配置離線同步任務,以下為您介紹指令碼模式下資料來源的參數配置詳情。

Reader指令碼Demo

{
    "type": "job",
    "version": "2.0",
    "steps": [
        {
            "stepType": "hdfs",//外掛程式名
            "parameter": {
                "path": "",//要讀取的檔案路徑
                "datasource": "",//資料來源
                "hadoopConfig":{
                "dfs.data.transfer.protection": "integrity",
               "dfs.datanode.use.datanode.hostname" :"true",
                "dfs.client.use.datanode.hostname":"true"
                 },
                "column": [
                    {
                        "index": 0,//序號,index從0開始(下標索引從0開始計數),表示從本地文字檔第一列開始讀取資料。
                        "type": "string"//欄位類型
                    },
                    {
                        "index": 1,
                        "type": "long"
                    },
                    {
                        "index": 2,
                        "type": "double"
                    },
                    {
                        "index": 3,
                        "type": "boolean"
                    },
                    {
                        "format": "yyyy-MM-dd HH:mm:ss", //日期格式
                        "index": 4,
                        "type": "date"
                    }
                ],
                "fieldDelimiter": ",",//資料行分隔符號
                "encoding": "UTF-8",//編碼格式
                "fileType": ""//文本類型
            },
            "name": "Reader",
            "category": "reader"
        },
        { 
            "stepType": "stream",
            "parameter": {},
            "name": "Writer",
            "category": "writer"
        }
    ],
    "setting": {
        "errorLimit": {
            "record": ""//錯誤記錄數
        },
        "speed": {
            "concurrent": 3,//作業並發數
            "throttle": true //當throttle值為false時,mbps參數不生效,表示不限流;當throttle值為true時,表示限流。
            "mbps":"12"//限流
        }
    },
    "order": {
        "hops": [
            {
                "from": "Reader",
                "to": "Writer"
            }
        ]
    }
}

parquetSchema的HDFS Reader配置樣本如下。

說明
  • fileType配置項必須設定為parquet

  • 如果您要讀取parquet檔案中的部分列,需在parquetSchema配置項中,指定完整schema結構資訊,並在column中根據下標,篩選需要的同步列進行列映射。

"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",
        "column": [
            {
                "index": 0,
                "type": "string"
            },
            {
                "index": 1,
                "type": "long"
            },
            {
                "index": 2,
                "type": "double"
            }
        ],
        "fileType": "parquet",
        "encoding": "UTF-8",
        "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

要讀取的檔案路徑,如果要讀取多個檔案,可以使用簡單Regex匹配,例如/hadoop/data_201704*,如果檔案以時間命名且較為規律,則可以結合調度參數使用,調度參數將根據業務時間動態替換,詳情請參見調度參數支援的格式

  • 當指定單個HDFS檔案時,HDFS Reader暫時只能使用單線程進行資料幫浦。

  • 當指定多個HDFS檔案時,HDFS Reader支援使用多線程進行資料幫浦,線程並發數通過作業並發數concurrent指定。

    說明

    實際啟動的並發數是您的HDFS待讀取檔案數量和您配置作業並發數兩者中的小者。

  • 當指定萬用字元,HDFS Reader嘗試遍曆出多個檔案資訊。例如指定/代表讀取/目錄下所有的檔案,指定/bazhen/代表讀取bazhen目錄下遊所有的檔案。HDFS Reader目前只支援*?作為檔案萬用字元,文法類似於通常的Linux命令列檔案萬用字元。

請注意以下事項:

  • Data Integration會將一個同步作業所有待讀取檔案視作同一張資料表。您必須自己保證所有的File能夠適配同一套schema資訊,並且提供給Data Integration許可權可讀。

  • 注意分區讀取:Hive在建表時,可以指定分區。例如建立分區partition(day="20150820", hour="09"),對應的HDFS檔案系統中,相應的表的目錄下則會多出/20150820和/09兩個目錄且/20150820是/09的父目錄。

    分區會列成相應的目錄結構,在按照某個分區讀取某個表所有資料時,則只需配置好JSON中path的值即可。例如需要讀取表名叫mytable01下分區day為20150820這一天的所有資料,則配置如下。

    "path": "/user/hive/warehouse/mytable01/20150820/*"

defaultFS

Hadoop HDFS檔案系統namenode節點地址。公用資源群組不支援Hadoop進階參數HA的配置。

fileType

檔案的類型,目前僅支援您配置為TEXTORCRCSEQCSVparquet。HDFS Reader能夠自動識別檔案的類型,並使用對應檔案類型的讀取策略。HDFS Reader在做資料同步前,會檢查您配置的路徑下所有需要同步的檔案格式是否和fileType一致,如果不一致任務會失敗。

fileType可以配置的參數值列表如下所示:

  • TEXT:表示TextFile檔案格式。

  • ORC:表示ORCFile檔案格式。

  • RC:表示RCFile檔案格式。

  • SEQ:表示SequenceFile檔案格式。

  • CSV:表示普通HDFS檔案格式(邏輯二維表)。

  • PARQUET:表示普通Parquet檔案格式。

由於TextFile和ORCFile是兩種不同的檔案格式,所以HDFS Reader對這兩種檔案的解析方式也存在差異,這種差異導致Hive支援的複雜複合類型(例如map、array、struct和union)在轉換為Data Integration支援的String類型時,轉換的結果格式略有差異,以map類型為例:

  • ORCFile map類型經HDFS Reader解析,轉換成Data Integration支援的STRING類型後,結果為{job=80, team=60, person=70}

  • TextFile map類型經HDFS Reader解析,轉換成Data Integration支援的STRING類型後,結果為{job:80, team:60, person:70}

如上述轉換結果所示,資料本身沒有變化,但是表示的格式略有差異。所以如果您配置的檔案路徑中要同步的欄位在Hive中是複合類型的話,建議配置統一的檔案格式 。

最佳實務建議:

  • 如果需要統一複合類型解析出來的格式,建議您在Hive用戶端將TextFile格式的表導成ORCFile格式的表。

  • 如果是Parquet檔案格式,後面的parquetSchema則必填,此屬性用來說明要讀取的Parquet格式檔案的格式。

對於您指定的column資訊,type必須填寫,indexvalue必須選擇其一。

column

讀取欄位列表,type指定來源資料的類型,index指定當前列來自於文本第幾列(以0開始),value指定當前類型為常量。不從源標頭檔讀取資料,而是根據value值自動產生對應的列。預設情況下,您可以全部按照STRING類型讀取資料,配置為"column": ["*"]

您也可以指定column欄位資訊(檔案資料列和常量列配置二選一),配置如下。

{
  "type": "long",
  "index": 0
  //從本地檔案文本第一列(下標索引從0開始計數)擷取INT欄位,index表示從資料檔案中擷取列資料。
},
{
  "type": "string",
  "value": "alibaba"
  //HDFS Reader內部產生alibaba的字串欄位作為當前欄位,value表示常量列。
}
說明
  • index從0開始(下標索引從0開始計數),表示從本地文字檔第一列開始讀取資料。

  • 建議您指定待讀取的每一列資料的下標和類型,避免配置column *萬用字元。

fieldDelimiter

讀取的欄位分隔符號,HDFS Reader在讀取TextFile資料時,需要指定欄位分割符,如果不指定預設為逗號(,)。HDFS Reader在讀取ORCFile時,您無需指定欄位分割符,Hive本身的預設分隔符號為\u0001

說明
  • 如果您想將每一行作為目的端的一列,分隔字元請使用行內容不存在的字元。例如,不可見字元\u0001

  • 分隔字元不能使用\n

,

encoding

讀取檔案的編碼配置。

utf-8

nullFormat

文字檔中無法使用標準字串定義null(null 指標),Data Integration提供nullFormat定義哪些字串可以表示為null。

例如您配置nullFormat:"null",如果源頭資料是null,Data Integration會將其視作null欄位。

說明

字串的null(n、u、l、l四個字元)和實際的null不同。

compress

當fileType(檔案類型)為csv下的檔案壓縮方式,目前僅支援gzip、bz2、zip、lzo、lzo_deflate、hadoop-snappy和framing-snappy壓縮。

說明
  • LZO存在lzolzo_deflate兩種壓縮格式。您在配置時,請注意不要配置錯誤。

  • 由於snappy目前沒有統一的stream format,Data Integration目前僅支援最主流的hadoop-snappy(hadoop上的snappy stream format)和framing-snappy(google建議的snappy stream format)。

  • ORC檔案類型下無需填寫。

parquetSchema

如果您的檔案格式類型為Parquet,在配置column配置項的基礎上,您還需配置parquetSchema,具體表示parquet儲存的類型說明。您需要確保填寫parquetSchema後,整體配置符合JSON文法。

message MessageType名 {
是否必填, 資料類型, 列名;
......................;
}

parquetSchema的配置格式說明如下:

  • MessageType名:填寫名稱。

  • 是否必填:required表示非空,optional表示可為空白。推薦全填optional。

  • 資料類型:Parquet檔案支援BOOLEAN、Int32、Int64、Int96、FLOAT、DOUBLE、BINARY(如果是字串類型,請填BINARY)和fixed_len_byte_array類型。

  • 每行列設定必須以分號結尾,最後一行也要寫上分號。

配置樣本如下所示。

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

csvReaderConfig

讀取CSV類型檔案參數配置,Map類型。讀取CSV類型檔案使用的CsvReader進行讀取,會有很多配置,不配置則使用預設值。

常見配置如下所示。

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

所有配置項及預設值,配置時csvReaderConfig的map中請嚴格按照以下欄位名字進行配置。

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;

hadoopConfig

hadoopConfig中可以配置與Hadoop相關的一些進階參數,例如HA的配置。公用資源群組不支援Hadoop進階參數HA的配置。

"hadoopConfig":{
"dfs.nameservices": "testDfs",
"dfs.ha.namenodes.testDfs": "namenode1,namenode2",
"dfs.namenode.rpc-address.youkuDfs.namenode1": "",
"dfs.namenode.rpc-address.youkuDfs.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"
}
說明
"hadoopConfig":{ "dfs.data.transfer.protection": "integrity", "dfs.datanode.use.datanode.hostname" :"true", "dfs.client.use.datanode.hostname":"true" }

上述參數為hdfs reader外掛程式中配置的kerberos認證。如果您在HDFS資料來源已經配置了kerberos認證,則在hdfs reader外掛程式中無需重複配置。配置HDFS資料來源,詳情請參見配置HDFS資料來源

haveKerberos

是否有Kerberos認證,預設為false。例如使用者配置為true,則配置項kerberosKeytabFilePath和kerberosPrincipal為必填。

false

kerberosKeytabFilePath

Kerberos認證keytab檔案的絕對路徑。如果haveKerberos為true,則必選。

kerberosPrincipal

Kerberos認證Principal名,如****/hadoopclient@**.*** 。如果haveKerberos為true,則必選。

說明

由於Kerberos需要配置keytab認證檔案的絕對路徑,您需要在資源群組上使用此功能。配置樣本如下。

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

Writer指令碼Demo

{
    "type": "job",
    "version": "2.0",//版本號碼。
    "steps": [
        { 
            "stepType": "stream",
            "parameter": {},
            "name": "Reader",
            "category": "reader"
        },
        {
            "stepType": "hdfs",//外掛程式名。
            "parameter": {
                "path": "",//儲存到Hadoop HDFS檔案系統的路徑資訊。
                "fileName": "",//HDFS Writer寫入時的檔案名稱。
                "compress": "",//HDFS檔案壓縮類型。
                "datasource": "",//資料來源。
                "column": [
                    {
                        "name": "col1",//欄位名。
                        "type": "string"//欄位類型。
                    },
                    {
                        "name": "col2",
                        "type": "int"
                    },
                    {
                        "name": "col3",
                        "type": "double"
                    },
                    {
                        "name": "col4",
                        "type": "boolean"
                    },
                    {
                        "name": "col5",
                        "type": "date"
                    }
                ],
                "writeMode": "",//寫入模式。
                "fieldDelimiter": ",",//資料行分隔符號。
                "encoding": "",//編碼格式。
                "fileType": "text"//文本類型。
            },
            "name": "Writer",
            "category": "writer"
        }
    ],
    "setting": {
        "errorLimit": {
            "record": ""//錯誤記錄數。
        },
        "speed": {
            "concurrent": 3,//作業並發數。
            "throttle": false //false代表不限流,下面的限流的速度不生效;true代表限流。
        }
    },
    "order": {
        "hops": [
            {
                "from": "Reader",
                "to": "Writer"
            }
        ]
    }
}

Writer指令碼參數

參數

描述

是否必選

預設值

defaultFS

Hadoop HDFS檔案系統namenode節點地址,例如hdfs://127.0.0.1:9000

fileType

檔案的類型,目前僅支援您配置為textorcparquet

  • text:表示Hive中的儲存表,TextFile檔案格式。

  • orc:表示Hive中的壓縮表,ORCFile檔案格式。

  • parquet:表示普通Parquet File檔案格式。

path

儲存到Hadoop HDFS檔案系統的路徑資訊,HDFS Writer會根據並發配置在path目錄下寫入多個檔案。

為了與Hive表關聯,請填寫Hive表在HDFS上的儲存路徑。例如Hive上設定的資料倉儲的儲存路徑為/user/hive/warehouse/,已建立資料庫test表hello,則對應的儲存路徑為/user/hive/warehouse/test.db/hello

fileName

HDFS Writer寫入時的檔案名稱,實際執行時會在該檔案名稱後添加隨機的尾碼作為每個線程寫入實際檔案名稱。

column

寫入資料的欄位,不支援對部分列寫入。

為了與Hive中的表關聯,需要指定表中所有欄位名和欄位類型,其中name指定欄位名,type指定欄位類型。

您可以指定column欄位資訊,配置如下。

"column": 
[
    {
        "name": "userName",
        "type": "string"
    },
    {
        "name": "age",
        "type": "long"
    }
]

是(如果filetype為parquet,此項無需填寫)

writeMode

HDFS Writer寫入前資料清理處理模式:

  • append:寫入前不做任何處理,Data IntegrationHDFS Writer直接使用filename寫入,並保證檔案名稱不衝突。

  • nonConflict:如果目錄下有fileName首碼的檔案,直接報錯。

  • truncate:寫入前清理fileName名稱首碼匹配的所有檔案。例如,"fileName": "abc",將清理對應目錄所有abc開頭的檔案。

說明

Parquet格式檔案不支援Append,所以只能是noConflict

fieldDelimiter

HDFS Writer寫入時的欄位分隔符號,需要您保證與建立的Hive表的欄位分隔符號一致,否則無法在Hive表中查到資料。

說明

僅支援單字元分隔字元,如果輸入多字元將導致運行時報錯。

是(如果filetype為parquet,此項無需填寫)

compress

HDFS檔案壓縮類型,預設不填寫,則表示沒有壓縮。

其中text類型檔案支援gzip和bzip2壓縮類型。

encoding

寫檔案的編碼配置。

無壓縮

parquetSchema

寫Parquet格式檔案時的必填項,用來描述目標檔案的結構,所以此項若且唯若fileTypeparquet時生效,格式如下。

message MessageType名 {
是否必填, 資料類型, 列名;
......................;
}

配置項說明如下:

  • MessageType名:填寫名稱。

  • 是否必填:required表示非空,optional表示可為空白。推薦全填optional。

  • 資料類型:Parquet檔案支援BOOLEAN、INT32、INT64、INT96、FLOAT、DOUBLE、BINARY(如果是字串類型,請填BINARY)和FIXED_LEN_BYTE_ARRAY等類型。

說明

每行列設定必須以分號結尾,最後一行也要寫上分號。

樣本如下。

message m {
optional int64 id;
optional int64 date_id;
optional binary datetimestring;
optional int32 dspId;
optional int32 advertiserId;
optional int32 status;
optional int64 bidding_req_num;
optional int64 imp;
optional int64 click_num;
}

hadoopConfig

hadoopConfig中可以配置與Hadoop相關的一些進階參數,例如HA的配置。

"hadoopConfig":{
"dfs.nameservices": "testDfs",
"dfs.ha.namenodes.testDfs": "namenode1,namenode2",
"dfs.namenode.rpc-address.youkuDfs.namenode1": "",
"dfs.namenode.rpc-address.youkuDfs.namenode2": "",
"dfs.client.failover.proxy.provider.testDfs": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
}

dataxParquetMode

針對Parquet檔案進行同步的模式。使用fields支援array、map和struct等複雜類型。可選值包括fields和columns。

配置dataxParquetMode為fields時,支援hdfs over oss,即HDFS的儲存為OSS,OSS的資料存放區格式為parquet。此時您可以在hadoopConfig中增加OSS相關的參數,詳情如下:

  • fs.oss.accessKeyId:訪問OSS的AccessKeyID。

  • fs.oss.accessKeySecret:訪問OSS的AccessKeySecret。

  • fs.oss.endpoint:訪問OSS的endpoint。

訪問OSS的樣本如下所示。

```json
    "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": "the-access-id",
            "fs.oss.accessKeySecret": "the-access-key",
            "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"
            }
        }
    ```

columns

haveKerberos

是否有Kerberos認證,預設為false。如果您配置為true,則配置項kerberosKeytabFilePathkerberosPrincipal為必填。

false

kerberosKeytabFilePath

Kerberos認證keytab檔案的絕對路徑。

如果haveKerberostrue,則必選。

kerberosPrincipal

Kerberos認證Principal名,如****/hadoopclient@**.*** 。如果haveKerberostrue,則必選。

由於Kerberos需要配置keytab認證檔案的絕對路徑,您需要在自訂資源群組上使用此功能。配置樣本如下。

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