OSS-HDFS服務(JindoFS服務)是一款雲原生資料湖儲存產品,OSS-HDFS資料來源為您提供讀取和寫入OSS-HDFS的雙向通道,本文為您介紹DataWorks的OSS-HDFS資料同步的能力支援情況。
使用限制
離線讀
使用OSS-HDFS Reader時,請注意以下事項:
由於連通資源群組到OSS-HDFS的網路鏈路比較複雜,建議您使用獨享Data Integration資源群組完成資料同步任務。您需要確保您的獨享Data Integration資源群組具備OSS-HDFS的網路訪問能力。
OSS-HDFS Reader支援以下功能:
支援text、csv、orc和parquet格式的檔案,且要求檔案內容存放的是一張邏輯意義上的二維表。
支援多種類型資料讀取,支援列常量。
支援遞迴讀取、支援萬用字元
*
和?
。多個File可以支援並發讀取。
OSS-HDFS Reader暫不支援單個File多線程並發讀取,此處涉及到單個File內部切分演算法。
離線寫
使用OSS-HDFS Writer時,請注意以下事項:
目前OSS-HDFS Writer僅支援text、orc和parquet三種格式的檔案,且檔案內容存放的必須是一張邏輯意義上的二維表。
對於text類型,需要保證寫入OSS-HDFS檔案的分隔字元與在Hive上建立表時的分隔字元一致,從而實現寫入OSS-HDFS資料與Hive表欄位關聯。
即時寫
支援即時寫入的能力。
支援即時寫入Hudi格式版本:0.14.x。
實現過程
OSS-HDFS Writer的實現過程如下所示:
根據您指定的path,建立一個OSS-HDFS檔案系統上不存在的臨時目錄。
建立規則:path_隨機。
將讀取的檔案寫入這個臨時目錄。
全部寫入後,將臨時目錄下的檔案移動到您指定的目錄(在建立檔案時保證檔案名稱不重複)。
刪除臨時目錄。如果在此過程中,發生網路中斷等情況造成無法與OSS-HDFS建立串連,需要您手動刪除已經寫入的檔案和臨時目錄。
支援的欄位類型
離線讀
ParquetFile、ORCFile、TextFile、CsvFile中的類型,會預設轉為Data Integration支援的內部類型,如下表所示。
類型分類 | OSS-HDFS資料類型 |
整數類 | TINYINT、SMALLINT、INT、BIGINT |
浮點類 | FLOAT、DOUBLE、DECIMAL |
字串類 | STRING、CHAR、VARCHAR |
日期時間類 | DATE、TIMESTAMP |
布爾類 | BOOLEAN |
LONG:OSS-HDFS檔案中的整數型別資料,例如123456789。
DOUBLE:OSS-HDFS檔案中的浮點類型資料,例如3.1415。
BOOLEAN:OSS-HDFS檔案中的布爾類型資料,例如true、false,不區分大小寫。
DATE:OSS-HDFS檔案中的時間類型資料,例如2014-12-31 00:00:00。
離線寫
OSS-HDFS Writer提供向OSS-HDFS檔案系統指定路徑中寫入TextFile檔案、 ORCFile檔案以及ParquetFile格式檔案。
OSS-HDFS支援的資料類型,如下表所示。
類型分類 | OSS-HDFS資料類型 |
整數類 | TINYINT、SMALLINT、INT和BIGINT |
浮點類 | FLOAT和DOUBLE |
字串類 | CHAR、VARCHAR和STRING |
布爾類 | BOOLEAN |
日期時間類 | DATE和TIMESTAMP |
資料同步任務開發
OSS-HDFS資料同步任務的配置入口和通用配置流程指導可參見下文的配置指導,詳細的配置參數解釋可在配置介面查看對應參數的文案提示。
建立資料來源
在進行資料同步任務開發時,您需要在DataWorks上建立OSS-HDFS資料來源,操作流程請參見建立並管理資料來源。
單表離線同步任務配置指導
操作流程請參見通過嚮導模式配置離線同步任務、通過指令碼模式配置離線同步任務。
指令碼模式配置的全量參數和指令碼Demo請參見下文的附錄:OSS-HDFS指令碼Demo與參數說明。
單表即時同步任務配置指導
操作流程請參見配置單表增量資料即時同步、DataStudio側即時同步任務配置。
整庫(即時)全增量同步處理配置指導
操作流程請參見Data Integration側同步任務配置。
附錄:OSS-HDFS指令碼Demo與參數說明
附錄:離線任務指令碼配置方式
如果您配置離線任務時使用指令碼模式的方式進行配置,您需要在任務指令碼中按照指令碼的統一格式要求編寫指令碼中的reader參數和writer參數,指令碼模式的統一要求請參見通過指令碼模式配置離線同步任務,以下為您介紹指令碼模式下的資料來源的Reader參數和Writer參數的指導詳情。
Reader指令碼Demo
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "oss_hdfs",//外掛程式名
"parameter": {
"path": "",//要讀取的檔案路徑
"datasource": "",//資料來源
"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",//編碼格式
"fileFormat": ""//文本類型
},
"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"//限流,此處1mbps = 1MB/s。
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
Reader指令碼參數
參數 | 描述 | 是否必選 | 預設值 |
path | 要讀取的檔案路徑。
重要
| 是 | 無 |
fileFormat | 檔案的類型,目前僅支援您配置為text、orc和parquet。 OSS-HDFS Reader能夠自動識別檔案的類型,並使用對應檔案類型的讀取策略。OSS-HDFS Reader在做資料同步前,會檢查您配置的路徑下所有需要同步的檔案格式是否和fileFormat一致,如果不一致任務會失敗。 fileFormat可以配置的參數值列表如下所示:
| 是 | 無 |
column | 要讀取的欄位列表。預設情況下,您可以全部按照STRING類型讀取資料,配置為 您也可以指定column欄位資訊,配置如下。其中:
說明 檔案資料列(index)和常量列(value)配置二選一。
| 是 | 無 |
fieldDelimiter | 讀取的欄位分隔符號,OSS-HDFS Reader在讀取TextFile資料時,需要指定欄位分割符,如果不指定預設為逗號(,)。OSS-HDFS Reader在讀取ORC/PARQUET時,您無需指定欄位分割符。 | 否 | , |
encoding | 讀取檔案的編碼配置。 | 否 | utf-8 |
nullFormat | 文字檔中無法使用標準字串定義null(null 指標),Data Integration提供nullFormat定義哪些字串可以表示為null。 例如您配置 | 否 | 無 |
compress | 目前僅支援gzip、bzip2和snappy壓縮。 | 否 | 無 |
Writer指令碼Demo
{
"type": "job",
"version": "2.0",//版本號碼。
"steps": [
{
"stepType": "stream",
"parameter": {},
"name": "Reader",
"category": "reader"
},
{
"stepType": "oss_hdfs",//外掛程式名。
"parameter": {
"path": "",//儲存到OSS-HDFS檔案系統的路徑資訊。
"fileName": "",//OSS-HDFS Writer寫入時的檔案名稱。
"compress": "",//OSS-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": "",//編碼格式。
"fileFormat": "text"//文本類型。
},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": ""//錯誤記錄數。
},
"speed": {
"concurrent": 3,//作業並發數。
"throttle": false //false代表不限流,下面的限流的速度不生效;true代表限流。
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
Writer指令碼參數
參數 | 描述 | 是否必選 | 預設值 |
fileFormat | 檔案的類型,目前僅支援您配置為text、orc和parquet。
| 是 | 無 |
path | 儲存到OSS-HDFS檔案系統的路徑資訊,OSS-HDFS Writer會根據並發配置在path目錄下寫入多個檔案。 與Hive表關聯時,請填寫Hive表在OSS-HDFS上的儲存路徑。例如Hive上設定的資料倉儲的儲存路徑。 | 是 | 無 |
fileName | OSS-HDFS Writer寫入時的檔案名稱,實際執行時會在該檔案名稱後添加隨機的尾碼作為每個線程寫入實際檔案名稱。 | 是 | 無 |
column | 寫入資料的欄位,不支援對部分列寫入。 與Hive中的表關聯時,需要指定表中所有欄位名和欄位類型,其中name指定欄位名,type指定欄位類型。 您可以指定column欄位資訊,配置如下。
| 是(如果fileFormat為parquet,此項無需填寫) | 無 |
writeMode | OSS-HDFS Writer寫入前資料清理處理模式:
| 是 | 無 |
fieldDelimiter | OSS-HDFS Writer寫入時的欄位分隔符號。 說明 僅支援單字元分隔字元,如果輸入多字元將導致運行時報錯。 | 是(如果fileFormat為parquet,此項無需填寫) | 無 |
compress | OSS-HDFS檔案壓縮類型,預設不填寫,則表示沒有壓縮。 其中text類型檔案支援gzip和bzip2壓縮類型。 | 否 | 無 |
encoding | 寫檔案的編碼配置。 | 否 | utf-8 |
parquetSchema | 寫Parquet格式檔案時的必填項,用來描述目標檔案的結構,所以此項若且唯若fileFormat為parquet時生效,格式如下。
配置項說明如下:
說明 每行列設定必須以分號結尾,最後一行也要寫上分號。 樣本如下。
| 否 | 無 |