MR和Spark的比较

目录

一、Spark为什么比MR快?

二、hadoop和spark的shuffle相同和差异?

三、Spark与Hadoop差异


一、Spark为什么比MR快?

1、spark是基于内存进行数据处理的,MapReduce是基于磁盘进行数据处理的

2、spark中具有DAG有向无环图,DAG有向无环图在此过程中减少了shuffle以及落地磁盘的次数

3、spark是粗粒度资源申请,也就是当提交spark application的时候,application会将所有的资源申请完毕,如果申请不到资源就等待,如果申请到资源才执行application,task在执行的时候就不需要自己去申请资源,task执行快,当最后一个task执行完之后task才会被释放。

优点是执行速度快,缺点是不能使集群得到充分的利用

MapReduce是细粒度资源申请,当提交application的时候,task执行时,自己申请资源,自己释放资源,task执行完毕之后,资源立即会被释放,task执行的慢,application执行的相对比较慢。

优点是集群资源得到充分利用,缺点是application执行的相对比较慢。

Spark是基于内存的,而MapReduce是基于磁盘的迭代

//有向无环图是指:一个图从顶点出发,无法再回到原点,那么这种图叫做有向无环图。

//DAG计算模型在spark任务调度

//Spark是粗粒度资源调度,MapReduce是细粒度资源调度


二、hadoop和spark的shuffle相同和差异?

       Hadoop MapReduce 是 sort-based,进入 combine() 和 reduce() 的 records 必须先 sort。这样的好处在于 combine/reduce() 可以处理 大规模的数据,因为其输入数据可以通过外排得到(mapper 对每段数据先做排序,reducer 的 shuffle 对排好序的每段数据做归并)。目前的 Spark 默认选择的是 hash-based,通常使用 HashMap 来对 shuffle 来的数据进行 aggregate,不会对数据进行提前排序。如果用户需要经过 排序的数据,那么需要自己调用类似 sortByKey() 的操作;如果你是Spark 1.1的用户,可以将 spark.shuffle.manager设置为sort,则会对数据进行排序。在Spark 1.2中,sort将作为默认的 Shuffle实现。


三、Spark与Hadoop差异

     Spark是在借鉴了MapReduce之上发展而来的,继承了其分布式并行计算的优点并改进了MapReduce明显的缺陷,具体如下:

        首先,Spark把中间数据放到内存中,迭代运算效率高。MapReduce中计算结果需要落地,保存到磁盘上,这样势必会影响整体速度,而Spark支持DAG图的分布式并行计算的编程框架,减少了迭代过程中数据的落地,提高了处理效率。

        其次,Spark容错性高。Spark引进了弹性分布式数据集RDD (Resilient Distributed Dataset)的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据“血统”(即充许基于数据衍生过程)对它们进行重建。另外在RDD计算时可以通过CheckPoint来实现容错,而CheckPoint有两种方式:CheckPoint Data,和Logging The Updates,用户可以控制采用哪种方式来实现容错。

        最后,Spark更加通用。不像Hadoop只提供了Map和Reduce两种操作,Spark提供的数据集操作类型有很多种,大致分为:Transformations和Actions两大类。Transformations包括Map、Filter、FlatMap、Sample、GroupByKey、ReduceByKey、Union、Join、Cogroup、MapValues、Sort和PartionBy等多种操作类型,同时还提供Count, Actions包括Collect、Reduce、first、take、foreach、Lookup和Save等操作。另外各个处理节点之间的通信模型不再像Hadoop只有Shuffle一种模式,用户可以命名、物化,控制中间结果的存储、分区等。

你可能感兴趣的:(mr,spark,大数据,分布式,hadoop)