一、MapReduce

MapReduce是一种软件框架,可以采用并行、分布式方式处理GB、TB甚至PB级的大数据集,同时他也是在商用服务器集群上完成大规模数据处理的执行框架。实现MapReduce的方法有很多,本书主要关注Apache Spark 和 MapReduce/Hadoop两种实现方法。

MapReduce是一种编程范式,可以利用集群环境的成百上千台服务器实现强大的可伸缩性(在这里,我们谈到的可伸缩性是指横向扩容,比如:DNA测序需要3台服务器用60小时完成,横向扩容到50台后,只需2小时即可完成)。使用MapReduce编程范式时,重点是编写两个函数:

map() 过滤和聚集数据集。

reduce() 根据map()生成的键完成规约、分组和总结。

spark如何mapreduce的_Hadoop


MapReduce的主要优点在于它的“不共享”数据处理平台,即多个map() 或 reduce() 之间 ,可以互不干扰的并行执行,从而提高大数据的处理效率。

可利用如下例子,对MapReduce原理进行简单示意:

假设我们想要统计一个图书馆的藏书数量,现共有1000个书架,我们要把最后的统计结果报给管理员。

MapReduce的解决方案:

map() 雇佣1000个工人,每个工人统计一个书架的藏书数量;

reduce() 把这些工人的统计结果汇总起来,报给管理员;

MapReduce范式,适用于以下情况:即当我们得到大数据时,可以将大数据分块,并进行独立处理,此时,可利用MapReduce提高大数据处理效率。

二、Hadoop / Spark

Hadoop 和 Spark是两个分布式软件框架。
Hadoop是一个MapReduce框架,在这个框架上可运行map(),combine(),reduce()函数的作业。
Spark不是一个MapReduce框架,不过很容易用来支持MapReduce框架的功能,它提供了一个适当的API可以用来处理map()和reduce()功能。
与Hadoop相比,Spark的API提供了更高层次的抽象,一般,几行Spark代码可能等价于Hadoop的30~40行代码。
与Hadoop相比,Spark作业能够更快的完成,这是因为,对于一个复杂的任务,Spark可在一个作业中设立多个阶段完成,而Hadoop可能要将一个复杂的任务分解为多个任务才能完成。
尽管Hadoop和Spark建立在一个“不共享”范式的基础上,但是,他们也确实支持在所有集群节点上共享不可变的数据结构。
Hadoop主要设计用于MapReduce批处理,他并不是一个理想的“实时处理解决方案”,相比,Spark是一个顶级的Apache项目,非常适合近实时处理。
Hadoop和Spark支持容错,任何结点的宕机都不会丢失所需的计算结果。

Hadoop和Spark推荐书籍:
《 Hadoop:The Definitive Guide》
《Hadoop in Action》
《Hadoop in Practice》
《Learning Spark》