本文將從 [FTP Connector ](https://www.dtstack.com/resources/1044?src=szsm)的功能詳解,[自定義文件切割](https://www.dtstack.com/resources/1044?src=szsm)及[自定義 FileFormat ...
本文將從 FTP Connector 的功能詳解,自定義文件切割及自定義 FileFormat 三個方面為大家帶來 ChunJun FTP Connector 的功能擴展分享。
FTP Connector 詳解
FTP 是用於在網路上進行文件傳輸的一套標準協議,它工作在 OSI 模型的第七層, TCP 模型的第四層, 即應用層,提供一種在伺服器和客戶機之間上傳和下載文件的有效方式。
FTP Connector 基本功能
ChunJun FTP Connector 基本功能如下:
· 支持 FTP 協議 與 SFTP 協議讀寫;
· 支持斷點續傳;
· 支持併發讀寫;
· 支持多種文件格式的讀寫。
斷點續傳
主要的類:Position,Data,FtpFileReader,代碼如下:
併發讀寫
代碼如下:
自定義文件切割
ConcurrentFileSplitFactory 像一個工廠,通過這個工廠去創建其他的類,包括 ConcurrentZipCompressSplit、ConcurrentCsvSplit 以及預設的 DefaultFileSplit,類結構如下圖:
處理流程
FTP 讀取文件時,通過 ConcurrentFileSplit 對文件進行切割,切割成多個 FTPFileSplit,配置到 Channel 中,最後根據 FileSplit 保存的信息,自定義讀取文件。
處理邏輯
· 使用 maxFetchSize 配置,當同步的文件大於這個值時,開啟大文件切割功能
· 對文件進行分析,構建分片,以文件大小1.2G、分片數4舉例,每個分片數處理的數據量約等於1.2G / 4 = 300M
其中使用的分片構建演算法邏輯如下:
1)從第300M偏移量開始讀文件,按單個位元組遍歷文件,記錄下一個'\n'的文件偏移量,如300.1M,第一個分片處理文件的範圍就是0~ 300.1M
2)第二個分片從 300.1M + 300M開始讀文件,遍歷文件,記錄下一個'\n'的文件偏移量,如600.3M,第二個分片處理文件的範圍就是300.1M~ 600.3M
3)以此類推, 構建完所有的分片
· 單個文件的數據在多個通道併發讀取後,寫入目標表時,無法對多個通道的數據按原文件中記錄的順序進行寫入
單個並行度讀取耗時為122s:
8個並行度讀取平均耗時為88s:
自定義 FileFormat
自定義 FlieFormat 同樣是以工廠模式實現的,ChunJun 目前已實現 Excel、Csv、Text 三種文件結構,當前仍然局限於 FTP,後續會擴展成公共模塊,獨屬於 ChunJun 的 Format。類結構如下圖:
ChunJun 設計方案
FTP 增加的功能點如下:
· FTP支持用戶自定義解析方式;
· FTP 支持自定義數據轉換。
針對上述新增功能點 ChunJun 設計方案如下:
· FTP soource 新增參數 customFormatClassName:自定義解析器類名
· 抽象出公共模塊,定義解析器介面 IFileReadFormat ,解析方式由用戶實現以及 ChunJun 自帶的實現
大量具體代碼請看視頻教程⬇️:
視頻課程&PPT獲取
視頻課程:
https://www.bilibili.com/video/BV1Gm4y1a7Fv/?spm_id_from=333.999.0.0
課件獲取:
https://www.dtstack.com/resources/1044
《數棧產品白皮書》:https://www.dtstack.com/resources/1004?src=szsm
《數據治理行業實踐白皮書》下載地址:https://www.dtstack.com/resources/1001?src=szsm
想瞭解或咨詢更多有關袋鼠雲大數據產品、行業解決方案、客戶案例的朋友,瀏覽袋鼠雲官網:https://www.dtstack.com/?src=szbky
同時,歡迎對大數據開源項目有興趣的同學加入「袋鼠雲開源框架釘釘技術qun」,交流最新開源技術信息,qun號碼:30537511,項目地址:https://github.com/DTStack