ChunJun FTP Connector 功能扩展解读

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

FTP Connector 详解

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

FTP Connector 基本功能

ChunJun FTP Connector 基本功能如下:

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

· 支持断点续传

· 支持并发读写;

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

断点续传

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

file
file

并发读写

代码如下:

file

自定义文件切割

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

file

处理流程

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

file

处理逻辑

· 使用 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:

file

8个并行度读取平均耗时为88s:

file

自定义 FileFormat

自定义 FlieFormat 同样是以工厂模式实现的,ChunJun 目前已实现 Excel、Csv、Text 三种文件结构,当前仍然局限于 FTP,后续会扩展成公共模块,独属于 ChunJun 的 Format。类结构如下图:

file

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

posted @ 2023-06-01 10:23  袋鼠云数栈  阅读(82)  评论(0编辑  收藏  举报