Spark技术框架对比Hadoop框架

SparkMapReduce做了大量的改进和优化,主要包括以下个方面:

1)磁盘I/O的读写优化:

中间结果缓存在内存中:随着实时大数据应用越来越多,Hadoop作为离线的高吞吐、低响应框架已不能满足这类需求。Hadoop MapReducemap端将中间输出和结果存储在磁盘中,reduce端又需要从磁盘读写中间结果,从而造成磁盘I/O成为瓶颈。Spark则允许将map端的中间输出和结果缓存在内存中,从而使得reduce端在拉取中间结果时避免了大量的磁盘I/O

2)任务的并行处理优化:由于将中间结果写到磁盘与从磁盘读取中间结果属于不同的环节,Hadoop将它们简单地通过串行执行衔接起来。而Spark则把不同的环节抽象为Stage,允许多个Stage既可以串行执行,又可以并行执行。

3)任务调度中的资源过滤:当Stage中某个分区的Task执行失败后,会重新对此Stage调度,但在重新调度的时候会过滤已经执行成功的分区任务,所以不会造成重复计算和资源浪费。

4Shuffle排序:Hadoop MapReduceShuffle之前会将中间结果按keyhash值和key值大小进行两层排序,确保分区内部的有序性。而Spark则可以根据不同场景选择在map端排序还是reduce端排序。

5)内存管理优化:Spark将内存分为堆上的存储内存、堆外的存储内存、堆上的执行内存、堆外的执行内存4个部分。Spark既提供了执行内存和存储内存之间固定边界的实现,又提供了执行内存和存储内存之间“软”边界的实现。Spark默认使用“软”边界的实现,执行内存或存储内存中的任意一方在资源不足时都可以借用另一方的内存,最大限度地提高资源的利用率,减少对资源的浪费。

Spark采用更先进的架构,使得灵活性、易用性、性能等方面都比Hadoop更有优势,有取代Hadoop的趋势,但其稳定性有待进一步提高。我总结,具体表现在如下几个方面:

框架:Hadoop:MapRedcueMapReduce两个阶段,并通过shuffle将两个阶段连接起来的。但是套用MapReduce模型解决问题,不得不将问题分解为若干个有依赖关系的子问题,每个子问题对应一个MapReduce作业,最终所有这些作业形成一个DAGSpark:是通用的DAG框架,可以将多个有依赖关系的作业转换为一个大的DAG中间计算结果处理:Hadoop:DAG中,由于有多个MapReduce作业组成,每个作业都会从HDFS上读取一次数据和写一次数据(默认写三份),即使这些MapReduce作业产生的数据是中间数据也需要写HDFS。这种表达作业依赖关系的方式比较低效,会浪费大量不必要的磁盘和网络IO,根本原因是作业之间产生的数据不是直接流动的,而是借助HDFS作为共享数据存储系统。

Spark:在Spark中,使用内存(内存不够使用本地磁盘)替代了使用HDFS存储中间结果。对于迭代运算效率更高。

操作模型:Hadoop:只提供了MapReduce两种操作。Spark:提供很多种的数据集操作类型比如Transformations 包括map, filter, flatMap, sample, groupByKey, reduceByKey, union, join, cogroup, mapValues,sort,partionBy等多种操作类型,还提供actions操作包括Count,collect, reduce, lookup, save等多种。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值