常用大数据框架对比

最近看到一篇写大数据框架的文章,写的非常好,也根据自己的经验做一些总结吧。大数据框架的选型对刚接触分布式运算的人来说确实有点迷茫,希望这篇文章可以对大家有所帮助。

 

简介:

大数据是收集、整理、处理大量大规模数据集,并从中获得见解所需的非传统战略的技术统称,常用场景:推荐系统,根据用户行为进行相应推荐。资讯、商品等。

分类:

     仅批处理框架    Apache Hadoop

     仅流处理框架   Apache Storm、Apache Samza    

     混合框架       Apache Spark、Apache Flink 

 

名称 特点 优势 局限 处理过程
Hadoop 专用于批处理系统 新版Hadoop包含多个组件,通过配合使用可处理批数据(HDFS、YARN、MapReduce),另外磁盘空间通常是服务器上最丰富的资源,因此可以处理非常海量的数据。 这种方式严重依赖于持久化存储,需要多次进行读写操作,因此速度相对较慢

1.从HDFS文件系统读取数据
2.将数据拆分成小块并分配给所有可用节点
3.针对每个节点上的数据子集进行计算(中间态结果会重新写入HDFS)

4.重新分配中间态结果,并按照键进行分组
5.通过对每个节点的计算结果进行汇总和组合,对每个键值进行“Reducing”
6.将计算出来的最终结果写入HDFS

Storm 专用于流处理系统 一种侧重于极低延迟的流处理框架,是接近于实时处理的工作负载的最佳选择。中文名Topology(拓扑)DAG(有向无环图)进行编排。Storm与Trident配合使得用户可以用微批代替纯粹的流处理。而且Storm还支持多种语言,为用户的拓扑提供了更多的选择。 Core Storm无法保证消息的处理顺序。Core Storm为消息提供了“至少一次”的处理保证,这意味着每条消息都可以被处理,但也可能发生重复  
Samza 专用于流处理系统 Samza是一种与kafka消息系统紧密绑定的流处理框架,Samza对kafka查询系统的依赖似乎是一种限制,然而这也可以为系统提供一些独特的保证和功能。这些内容是其他流处理系统不具备的。 目前Samza只支持jvm语言  
Spark 混合处理系统(批处理与流处理)

使用spark而非hadop MapReduce的主要原因是速度,在内存计算策略和先进的DAG调度等机制的帮助下,Spark可以用更快的速度处理相同的数据集。另一个特性是多样性,除了自身引擎外,围绕spark还建立了包含各种库的生态系统,可为机器学习、交互式查询等任务提供更好的支持

 

为流处理系统采用批处理方法,需要对进入系统的数据进行缓冲,可以提高整体吞吐量的同时等待缓冲区清空也会导致延迟增高。这就意味着不适合做延迟较高的工作负载。  
Flink 混合处理系统(批处理与流处理) Flink流处理为先的方法可提供低延迟、高吞吐率,近乎逐项处理的能力, 最大的局限是还处于一个“年幼”项目,现实环境中该项目的大规模部署还不如其他框架常见  
名称 总结
Hadoop Hadoop 及其MapReduce提供了一套久经考验的批处理模型,最适合处理时间要求不高的大规模数据集。通过非常低成本的组件即可搭建功能完善的Hadoop集群,使得这一廉价且高效的处理技术可以运用在很多场景案例中。与其他框架和引擎的兼容与集成能力使得Hadoop可以成为使用不同技术的多种工作负载处理平台的底层基础。
Storm 对于延迟需求很高的纯粹的流处理工作负载,Storm可能是最适合的技术。该技术可配合多种语言语言使用,由于Storm无法进行批处理,如果需要这些能力可能还需要使用其他软件。
Samza 对于已经具备或易于实现Hadoop和kafka的环境,Samza是流处理工作负载很好的一个选择。Samza本身适合很多团队使用(但相互之间并不一定紧密协调)不同处理阶段的多个数据流组织。Samza可大幅简化很多流处理工作,可实现低延迟的性能。如果部署需求与当前系统不兼容,也许并不适合使用。但如果需要极低延迟处理,或对严格的一次处理语义有较高需求,此时已然适合考虑。
spark Spark是多样化工作负载处理任务的最佳选择,Spark批处理以更高内存占用代价提供了无与伦比的优势。对于重视吞吐率而非延迟的工作负载,则spark比较适合作为流处理解决方案
Flink Flink解决了低延迟流处理,同时可支持传统的批处理任务

名词解释:

批处理:主要操作大容量静态数据,并在计算完成后返回数据

HDFS:一种分布式文件系统层,可对集群中的节点见的存储和复制做协调。HDFS确保了无法避免的节点故障发生后数据依然可用,可将其用作数据来源,可用于存储中间态的结果,并可存储最终的计算结果。

YARN:可充当Hadoop堆栈的集群协调组件。该组件负责协调并管理底层资源和调度作业的运行。

MapReduce:是Hadoop的原生批处理引擎。

 

流处理:

              会对随时进入系统的数据进行计算。相比批处理模式,这是一种截然不同的模式。流处理模式无需对整个数据集执行操           作,  而是对通过系统传输的每个数据项进行操作。处理工作是基于“事件”的除非明确停止,否则没有尽头,处理结果立刻           可用,并会随着数据的抵达持续更新。流处理几乎可以处理无限量的数据,但同一时间只能处理一条(真正的流处理)或             很少量的数据(微处理),不同时间只维持最少量的状态。虽然大部分系统提供了用于维持某些状态的方法,但流处理主             要针对副作用少,更加功能性的处理做了优化。此类处理非常适合某些类型的工作负载。有近实时处理的的任务非常适合             该中方式。分析、服务器或应用程序错误日志,以及其他基于时间的衡量指标是非常适合的。也很适合用来处理必须变动             或者峰值做出响应,并且一段时间内变化趋势的数据。

 

混合处理系统:批处理和流处理

    一些处理框架可同时处理批处理和流处理工作负载,这些框架可以用相同或者相关的组件和api处理两种类型的数据。借此让不同的处理需求得以简化。

你可能感兴趣的:(大数据)