大数据架构
Lambda架构
作为新一代BI的典型代表,观远数据基于Lambda架构设计了一套高性能的实时数据引擎,那么什么是Lambda架构呢?
一条线是进入流式计算平台(例如 Storm、Flink或者Spark Streaming),去计算实时的一些指标;另一条线进入批量数据处理离线计算平台(例如Mapreduce、Hive,Spark SQL),去计算T+1的相关业务指标,这些指标需要隔日才能看见。
Lambda架构是一套通用的的实时大数据处理框架,其作者Nathan Marz基于对数据和查询的本质认识,整合了离线计算与实时计算,融合了不可变性、读写分离和复杂性隔离等一系列架构原则,从而设计出能满足实时大数据系统关键特性(如高容错、低延时、可扩展等)的Lambda架构。
Lambda架构的核心思想是将大数据处理系统划分为三层:Batch Layer、 Real-Time(Speed) Layer以及Serving Layer,从而将实时任务与批处理任务很好地结合起来,最终实现对大数据的实时处理。
- Batch Layer:批处理层。该层可以很好的处理离线数据,在数据集上预先聚合好实时查询所需要数据的历史部分,从而得到Batch View。
- Real-Time(Speed) Layer:加速层。该层可以处理最新的增量数据流,不断将数据以时间维度增量聚合到Real-Time View。
- Serving Layer :服务层。用于响应用户的查询请求,可以合并Batch View和Real-time View中的数据到最终的展示结果。
预运算查询函数称之为Batch View(A),这样当需要执行查询时,可以从Batch View中读取结果。
这样一个预先运算好的View是可以建立索引的,因而可以支持随机读取(B)。于是系统就变成:
(A)batch view = function(all data)
(B)query = function(batch view)
在Lambda架构中,实现(A)batch view =function(all data)的部分称之为Batch Layer。Batch Layer的功能主要有两点:
存储master dataset, 这是一个不变的持续增长的数据集
在master dataset上预先计算查询函数,构建查询所对应的View
缺点如下:
实时与批量计算结果不一致引起的数据口径问题:因为批量和实时计算走的是两个计算框架和计算程序,算出的结果往往不同,经常看到一个数字当天看是一个数据,第二天看昨天的数据反而发生了变化。
批量计算在计算窗口内无法完成:在IOT时代,数据量级越来越大,经常发现夜间只有4、5个小时的时间窗口,已经无法完成白天20多个小时累计的数据,保证早上上班前准时出数据已成为每个大数据团队头疼的问题。
开发和维护的复杂性问题:Lambda 架构需要在两个不同的 API(application programming interface,应用程序编程接口)中对同样的业务逻辑进行两次编程:一次为批量计算的ETL系统,一次为流式计算的Streaming系统。针对同一个业务问题产生了两个代码库,各有不同的漏洞。这种系统实际上非常难维护
服务器存储大:数据仓库的典型设计,会产生大量的中间结果表,造成数据急速膨胀,加大服务器存储压力。