OSS-HDFS服務(JindoFS服務)是一款云原生數據湖存儲產品,OSS-HDFS數據源為您提供讀取和寫入OSS-HDFS的雙向通道,本文為您介紹DataWorks的OSS-HDFS數據同步的能力支持情況。
使用限制
離線讀
使用OSS-HDFS Reader時,請注意以下事項:
由于連通資源組到OSS-HDFS的網絡鏈路比較復雜,建議您使用Serverless資源組(推薦)和獨享數據集成資源組完成數據同步任務。您需要確保您的資源組具備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中的類型,會默認轉為數據集成支持的內部類型,如下表所示。
類型分類 | 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 |
創建數據源
在進行數據同步任務開發時,您需要在DataWorks上創建一個對應的數據源,操作流程請參見創建并管理數據源,詳細的配置參數解釋可在配置界面查看對應參數的文案提示。
數據同步任務開發
數據同步任務的配置入口和通用配置流程可參見下文的配置指導。
單表離線同步任務配置指導
操作流程請參見通過向導模式配置離線同步任務、通過腳本模式配置離線同步任務。
腳本模式配置的全量參數和腳本Demo請參見下文的附錄:OSS-HDFS腳本Demo與參數說明。
單表實時同步任務配置指導
操作流程請參見配置單表增量數據實時同步、DataStudio側實時同步任務配置。
整庫(實時)全增量同步配置指導
操作流程請參見數據集成側同步任務配置。
附錄:OSS-HDFS腳本Demo與參數說明
離線任務腳本配置方式
如果您配置離線任務時使用腳本模式的方式進行配置,您需要按照統一的腳本格式要求,在任務腳本中編寫相應的參數,詳情請參見通過腳本模式配置離線同步任務,以下為您介紹腳本模式下數據源的參數配置詳情。
Reader腳本Demo
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "oss_hdfs",//插件名
"parameter": {
"path": "",//要讀取的文件路徑
"datasource": "",//數據源
"column": [
{
"index": 0,//序列號,index從0開始(下標索引從0開始計數),表示從本地文本文件第一列開始讀取數據。
"type": "string"http://字段類型
},
{
"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": ""http://文本類型
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "stream",
"parameter": {},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": ""http://錯誤記錄數
},
"speed": {
"concurrent": 3,//作業并發數
"throttle": true //當throttle值為false時,mbps參數不生效,表示不限流;當throttle值為true時,表示限流。
"mbps":"12"http://限流,此處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(空指針),數據集成提供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"http://字段類型。
},
{
"name": "col2",
"type": "int"
},
{
"name": "col3",
"type": "double"
},
{
"name": "col4",
"type": "boolean"
},
{
"name": "col5",
"type": "date"
}
],
"writeMode": "",//寫入模式。
"fieldDelimiter": ",",//列分隔符。
"encoding": "",//編碼格式。
"fileFormat": "text"http://文本類型。
},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": ""http://錯誤記錄數。
},
"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時生效,格式如下。
配置項說明如下:
說明 每行列設置必須以分號結尾,最后一行也要寫上分號。 示例如下。
| 否 | 無 |