大数据与机器学习:实践方法与行业案例.3.2 自动加载的流程-阿里云开发者社区

开发者社区> 华章计算机> 正文

大数据与机器学习:实践方法与行业案例.3.2 自动加载的流程

简介:
+关注继续查看

3.2 自动加载的流程


既然已经明确了数据缓冲区的基本规则,那么我们认为一个满足规则要求的数据缓冲区已经搭建起来了(可以向IT运维人员提出搭建FTP文件服务器的需求),接下来真正进入数据自动加载的设计过程。

首先,仔细分析文件从数据缓冲区自动加载到分析环境中的流程,可以将这个过程细分为4个阶段:扫描文件、下载文件、解压文件和加载文件,如图3-4所示。

 

图3-4 文件自动加载流程分解

这4个阶段的功能描述如下。

1)扫描文件。该阶段用于判断当前数据日期的文件是否已经完整存在于数据缓冲区中,一旦数据文件完整存在(而不是部分)于数据缓冲区,就在数据库中标记该文件已存在。

2)下载文件。将数据库中记录的已经存在(且尚未下载)的文件从数据缓冲区下载到分析环境中。

3)解压文件。在分析环境中,将已经下载完成的数据文件进行解压缩。解压后的文件便于后续的加载操作。

4)加载文件。将解压后的文件批量加载至数据库表中。

上述4个阶段,数据文件会根据处理进程发生状态改变,这个自动加载流程将会涉及12种文件状态,图3-5展示了状态之间的转化。

 

图3-5 文件状态转化图

在扫描文件的开始阶段,处于“文件不存在”状态,一旦程序扫描到该文件,状态就变为“正在传输”,处在这个状态的文件仍处于FTP传输过程中,因此可能不完整。

一旦文件处于“文件就绪”状态,就说明该文件已经完整存在于数据缓冲区,可以进入下载文件阶段。处于“下载成功”状态的文件,可以进入解压文件阶段,而“解压成功”状态的文件将进入加载文件阶段。

3.2.1 扫描文件

通常,生产系统周期性(每月、每天或每小时)产出原始数据,并上传至数据缓冲区。自动加载程序需要及时发现新上传至数据缓冲区中的数据文件,这需要一个程序进程对数据缓冲区的文件目录进行监控,为便于描述,我们称这个监控进程为扫描文件进程。

从图3-5中可知,扫描文件进程需要记录下文件的当前状态,所以需要一个数据库表保存所有文件的当前状态,另外还需要一个配置表来告诉程序哪些文件名称需要扫描,以及需要监控的文件目录等信息,这些内容将在数据库设计章节详细介绍。

现在已经有了存储配置信息的数据库表,还需要解决一个关键问题:如何判断数据缓冲区中的文件已经完整上传?因为数据文件是通过FTP方式由生产环境上传到数据缓冲区中的,一些文件可能有数百兆字节,整个传输过程可能需要几分钟至数十分钟,因此需要判断文件是否传输完成。有两种简单方式可以判断文件是否传输完成。

1)文件传输过程中,在文件名称之后添加标记后缀,表示该文件尚未传输完成,一旦FTP传输完成,就将文件名称后面的标记后缀去除。这样,带有标记后缀的文件即为传输尚未结束的文件。

2)通过多次检测文件的大小来判定该文件是否传输完成。比如,连续5次检测到文件的大小相同,则认为该文件已经传输完成。本书采用此种方式,图3-6所示的为针对一个文件的检测流程。

 

图3-6 多次检测法判断是否文件完整

多次检测法的主要思想是通过多次检测一个文件的大小来判断该文件是否已经传输完成,当连续多次检测到文件的大小相同时,则认为文件已经传输完成(否则文件大小应该改变)。根据这个思想,图3-6中设置了一个计数器count,初始值为0,每隔15秒检测一下文件大小,当连续多次(图3-6中为5次)检测到文件大小相同时,进程结束,文件状态变为“文件就绪”。

3.2.2 下载文件

扫描文件进程在数据库中将文件状态变更为“文件就绪”,下载文件进程将这些处于“文件就绪”状态的文件下载到分析环境的对应服务器中。

同样,下载文件进程也要根据情况更新数据库中文件的状态,比如“开始下载”“下载成功”“下载失败”等,并且当文件下载成功后,要记录文件所在的路径,以便随后的解压进程找到对应的文件。

为了提高效率,下载文件采用多线程方式,通过调节并行线程数来寻求下载效率和带宽压力之间的平衡点。图3-7展示了多线程下载文件的流程。

 

图3-7 多线程下载文件流程图

3.2.3 解压文件

解压文件进程将文件状态为“下载成功”的文件进行解压缩,它根据下载文件进程记录的文件路径找到对应的压缩文件,然后根据文件后缀调用对应的解压缩接口。解压缩结束后,将文件状态变更为“解压成功”或者“解压失败”,当文件“解压成功”后,需要记录解压之后的文件存放路径,以便随后的加载文件进程使用。

解压缩可以使用Java自带的解压缩程序包进行,也可以通过调用命令行的方式实现(绝大部分操作系统都支持unzip命令,尽管其运行后的返回值略有不同)。

3.2.4 加载文件

加载文件进程负责将状态为“解压成功”的文件批量加载到对应的表中,目标表可以是关系型数据库,也可以是大数据平台的Hive表。

加载文件进程需要一些附加信息来确定文件的加载方式(增量或者全量)、对应的目标表信息等。这些信息通过配置表提供,将在数据库设计章节详述。

最后,加载文件进程调用批量导入命令(参阅2.2.4节)将数据文件快速高效地导入目标表中。

根据第1章介绍的数据更新规则,我们给出针对关系型数据库增量加载和全量加载的流程图,如图3-8所示。

 

图3-8 增量加载和全量加载流程(关系型数据库)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
飞天加速计划使用体验-我的前端学习
学习云服务器的使用,让自己的网页上云。
13 0
10059
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载