大数据常用的Lambda架构---实时架构处理流程与离线架构处理流程
Posted 阿啄debugIT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据常用的Lambda架构---实时架构处理流程与离线架构处理流程相关的知识,希望对你有一定的参考价值。
前言
对低成本,规模化的需求,促使人们开始使用分布式文件系统,例如 HDFS和基于批量数据的计算系统(MapReduce 作业),但是这种系统很难做到低延迟。
用 Storm 开发的实时流处理技术,可以帮助解决延迟性的问题,但并不完美。
其中的一个原因是,Storm 不支持 exactly-once 语义,因此不能保证状态数据的正确性,另外它也不支持基于事件时间的处理。
有以上需求的用户,不得不在自己的应用程序代码中加入这些功能。后来出现了一种混合分析的方法,它将上述两个方案结合起来,既保证低延迟,又保障正确性。
这个方法被称作 Lambda 架构,它通过批量 MapReduce作业提供了虽有些延迟但是结果准确的计算,同时通过Storm将最新数据的计算结果初步展示出来。
Lambda架构是由Storm的作者Nathan Marz提出的一个实时大数据处理框架,Marz在Twitter工作期间开发了著名的实时大数据处理框架Storm,Lambda架构是其根据多年进行分布式大数据系统的经验总结提炼而成。
Lambda架构的目标是设计出一个能满足实时大数据系统关键特性的架构,包括有:高容错、低延时和可扩展等。
Lambda架构整合离线计算和实时计算,融合不可变性(Immunability),读写分离和复杂性隔离等一系列架构原则,可集成Hadoop,Kafka,Storm,Spark,Hbase等各类大数据组件。
正常数据处理流程
数据的产生
业务系统
业务系统,指的是企业核心业务的或者企业内部人员,使用的保证企业正常运转的IT系统,比如超市的POS销售系统、订单/库存/供应链管理的ERP系统、客户关系管理的CRM系统、财务系统各种行政系统等,不管何种系统,后台的数据一般都存在后台数据库内。
Web系统
Web系统,也会有用于存储各种格式化数据的后台数据库,但除此之外,还有各种用户行为日志,比如用户通过何种途径访问了本网站(搜索引擎、直接输入Web网址、其他系统跳转等),在网站内都有何种行为(访问了哪些网页、点击了哪些按钮、停留了多长时间)。通过cookie以及各种前端埋点技术,用户的这些行为都可以被记录下来,并保存到相应的日志文件内。
手机App、外部系统、人工整理等等
数据采集和传输
业务系统、Web系统、手App等产生的数据文件、日志文件和埋点日志分散于各个系统与服务器上,必须通过数据采集传输工具和系统的帮助,才能汇总到集中的区域,进行关联和分析。
需要关注其中的时效性,数据采集传输工具和系统已是大数据时代的关键基础设施。
数据存储处理
数据采集同步后的数据,是原始的和杂乱的,必须经过专门的清洗、关联、规范化和精心的组织建模,而且要通过数据质量检测后,才能进行后续的数据分析,或用于提供数据服务,而这就是数据平台构建的第三个关键关节一一数据存储处理。
根据下游数据使用方的时效性,我们可以把数据存储处理工具和技术分为离线处理、近线处理和实时处理,处理后的数据,也相应地存储于离线数据仓库、近线数据存储区和实时数据存储区。
数据采集传输及处理技术
从大数据常用的Lambda架构的角度,对离线和实时数据平台架构以及相关的各项技术进行介绍。
数据采集传输主要技术
数据采集传输工具和技术主要分为两大类:离线批处理和实时数据采集和传输。
离线批处理主要是批量一次性采集和导出数据。离线批处理目前比较有名和常用的工具是Sqoop,下游的用户主要是离线数据处理平台(如Hive等)。
实时数据采集和传输最为常用的则是Flume和Kafka,其下游用户一般是实时流处理平台,如Storm、Spark、Flink。
Sqoop
Sqoop作为一款开源的离线数据传输工具,主要用于Hadoop(Hive)与传统数据库(mysql、PostgreSQL等)间的数据传递。
Flume
Flume是Cloudera提供的一个高可用、高可靠、分布式的海量日志采集、聚合和传输的系统,目前已经是Apache的顶级子项目,使用Flume可以收集诸如日志、时间等数据,并将这些数据资源集中存储起来,供下游使用(尤其是流处理框架,例如Storm)。
Kafka
通常来说Flume采集数据的速度和下游处理的速度通常不同步,因此实时平台架构都会用一个消息中间件来缓冲,而这方面最为流行和应用最为广泛的无疑是Kafka。
Kafka是由Linkedln开发的一个分布式消息系统,以其可以水平扩展和高吞吐率而被广泛使用,目前主流的开源分布式处理系统(如Storm、Spark等)都支持与Kafka集成。
数据处理主要技术
数据离线和准实时的处理工具主要包括MapReduce、Hive、Spark,流处理的工具主要包含Storm,还有最近较为火爆的Flink、Beam。
MapReduce
MapReduce是Google司的核心计算模型,它将运行于大规模集群上的复杂并行计算过程,高度抽象为两个函数:map和reduce。MapReduce最伟大之处,在于其将处理大数据能力赋予了普通开发人员,以至于开发人员即使不会任何的分布式编程知识,也能将自己的程序运行在分布式系统上处理海量数据。
Hive
Hive是由Facebook开发,并贡献给Hadoop开源社区的,是一个建立在Hadoop体系结构上的一层SQL抽象。
Hive目前仍然是包括国际大厂(如Facebook、国内BAT)在内的互联网公司,所使用的主流离线数据处理工具。
Spark
尽管MapReduce、Hive完成海量数据的大多数批处理工作,并且在大数据时代成为企业大数据处理的首选技术,但是其数据查询的延迟一直被诟病·,而且也非常不适合迭代计算和DAG(有向无环图)计算。
由于Spark具有可伸缩、基于内存计算等特点,且可以直接读写Hadoop上任何格式的数据,较好地满足了数据即时查询和迭代分析的需求,因此变得越来越流行。
Flink
在数据处理领域,批处理任务与实时流计算任务一般被认为是两种不同的任务,一个数据项目,一般会被设计为只能处理其中一 种任务,例如Storm只支持流处理任务,而MapReduce、Hive只支持批处理任务。
那么两者能够统用一种技术框架来完成吗?批处理是流处理的特例吗?
Apache Flink是一个同时面向分布式实时流处理,和批量数据处理的开源计算平台,它能够基于同一个Flink运行时(FlinkRuntime),提供支持流处理和批处理两种类型应用的功能,Flink完全支持流处理,批处理被作为一种特殊的流处理,只是它的输入数据流被定义为有界的而已。
数据存储主要技术
HDFS
HadoopDistributedFileSystem,简称HDFS,是一个分布式文件系统。它是谷歌的GoogleFileSystem(GFS)提出之后,DougCutting受Google启发而开发的一种类GFS文件系统。
它有一定高度的容错性,而且提供了高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS提供了一个高容错性和高吞吐量的海量数据存储解决方案。
HBase
HBase是一种构建在HDFS之上的分布式、面向列族的存储系统。在需要实时读写并随机访问超大规模数据集等场景下,HBase目前是市场上主流的技术选择。
实际上,传统的数据库解决方案,尤其是关系型数据库也可以通过复制和分区的方法,来提高单点性能极限,但这些都是后知后觉的,安装和维护都非常复杂。
而HBase从另一个角度处理伸缩性问题,即通过线性方式,从下到上增加节点来进行扩展。
HBase不是关系型数据库,也不支持SQL,其中的表一般有这样的特点:
- 大:个表可以有上亿行、上百万列
- 面向列:面向列表(簇)的存储和权限控制,列(簇)独立检索
- 稀疏:为空(NULL)的列并不占用存储空间,因此表可以设计得非常稀疏
- 无模式:每一行都有一个,可以排序的主键和任意多的列。列可以根据需要动态增加,表中不同的行,可以有截然不同的列
- 数据多版本:每个单元中的数据可以有多个版本,默认情况下,版本号自动分配,它是单元格插入时的时间戳
- 数据类型单一:HBase中的数据,都是字符串,没有类型
数据应用主要技术
数据有多种应用方式如固定报表、即时分析、数据服务、数据分析、数据挖掘和机器学习等。
实时架构处理流程与离线架构处理流程
实时架构处理流程
实时处理的主要组件组成:Flume+Kafka+flink(Storm)+Mongo
通过Flume进行数据的采集,将数据推送给Kafka作为数据的缓存层,flink(Storm)作为kafka的消费者,从而进行实时的处理。最终,通过Web展示给前端,能够实时统计和分析车辆的在线总数,轨迹点总数,对此可以做一些相关的应用。
- 数据来源:主要是nginx 服务器获取的GPS数据和MSp数据格式都是JSON。
- 数据采集:通过Flume的拦截器,对日志进行预处理,将数据存储在缓存层kafka。
- 数据统计:通过flink(Storm),实时拉取数据做计算,将临时结果数据存储在Redis。
- 数据落地:最终的数据存储在Mongo中,定时获取Redis中的数据,存储在Mongo。
- Web展示:查询数据库定时更新前端页面,或者BI工具的报表系统。
离线架构处理流程
离线处理,一般按天进行数据处理,每天凌晨等数据采集和同步的数据到位后,相关的数据处理任务,会被按照预先设计的 ETL(抽取、转换、加载,一般用来泛指数据清洗、关联、规范化等数据处理过程)逻辑,以及ETL任务之间的拓扑关系依次调用,最终的数据被写入离线数据仓库中。
离线数据仓库中的数据,通常是按照某种建模思想(最常用的是维度建模思想)精心组织的,这样既可以使下游用户,非常直观和方便地使用,又可以使数据处理过程很方便地扩展和修改。
离线的主要数据处理技术,是基于HadoopMapReduce的Hive,而Hive是一种SQL on Hadoop的技术,但类似的SQL on Hadoop技术和框架还有很多,比如Cloudera的Impala,Apache Druid以及Presto、Shark等。
一般流程
- 数据采集:定制开发采集程序,或使用开源框架FLUME
- 数据预处理:定制开发mapreduce程序,运行于hadoop集群
- 数据仓库技术:基于hadoop之上的Hive
- 数据导出:基于hadoop的sqoop数据导入导出工具
- 数据可视化:定制开发web程序或使用kettle等产品(echarts)
- 整个过程的流程调度:hadoop生态圈中的oozie工具,或其他类似开源产品
将统计结果导入mysql
./sqoop export --connect jdbc:mysql://localhost:3306/weblogdb --username root --password root --table t_display_xx --export-dir /user/hive/warehouse/uv/dt=2021-05-03
经过完整的数据处理流程后,会周期性输出各类统计指标的报表,在生产实践中,最终需要将这些报表数据,以可视化的形式展现出来,web程序来实现数据可视化。
以上是关于大数据常用的Lambda架构---实时架构处理流程与离线架构处理流程的主要内容,如果未能解决你的问题,请参考以下文章