正在构建越来越多的系统来处理大数据的容量 , 速度和多样性 ,并有望帮助获得新的见解并做出更好的业务决策。 在这里,我们将研究在单个架构解决方案中同时处理大数据的体积和速度的方法。
音量+速度
Apache Hadoop为计算机集群之间的大型数据集提供了可靠的存储(HDFS)和处理系统(MapReduce)。 MapReduce是针对长期运行的后台进程的批处理查询处理器 。 Hadoop可以处理Volume 。 但是要处理Velocity ,我们需要实时处理工具,以补偿批处理系统的高延迟,并随着新数据的到来以及将旧数据逐渐集成到批处理框架中而连续地提供最新数据。
因此,我们需要批处理和实时两种并行运行,并将实时计算系统(例如Apache Storm )添加到批处理框架中。 批处理和实时计算的这种体系结构组合称为Lambda体系结构 ( λ )。
通用Lambda
λ具有三层:
- 批处理层管理主数据并预先计算批处理视图
- 速度层仅提供最新数据,并增加实时视图
- 服务层负责索引和公开视图,以便可以对其进行查询。
下图概述了这三个层以及一些技术堆栈示例:
传入的数据被分派到Batch和Speed层进行处理。 另一方面,通过合并批处理和实时视图来回答查询。 请注意,实时视图本质上是瞬态的,并且一旦通过Batch和Serving层传播,它们的数据就会被丢弃(为新数据腾出空间)。 大多数复杂性被推到了较小的“速度”层,在该层中,结果只是暂时的,这一过程称为“ 复杂性隔离 ”。 实际上,我们确实在定期清除并保持较小规模的层中隔离了并发数据更新的复杂性。
λ与技术无关 。 数据管道分为清晰的职责划分层,在每一层,我们可以从多种技术中进行选择。 例如,Speed层可以使用Apache Storm, Apache Spark Streaming或Spring“ XD” ( e X treme D ata )等。
我们如何从λ的错误中恢复? 基本上,我们重新计算视图。 如果花费的时间太长,我们将恢复到数据的先前未损坏版本。 由于主数据集中的数据不可更改,我们可以这样做:数据从不更新,仅附加到(基于时间的排序)。 因此,该系统是人类容错的 :如果我们写入不良数据,则可以完全删除该数据并重新计算。
统一Lambda
λ的缺点是其固有的复杂性 。 要使两个已经很复杂的分布式系统保持同步,则是实现和维护方面的挑战。 人们已经开始寻找更简单的替代方法,这些替代方法将带来几乎相同的收益并解决所有问题。 基本上有三种方法:
- 采用纯流方法,并使用诸如Apache Samza之类的灵活框架来提供某种类型的批处理。 尽管其分布式流传输层是可插入的,但是Samza通常依赖于Apache Kafka 。 Samza的流是可重播的有序分区。 可以将Samza配置为进行批处理,即按顺序使用来自同一流分区的多个消息。
- 采用相反的方法,并选择一个灵活的Batch框架,该框架还允许使用Apache Spark / Spark Streaming或Storm's Trident进行微批处理,该批处理应足够小以接近实时。 从本质上讲,Spark流是一系列小批量处理的序列,可以达到低至一秒的延迟.Trident是Storm之上的高级抽象,可以处理小批量流以及进行批聚合。
- 使用已经结合了批处理和实时功能的技术堆栈,例如Spring“ XD”, Summingbird或Lambdoop 。 Summingbird(“ Streaming MapReduce”)是一个混合系统,其中批处理/实时工作流可以同时运行,并且结果自动合并。Speed层在Storm上运行,而Batch层在Hadoop上运行,Lambdoop( Lamb da- Ha doop , HBase ,Storm和Redis )还通过提供用于两种处理范例的单个API来结合批处理/实时性:
集成的方法( 统一λ)力求通过特色的混合计算模型 ,在批处理和实时数据处理透明地结合起来处理大数据的数量和速度的。 有了一个统一的框架,将只需要学习一个系统,就可以维护一个系统。
翻译自: https://www.javacodegeeks.com/2015/01/lambda-architecture-for-big-data.html