大数据架构

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系统。针对同一个业务问题产生了两个代码库,各有不同的漏洞。这种系统实际上非常难维护

服务器存储大:数据仓库的典型设计,会产生大量的中间结果表,造成数据急速膨胀,加大服务器存储压力。

全部评论

相关推荐

昨天 20:18
武汉纺织大学 C++
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
02-03 10:14
求各位大佬帮忙改改简历提提建议
黑皮白袜臭脚体育生:简历条例统一按使用了什么技术实现了什么功能解决了什么问题或提升了什么性能指标来写 可以看我帖子简历话术写法
点赞 评论 收藏
分享
02-02 20:25
门头沟学院 Java
数学转码崽:八股文也算是前人总结的精华,但是因为全是结果导向,你光背不去理解它背后的深层原理和这样做的原因,反而忽略了程序员最该重视的过程导向。推荐你不会的就去多问ai,比如我当时背的时候,concurrenthashmap底层原理常见八股网站都会讲,但是我不理解为什么它去用synchronize锁节点,为什么不用reentrantlock去锁节点。面试官问我你为什么觉得synchronize在这个场景下性能更好呢?虽然面试官可能也不确定清楚,但是你可以尝试给他解答,让他看见你的思考,这才是最重要的,毕竟你没实习,你的项目你也无法证明是你自己思考的产物,那就在别的地方体现你的能力
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务