本文將從 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=https://www.cnblogs.com/DTinsight/archive/2023/06/01/szsm
《資料治理行業實踐白皮書》下載地址:https://www.dtstack.com/resources/1001?src=https://www.cnblogs.com/DTinsight/archive/2023/06/01/szsm
想了解或咨詢更多有關袋鼠云大資料產品、行業解決方案、客戶案例的朋友,瀏覽袋鼠云官網:https://www.dtstack.com/?src=https://www.cnblogs.com/DTinsight/archive/2023/06/01/szbky
同時,歡迎對大資料開源專案有興趣的同學加入「袋鼠云開源框架釘釘技術qun」,交流最新開源技術資訊,qun號碼:30537511,專案地址:https://github.com/DTStack
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/554055.html
標籤:其他
下一篇:返回列表
