加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数据处理框架的类型、比较和选择

发布时间:2018-04-03 01:53:51 所属栏目:大数据 来源:站长网
导读:前言 说起大数据处理,一切都起源于Google公司的经典论文:《MapReduce:Simplied Data Processing on Large Clusters》。在当时(2000年左右),由于网页数量急剧增加,Google公司内部平时要编写很多的程序来处理大量的原始数据:爬虫爬到的网页、网页请求日

如果已经拥有Hadoop集群和Kafka集群环境,那么使用Samza作为流处理系统无疑是一个非常好的选择。由于可以很方便的将处理过的数据再次写入Kafka,Samza尤其适合不同团队之间合作开发,处理不同阶段的多个数据流。

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

一些处理框架既可以进行批处理,也可以进行流处理。这些框架可以使用相同或相关的API处理历史和实时数据。当前主流的混合处理框架主要为Spark和Flink。

虽然专注于一种处理方式可能非常适合特定场景,但是混合框架为数据处理提供了通用的解决方案。

Apache Spark

如果说如今大数据处理框架处于一个群星闪耀的年代,那Spark无疑就是所有星星中最闪亮的那一颗。Spark由加州大学伯克利分校AMP实验室开发,最初的设计受到了MapReduce思想的启发,但不同于MapReduce的是,Spark通过内存计算模型和执行优化大幅提高了对数据的处理能力(在不同情况下,速度可以达到MR的10-100倍,甚至更高)。相比于MapReduce,Spark具有如下优点:

提供了内存计算模型RDD(Resilient Distributed Dataset,弹性分布式数据集),将数据读入内存中生成一个RDD,再对RDD进行计算。并且每次计算结果可以缓存在内存中,减少了磁盘IO。因此很适用于迭代计算。

不同于MapReduce的MR模型,Spark采用了DAG编程模型,将不同步骤的操作串联成一个有向无环图,可以有效减少任务间的数据传递,提高了性能。

提供了丰富的编程模型,可以轻松实现过滤、连接、聚合等操作,代码量相比MapReduce少到令人发指,因此可以提高开发人员的生产力。

支持Java、Scala、Python和R四种编程语言,为不同语言的使用者降低了学习成本。

而Spark的流处理能力,则是由Spark Streaming模块提供的。Spark在设计之初与MapReduce一样是用于批处理系统,为了适应于流处理模式,Spark提出了微批次(Micro-Batch)的概念,即把一小段时间内的接入数据作为一个微批次来处理。这样做的优点是在设计Spark Streaming时可以很大程度上重用批处理模块(Spark Core)的代码,开发人员也不必学习两套编程模型。但缺点就是,与Storm等原生的流处理系统相比,Spark Streaming的延时会相对高一些。

除了最初开发用于批处理的Spark Core和用于流处理的Spark Streaming,Spark还提供了其他编程模型用于支持图计算(GraphX)、交互式查询(Spark SQL)和机器学习(MLlib)。

但Spark也不是没有缺点。在批处理领域,由于内存是比硬盘更昂贵的资源,所以Spark集群的成本比MapReduce集群更高。而在流处理领域,微批次的架构使得它的延时要比Storm等流处理系统略高。不过瑕不掩瑜,Spark依然是如今最炙手可热的数据处理框架。

Apache Flink

有趣的是,同样作为混合处理框架,Flink的思想与Spark是完全相反的:Spark把流拆分成若干个小批次来处理,而Flink把批处理任务当作有界的流来处理。其本质原因是,Spark最初是被设计用来进行批处理的,而Flink最初是被设计用来进行流处理的。这种流处理优先的方式叫做Kappa架构,与之相对的使用批处理优先的架构叫做Lambda架构。Kappa架构会使用处理流的方式处理一切,以此来简化编程模型。这一切是在最近流处理引擎逐渐成熟起来才有可能实现的。

Flink的流处理模型将逐项输入的数据作为真实的流处理。Flink提供了DataStream API用于处理无尽的数据流。Flink的基本组件包括:

Stream:Stream是流过系统的不可变的、无界的数据集

Operator:Operator用来操作数据流以产生新的数据流(stream)

Source:Source是数据流(stream)进入系统的入口

Sink:Sink是数据流(stream)流出Flink系统后的位置。

它可能是数据库或到其他系统的连接器

Flink的流处理思想与Storm类似,以source接入数据,通过不同的operator进行transformation,最后输出到sink。

Flink的提供了DataSet API用于批处理。Flink的批处理在很大程度上可以看作是流处理的一种扩展,它读取在持久存储系统上的数据,并把去除的数据集当成一个有边界的流来处理。

与Spark相同,Flink也提供了较为完整的数据处理方式。除了上面介绍的流处理(DataStream API)和批处理(DataSet API)之外,Flink还提供了类SQL查询(Table API)、图计算(Gelly)和机器学习库(Flink ML)。而令人惊讶的是,在很多性能测试中,Flink甚至略优于Spark。

在目前的数据处理框架领域,Flink可谓独树一帜。虽然Spark同样也提供了批处理和流处理的能力,但Spark流处理的微批次架构使其响应时间略长。Flink流处理优先的方式实现了低延迟、高吞吐和真正逐条处理。

同样,Flink也并不是完美的。Flink目前最大的缺点就是缺乏在大型公司实际生产项目中的成功应用案例。相对于Spark来讲,它还不够成熟,社区活跃度也没有Spark那么高。但假以时日,Flink必然会改变数据处理框架的格局。

六、大数据处理框架的选择

1. 对于初学者

由于Apache Hadoop在大数据领域的广泛使用,因此仍推荐作为初学者学习数据处理框架的首选。虽然MapReduce因为性能原因以后的应用会越来越少,但是YARN和HDFS依然作为其他框架的基础组件被大量使用(比如HBase依赖于HDFS,YARN可以为Spark、Samza等框架提供资源管理)。学习Hadoop可以为以后的进阶打下基础。

Apache Spark在目前的企业应用中应该是当之无愧的王者。在批处理领域,虽然Spark与MapReduce的市场占有率不相上下,但Spark稳定上升,而MapReduce却稳定下降。而在流处理领域,Spark Streaming与另一大流处理系统Apache Storm共同占据了大部分市场(当然很多公司会使用内部研发的数据处理框架,但它们多数并不开源)。伯克利的正统出身、活跃的社区以及大量的商用案例都是Spark的优势。除了可用于批处理和流处理系统,Spark还支持交互式查询、图计算和机器学习。Spark在未来几年内仍然会是大数据处理的主流框架,推荐同学们认真学习。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读