HDFS是一個Distributed File System,為您提供讀取和寫入HDFS雙向通道的功能,本文為您介紹DataWorks的HDFS資料同步的能力支援情況。
支援的版本
目前不支援阿里雲Apsara File Storage for HDFS版。
使用限制
離線讀
使用HDFS Reader時,請注意以下事項:
由於連通預設資源群組到HDFS的網路鏈路比較複雜,建議您使用Serverless資源群組(推薦)和獨享Data Integration資源群組完成資料同步任務。您需要確保您的資源群組具備HDFS的namenode和datanode的網路訪問能力。
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資料壓縮,目前支援SNAPPY和ZLIB兩種壓縮方式。
支援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的實現過程如下所示:
根據您指定的path,建立一個HDFS檔案系統上不存在的臨時目錄。
建立規則:path_隨機。
將讀取的檔案寫入這個臨時目錄。
全部寫入後,將臨時目錄下的檔案移動到您指定的目錄(在建立檔案時保證檔案名稱不重複)。
刪除臨時目錄。如果在此過程中,發生網路中斷等情況造成無法與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檔案中的布爾類型資料,例如true、false,不區分大小寫。
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請參見下文的附錄:指令碼Demo與參數說明。
附錄:指令碼Demo與參數說明
離線任務指令碼配置方式
如果您配置離線任務時使用指令碼模式的方式進行配置,您需要按照統一的指令碼格式要求,在任務指令碼中編寫相應的參數,詳情請參見通過指令碼模式配置離線同步任務,以下為您介紹指令碼模式下資料來源的參數配置詳情。