ChunJun FTP Connector 功能扩展解读
本文将从 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