共计 1634 个字符,预计需要花费 5 分钟才能阅读完成。
本文将从 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….
课件获取:
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=szsf
同时,欢送对大数据开源我的项目有趣味的同学退出「袋鼠云开源框架钉钉技术 qun」,交换最新开源技术信息,qun 号码:30537511,我的项目地址:https://github.com/DTStack