Hadoop与Spark

Spark是通过借鉴HadoopMapReduce发展而来的,继承了其分布式并行计算的优点,并改进了MapReduce明显的缺陷,具体体现在以下几个方面。
(1) Spark把中间数据放在内存中,迭代运算效率高。MapReduce中的计算结果是保存在磁盘上,这样势必会影响整体的运行速度,而Spark支待DAG图的分布式并行计算的编程框架,减少了迭代过程中数据的落地,提高了处理效率。


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

(3)Spark更加通用。不像Hadoop只提供了Map和Reduce两种操作,Spark提供的数据集操作类型有很多种,大致分为转换操作和行动操作两大类。转换操作包括Map、Filter、FlatMap、 Sample、GroupByKey、ReduceByKey、Union、Join、Cogroup、MapValues、Sort和PartionBy等多种操作类型,行动操作包括Collect、Reduce、Lookup和Save等操作类型。另外,各个处理节点之间的通信模型不再像Hadoop只有Shuffie一种模式,用户可以命名、物化,控制中间结果的存储、分区等。

--------------------------------------------------------------------------------------------------------------------------------------------------------

Spark 相对于 Hadoop 有如此快的计算速度有数据本地性、调度优化和传输优化等原因,其中最主要的是基于内存计算和引入 DAG 执行引擎。
(1) Spark 默认情况下迭代过程的数据保存到内存中,后续的运行作业利用这些结果进行计算,而 Hadoop 每次计算结果都直接存储到磁盘中,在随后的计算中需要从磁盘中读取上次计算的结果。 由千从内存读取数据时间比磁盘读取时间低两个数量级,这就造成了 Hadoop 的运行速度较慢,这种情况在迭代计算中尤为明显。
(2)由于较复杂的数据计算任务需要多个步骤才能实现,且步骤之间具有依赖性。 对于这些步骤之间,Hadoop 需要借助 Oozie 等工具进行处理。 而 Spark 在执行任务前,可以将这些步骤根据依赖关系形成 DAG 图(有向无环图),任务执行可以按图索骥,不需要人工干预,从而优化了计算路径,大大减少了 1/0 读取操作。

你可能感兴趣的:(Spark,Hadoop)