Spark相比Hadoop MapReduce的优势

(1)中间结果输出
基于MapReduce的计算引擎通常会将中间结果输出到磁盘上,进行存储和容错。 出于任
务管道承接的考虑,当一些查询翻译到MapReduce任务时,往往会产生多个Stage,而这些
串联的Stage又依赖于底层文件系统(如HDFS)来存储每一个Stage的输出结果。
Spark将执行模型抽象为通用的有向无环图执行计划(DAG),这可以将多Stage的任务
串联或者并行执行,而无须将Stage中间结果输出到HDFS中。 类似的引擎包括Dryad、
Tez
(2)数据格式和内存布局
由于MapReduce Schema on Read处理方式会引起较大的处理开销。 Spark抽象出分布
式内存存储结构弹性分布式数据集RDD,进行数据的存储。 RDD能支持粗粒度写操作,但对
于读取操作,RDD可以精确到每条记录,这使得RDD可以用来作为分布式索引。 Spark的特
性是能够控制数据在不同节点上的分区,用户可以自定义分区策略,如Hash分区等。 Shark
和Spark SQL在Spark的基础之上实现了列存储和列存储压缩。
(3)执行策略
MapReduce在数据Shuffle之前花费了大量的时间来排序,Spark则可减轻上述问题带来
的开销。 因为Spark任务在Shuffle中不是所有情景都需要排序,所以支持基于Hash的分布式
聚合,调度中采用更为通用的任务执行计划图(DAG),每一轮次的输出结果在内存缓存。
(4)任务调度的开销
传统的MapReduce系统,如Hadoop,是为了运行长达数小时的批量作业而设计的,在
某些极端情况下,提交一个任务的延迟非常高。
Spark采用了事件驱动的类库AKKA来启动任务,通过线程池复用线程来避免进程或线程
启动和切换开销。

发布了29 篇原创文章 · 获赞 4 · 访问量 6581

猜你喜欢

转载自blog.csdn.net/qq_42913729/article/details/81530201