博客 ChunJun FTP Connector 功能扩展解读

ChunJun FTP Connector 功能扩展解读

   数栈君   发表于 2023-05-31 17:35  265  0

本文将从 FTP Connector 的功能详解,自定义文件切割及自定义 FileFormat 三个方面为大家带来 ChunJun FTP Connector 的功能扩展分享。


FTP Connector 详解


FTP 是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层,提供一种在服务器和客户机之间上传和下载文件的有效方式。


FTP Connector 基本功能

ChunJun FTP Connector 基本功能如下:

· 支持 FTP 协议 与 SFTP 协议读写;

· 支持断点续传;

· 支持并发读写;

· 支持多种文件格式的读写。


断点续传

主要的类:Position,Data,FtpFileReader,代码如下:

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/3ac4c20e01c88129eb31cda5e3121094..jpg
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/66917f6e5dcff959dbd6ca07861b27b8..jpg


并发读写

代码如下:

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/faa259b9e560d5cb6dbe81eaf85a5e6a..jpg


自定义文件切割


ConcurrentFileSplitFactory 像一个工厂,通过这个工厂去创建其他的类,包括 ConcurrentZipCompressSplit、ConcurrentCsvSplit 以及默认的 DefaultFileSplit,类结构如下图:

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/a7a9b049fb67eeb7a74bf675ca1785a2..jpg


处理流程

FTP 读取文件时,通过 ConcurrentFileSplit 对文件进行切割,切割成多个 FTPFileSplit,配置到 Channel 中,最后根据 FileSplit 保存的信息,自定义读取文件。

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/45d0f8c994c937b1f0cf05763f695455..jpg


处理逻辑

· 使用 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。类结构如下图:

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/55e2cd8e18ecf7ab8bfa418b9d0b6a6f..jpg


ChunJun 设计方案

FTP 增加的功能点如下:

· FTP支持用户自定义解析方式;

· FTP 支持自定义数据转换。


针对上述新增功能点 ChunJun 设计方案如下:

· FTP soource 新增参数 customFormatClassName:自定义解析器类名

· 抽象出公共模块,定义解析器接口 IFileReadFormat ,解析方式由用户实现以及 ChunJun 自带的实现


大量具体代码请看视频教程⬇️:


  视频课程&PPT获取  

《数据治理行业实践白皮书》下载地址:https://fs80.cn/4w2atu

《数栈V6.0产品白皮书》下载地址:
https://fs80.cn/cw0iw1

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:
https://www.dtstack.com/?src=bbs

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:
https://github.com/DTStack



0条评论
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料
钉钉扫码加入技术交流群