Spark与MapReduce的⽐较
Spark和MapReduce都是⽤来处理海量数据,但是在处理⽅式和处理速度上却不同。
第⼀,spark处理数据是基于内存的,⽽MapReduce是基于磁盘处理数据的。
MapReduce是将中间结果保存到磁盘中,减少了内存占⽤,牺牲了计算性能。
Spark是将计算的中间结果保存到内存中,可以反复利⽤,提⾼了处理数据的性能。
第⼆,Spark在处理数据时构建了DAG有向⽆环图,减少了shuffle和数据落地磁盘的次数
Spark 计算⽐ MapReduce 快的根本原因在于 DAG 计算模型。⼀般⽽⾔,DAG 相⽐MapReduce 在⼤多数情况下可以减少 shuffle 次数。Spark 的 DAGScheduler 相当于⼀个改进版的 MapReduce,如果计算不涉及与其他节点进⾏数据交换,Spark 可以在内存中⼀次性完成这些操作,也就是中间结果⽆须落盘,减少了磁盘 IO 的操作。但是,如果计算过程中涉及数据交换,Spark 也是会把 shuffle 的数据写磁盘的!
Spark 是基于内存的计算,但这不是快的主要原因,要对数据做计算,必然得加载到内存,Hadoop 也是如此,只不过 Spark ⽀持将需要反复⽤到的数据给 Cache 到内存中,减少数据加载耗时,所以 Spark 更适⽤于跑机器学习算法(需要对数据进⾏反复迭代)。
第三,Spark是粗粒度资源申请,⽽MapReduce是细粒度资源申请
hadoop与spark的区别与联系粗粒度申请资源指的是在提交资源时,spark会提前向资源管理器(yarn,mess)将资源申请完毕,如果申请不到资源就等待,如果申请到就运⾏task任务,⽽不需要task再去申请资源。
MapReduce是细粒度申请资源,提交任务,task⾃⼰申请资源⾃⼰运⾏程序,⾃⼰释放资源,虽然资源能够充分利⽤,但是这样任务运⾏的很慢。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论