在大数据系统框架当中,Spark的表现是得到广泛的认可的。尤其是在近几年的发展当中,其表现出来的性能优势,使得Spark市场占有率大大提升,Spark在大数据中的位置,也得到进一步的提升。今天我们就来聊聊Spark是如何通过优化改进实现性能提升的。
每每说起Spark的优化改进,多半都是基于Hadoop来说的,Hadoop的MapReduce框架是大数据分布式计算框架的先驱,但是随着大数据的发展,针对实时数据流计算,确实是表现不够得力。
Spark框架基于这样的背景,继承了MapReduce的算法模型,做了进一步的优化改进。
早期的Hadoop MapReduce采用的是MRv1版本的MapReduce编程模型。MRv1的Map和Reduce都是通过接口实现的,将集群管理功能和数据处理能力紧耦合在一起,这样的设计导致了MapReduce在数据处理上出现各种不足:
①
可扩展性差:在运行时,JobTracker既负责资源管理,又负责任务调度,当集群繁忙时,JobTracker很容易成为瓶颈,最终导致它的可扩展性问题。
②
可用性差:采用了单节点的Master,没有备用Master及选举操作,这导致一旦Master出现故障,整个集群将不可用。
③
资源利用率低:TaskTracker使用slot等量划分本节点上的资源量。Hadoop调度器负责将各个TaskTracker上的空闲slot分配给Task使用。即使一些Task不能充分利用slot所代表的资源,其他Task也无法使用这些空闲的资源。
Spark的研发者,基于MRv1当中体现出来的问题,做了大量的改进和优化:
①
减少磁盘I/O:
中间结果缓存在内存中:Spark允许将map端的中间输出和结果缓存在内存中,从而使得reduce端在拉取中间结果时避免了大量的磁盘I/O。
应用程序上传的资源文件缓存在Driver本地文件服务的内存中:当Executor执行任务时直接从Driver的内存中读取,从而节省了大量的磁盘I/O。
②
增加任务并行度:Spark把不同的环节抽象为Stage,允许多个Stage既可以串行执行,又可以并行执行。
③
避免重复计算:当Stage中某个分区的Task执行失败后,会重新对此Stage调度,但在重新调度的时候会过滤已经执行成功的分区任务,避免重复计算和资源浪费。
总体来说,Spark在大数据中的位置得益于计算性能的提升,而性能的提升也是基于Hadoop的经验教训而来,可以说是站在Hadoop的肩膀上,因此有更好的性能提升也是理所当然的。成都加米谷大数据,大数据技术知识分享,
大数据开发培训,2020春季班正在招生中,详情可联系客服了解!