- 深入理解Spark:核心思想与源码分析
- 耿嘉安
- 1373字
- 2023-02-02 15:32:44
2.1 初识Spark
2.1.1 Hadoop MRv1的局限
Hadoop1.0版本采用的是MRv1版本的MapReduce编程模型。MRv1版本的实现都封装在org.apache.hadoop.mapred包中,MRv1的Map和Reduce是通过接口实现的。MRv1包括三个部分:
·运行时环境(JobTracker和TaskTracker);
·编程模型(MapReduce);
·数据处理引擎(Map任务和Reduce任务)。
MRv1存在以下不足:
·可扩展性差:在运行时,JobTracker既负责资源管理又负责任务调度,当集群繁忙时,JobTracker很容易成为瓶颈,最终导致它的可扩展性问题。
·可用性差:采用了单节点的Master,没有备用Master及选举操作,这导致一旦Master出现故障,整个集群将不可用。
·资源利用率低:TaskTracker使用slot等量划分本节点上的资源量。slot代表计算资源(CPU、内存等)。一个Task获取到一个slot后才有机会运行,Hadoop调度器负责将各个TaskTracker上的空闲slot分配给Task使用。一些Task并不能充分利用slot,而其他Task也无法使用这些空闲的资源。slot分为Map slot和Reduce slot两种,分别供MapTask和Reduce Task使用。有时会因为作业刚刚启动等原因导致MapTask很多,而Reduce Task任务还没有调度的情况,这时Reduce slot也会被闲置。
·不能支持多种MapReduce框架:无法通过可插拔方式将自身的MapReduce框架替换为其他实现,如Spark、Storm等。
MRv1的示意如图2-1所示。
图2-1 MRv1示意图
Apache为了解决以上问题,对Hadoop进行升级改造,MRv2最终诞生了。MRv2重用了MRv1中的编程模型和数据处理引擎,但是运行时环境被重构了。JobTracker被拆分成了通用的资源调度平台(ResourceManager,RM)和负责各个计算框架的任务调度模型(ApplicationMaster,AM)。MRv2中MapReduce的核心不再是MapReduce框架,而是YARN。在以YARN为核心的MRv2中,MapReduce框架是可插拔的,完全可以替换为其他MapReduce实现,比如Spark、Storm等。MRv2的示意如图2-2所示。
图2-2 MRv2示意图
Hadoop MRv2虽然解决了MRv1中的一些问题,但是由于对HDFS的频繁操作(包括计算结果持久化、数据备份及shuffle等)导致磁盘I/O成为系统性能的瓶颈,因此只适用于离线数据处理,而不能提供实时数据处理能力。
2.1.2 Spark使用场景
Hadoop常用于解决高吞吐、批量处理的业务场景,例如离线计算结果用于浏览量统计。如果需要实时查看浏览量统计信息,Hadoop显然不符合这样的要求。Spark通过内存计算能力极大地提高了大数据处理速度,满足了以上场景的需要。此外,Spark还支持SQL查询、流式计算、图计算、机器学习等。通过对Java、Python、Scala、R等语言的支持,极大地方便了用户的使用。
2.1.3 Spark的特点
Spark看到MRv1的问题,对MapReduce做了大量优化,总结如下:
·快速处理能力。随着实时大数据应用越来越多,Hadoop作为离线的高吞吐、低响应框架已不能满足这类需求。Hadoop MapReduce的Job将中间输出和结果存储在HDFS中,读写HDFS造成磁盘I/O成为瓶颈。Spark允许将中间输出和结果存储在内存中,避免了大量的磁盘I/O。同时Spark自身的DAG执行引擎也支持数据在内存中的计算。Spark官网声称性能比Hadoop快100倍,如图2-3所示。即便是内存不足,需要磁盘I/O,其速度也是Hadoop的10倍以上。
·易于使用。Spark现在支持Java、Scala、Python和R等语言编写应用程序,大大降低了使用者的门槛。自带了80多个高等级操作符,允许在Scala、Python、R的shell中进行交互式查询。
·支持查询。Spark支持SQL及Hive SQL对数据查询。
·支持流式计算。与MapReduce只能处理离线数据相比,Spark还支持实时的流计算。Spark依赖Spark Streaming对数据进行实时的处理,其流式处理能力还要强于Storm。
·可用性高。Spark自身实现了Standalone部署模式,此模式下的Master可以有多个,解决了单点故障问题。此模式完全可以使用其他集群管理器替换,比如YARN、Mesos、EC2等。
·丰富的数据源支持。Spark除了可以访问操作系统自身的文件系统和HDFS,还可以访问Cassandra、HBase、Hive、Tachyon以及任何Hadoop的数据源。这极大地方便了已经使用HDFS、Hbase的用户顺利迁移到Spark。
图2-3 Hadoop与Spark执行逻辑回归时间比较