大数据常用的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架构---实时架构处理流程与离线架构处理流程的主要内容,如果未能解决你的问题,请参考以下文章

大数据常用的架构

lambda架构简介

大数据架构

Lambda架构概述

Lambda架构概述

Lambda架构概述