导语
前面13篇文章,我们主要从技术框架的角度,给大家讲解了作为一名初级大数据工程师需要重点掌握的技术技能。
那么,从这篇文章开始,我们将从业务的角度,来给大家讲一下,工作中需要了解的一些业务知识。
1.为什么要讲架构
大数据的基础架构在网上一搜一大把,每个公司都会针对自己公司的特定业务场景,选择适合自己的技术框架,来搭建自己的大数据架构体系。既然各有不同,又如此有针对性,那么我们为什么还要讲这个呢?
原因是,我们的目标不是教会你如何搭建大数据架构,而是找到这些架构体系的共性,让你理解不同模块的功能,以及他们是如何相互配合协作,最终提供服务能力的。了解这些内容,对你实际工作是非常有帮助,它会有助于你更好地理解整个数据处理链路,在遇到问题时,可以快速的做出反应,找到问题的症结点,并解决问题,从而提高工作效率。
2.本文的课程目标
希望通过本文的讲解,让大家对常见的大数据架构的模块组成、模块功能、以及模块间的相互协作有一个基本的认知,进而提升大家排查数据问题的能力。后面四篇文章会单独讲解架构里面比较重要的四个模块,所以本文也算是一种预热,或者说承上启下,以此引出后面的四篇文章。
3.本文的讲解思路
第一部分,讲解常见的数据架构的模块组成,并讲解各个模块的大致功能。
第二部分,讲解数据流转的一般流程。
第三部分,通过一个实际案例,讲解下数据具体是怎么流转的
×××
以下为正文
模块组成
正如前文所述,不同公司的架构是有其独特性的,所以本文从模块分解的角度,来讲解下,那些通用的或必不可少的模块。
常见的数据分析架构模块组成如下图所示:
上图中共提到了8个模块,他们分别是:
数据收集模块:主要负责收集各种数据源的数据,包括日志文件、网络请求、数据库、消息队列等,并将这些数据转换为文件或者消息向后传递。
数据转存模块:主要负责将数据定时传递到分布式存储或者实时传递给下游的数据处理程序。
ETL模块:主要负责数据的清洗、格式和内容的处理和转换、数据分级分拣、加载至数据仓库等。
数据仓库模块:这是整个架构的核心,数据仓库是数据有组织的集中存储的地方,负责数据的存取和管理。
元数据管理模块:主要负责记录和约束数据仓库中数据的含义和格式,控制着数据的生命周期和数据质量。
分析引擎模块:数据分析师交互最多的模块,主要负责执行各种分析语句或代码,完成各种分析任务。
作业管理与调度模块:负责分析作业的管理和定时调度,包括作业的增删改查、查看修改历史、设置调度定时和执行引擎等。
资源分配与调度模块:主要负责在多作业同时运行的场景下,有效协调和分配集群的资源,使资源利用率最大化。
数据流转流程
上面我们介绍了常见架构的各个模块,接下来我们来讲下数据是如何在这些模块间流转的。
大致过程如下图所示:
我们以离线处理为例,首先数据会被数据收集模块收集起来,以特定的形式传递给数据转存模块,之后由数据转存模块存储到分布式文件系统,ETL程序会定时处理上述原始数据,并将其转化为便于分析和挖掘的数据格式,并按照特定规范的组织形式,将数据加载至数据仓库中。
之后,我们便可以基于数据仓库的数据,进行多种维度的分析和处理,并可以将需要定时输出的内容设置为定时任务,输出结果可以用来做相应的可视化,得出相应的分析结论。至此数据的一般流转流程就走完了完整的一圈。
实际案例
也许听完上面的描述,你依然觉得很抽象,不好理解。没关系,接下来,我将结合一个具体的实现案例,给大家讲下各模块的协作。不过,大家并不需要太在意这个架构的具体实现技术,而是重点关注数据流转的流程。
我们以分析安卓应用上的用户行为数据为例,大致实现如下:
在客户端有一个BI-SDK,集成在APP内,专门用于采集用户的操作行为信息,然后组装成特定的格式,通过网络(HTTP协议)上传至数据收集服务器(数据接收端),服务端使用Nginx+Lua来接收这些请求。
数据收集端首先对收到的日志进行合法性校验,初步筛查过滤掉脏数据,之后进行初步的分拣,将不同产品线的日志写入不同的日志文件中,并定时完成日志文件的切割。这些过程都是由Nginx+Lua脚本+crontab完成的。
数据转存模块定时将上述日志文件上传至HDFS的特定目录,该模块会校验是否存在漏传的问题,并会自动补传缺失的文件。如果HDFS出现故障,数据会暂存本地,待恢复后自动补传至HDFS。这部分的功能,我们是通过python脚本实现的。
ETL程序会定时将新上传的日志文件,进行各种数据预处理操作,例如非法脏数据的处理、数据类型转换、字段合法性校验、缺失值填补、转换为列式存储文件格式等,之后加载到数据仓库对应表的分区下。
数据仓库通常是提前定义好的,按照一定的规范来组织数据。一般还会配套元数据中心,承担数据治理工作,严格约束数据的类型、字段含义、表和字段命名规范等。
基于数据仓库,我们就可以根据特定的业务需求,完成数据分析任务了。如果需要定时查看分析结果,那么还要借助作业调度模块,定时调度执行分析作业,将分析结果存储在结果数据库中。
总结
知道了这些数据流转的流程,对我们有什么用呢?
它的作用主要体现在两个方面,也正是本文的目的所在:
本文只是从一个全局的角度,带大家初步了解下整体架构的情况。
后面我们会用四篇文章,单独详细介绍了数据收集、ETL、数据仓库与元数据中心、作业管理与调度平台四个模块,敬请期待。
-end-