谈谈MapReduce的概念、Hadoop MapReduce和Spark基于MR的实现

什么是MapReduce?

MapReduce是一种分布式海量数据处理的编程模型,用于大规模数据集的并行运算。

有以下几个特点:

  • 分而治之,并行处理。

    抽象了map和reduce的计算流程,对于分布式存储的数据可以并行的进行map处理,之后在reduce端对map结果进行汇总。

  • 移动计算而非移动数据。

    数据的计算传输需要大量的磁盘和网络IO。MapReduce会尽量在数据存储的节点执行计算,以减少不必要的开销。

Hadoop MapReduce

我们常说的MapReduce就是Hadoop MapReduce。

Hadoop MapReduce作业被分成一系列运行在分布式集群中的map任务和reduce任务,每个任务都工作在被指定的小的数据自己上,因此负载是遍布集群中各个节点上的。

map任务负责数据的载入、解析、转换和过滤。MapReduce作业的输入是一系列储存在HDFS中的文件。map任务的输出被称为中间键和中间值,会被发送到reduce端进行后续处理。

每个reduce任务负责处理map任务输出结果的一个子集。MapReduce确保每个reduce的输入都是按键排序的。

系统执行排序、将map输出作为输入传递给reduce的过程称为shuffle。shuffle是MapReduce的心脏,关于shuffle详情请自己搜索。

Pig和Hive都是对MapReduce更高层次的抽象,他们都会将高级的语言翻译成一组MapReduce作业,执行计算。

Spark基于MapReduce实现

Spark通过借鉴Hadoop MapReduce,继承了其分布式并行计算的优点,并改进了MapReduce的一些缺点。

Spark并行处理主要基于其内部RDD和DAG来实现。

RDD(弹性分布式数据集):作为Spark基本编程模型,它是MapReduce模型的扩展和延伸。其运用高效的数据共享概念(分区)和类似MapReduce的操作方式,使得并行计算能高效的进行。

DAG(有向无环图):Spark使用DAG描述了RDD的依赖关系(宽/窄依赖),维护了RDD间的血缘关系,减少了迭代过程中数据的落地,提高了处理效率。

我们提交一个Spark代码,大概执行流程如下:

  1. 根据行动操作划分job
  2. 每个job内部根据宽依赖划分stage。stage分为ShuffleMapStage和ResultStage。
  3. 执行stage内部的task。每个stage内部会有许多task,task是Spark的最小执行单元,task的数量取决于RDD的分区数量,spark会优先选择数据所在的节点启动task。task分为ShuffleMapTask和ResultTask。ShuffleMapTask返回输出结果相关信息供后续task使用;ResultTask根据结果大小,会选择丢弃或者返回给Driver端。
  4. ......

从上面流程,我们可以简单总结:

  • Spark通过RDD的分区,来保证MR中的并行处理
  • Spark通过DAG宽窄依赖,优化了task计算流程,减少了数据落盘的次数
  • Spark中也会保障数据本地化,来实现移动计算而非移动数据。

Spark与MapReduce比较

  1. Spark会中间数据放在内存中,迭代运算效率高。MapReduce的中间计算结果保存在磁盘上,势必影响整体的运行速度。
  2. Spark的容错性高。Spark的RDD可以根据血统来重新生成数据,也可以通过checkpoint来实现容错。
  3. Spark更加的通用。Spark提供了许多的算子,可以更便捷的处理数据。

参考

《MapReduce设计模式》

《Hadoop权威指南》

《图解Spark核心技术与案例实践》

参考书籍+个人理解,如有偏差,欢迎交流。

谈谈Hadoop MapReduce和Spark MR实现的更多相关文章

  1. Hadoop MapReduce概念学习系列之mr程序组件全貌(二十)

    其实啊,spilt是,控制Apache Hadoop Mapreduce的map并发任务数,详细见http://www.cnblogs.com/zlslch/p/5713652.html map,是m ...

  2. Hadoop MapReduce Task的进程模型与Spark Task的线程模型

    Hadoop的MapReduce的Map Task和Reduce Task都是进程级别的:而Spark Task则是基于线程模型的. 多进程模型和多线程模型 所谓的多进程模型和多线程模型,指的是同一个 ...

  3. hadoop的mapReduce和Spark的shuffle过程的详解与对比及优化

    https://blog.csdn.net/u010697988/article/details/70173104 大数据的分布式计算框架目前使用的最多的就是hadoop的mapReduce和Spar ...

  4. 关于hadoop3.x MR报错:找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster

    用的apache Hadoop3.X,今天运行MR报错: 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster 关键需要配置两个配置:ma ...

  5. hadoop MapReduce Yarn运行机制

    原 Hadoop MapReduce 框架的问题 原hadoop的MapReduce框架图 从上图中可以清楚的看出原 MapReduce 程序的流程及设计思路: 首先用户程序 (JobClient) ...

  6. Hadoop MapReduce编程学习

    一直在搞spark,也没时间弄hadoop,不过Hadoop基本的编程我觉得我还是要会吧,看到一篇不错的文章,不过应该应用于hadoop2.0以前,因为代码中有  conf.set("map ...

  7. 从分治算法到 Hadoop MapReduce

    从分治算法说起 要说 Hadoop MapReduce 就不得不说分治算法,而分治算法其实说白了,就是四个字 分而治之 .其实就是将一个复杂的问题分解成多组相同或类似的子问题,对这些子问题再分,然后再 ...

  8. MapReduce和Spark写入Hbase多表总结

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 大家都知道用mapreduce或者spark写入已知的hbase中的表时,直接在mapreduc ...

  9. cloudera learning8:MapReduce and Spark

    YARN:Yet Another Resource Negotiator, Hadoop集群的资源管理器,可以对运行在Hadoop上的MapReduce V2,Spark,Impala等进行内存和CP ...

随机推荐

  1. sql 语句和实例

    修改字段格式的sql语句: alter table tablename alter column colname newDataType 比如:alter table mytable alter co ...

  2. 双缓冲显示字幕(卡拉ok字幕)

    思路: 1.设置定时器SetTime,在Ontime()里面确定显示矩形的大小,让后用DrawText把字铁道矩形上面: 2. int nTextHei = dc.GetTextExtent( m_s ...

  3. Linux hostname主机名配置文件/etc/hosts详解

    这篇文章为大家介绍linux hostname主机名配置文件/etc/hosts,包括主机名的用途.配置文件的操作方法等,有需要的朋友,可以参考下 1.什么是Linux主机名 无论在局域网还是INTE ...

  4. JavaScript基础数组的字面声名法(010)

    1.两种方法的对比 数组在JavaScript中,就像大多数的其它语言 一样,是对象.我们可以使用JavaScript内置的数组构造函数Array()来创建数组.就象对象的字面声名法一样,数组也可以采 ...

  5. Linux服务搭之 - 消息队列(RabbitMQ)

    本章主要目的是为了后续spring-cloud-bus做准备,讲述在Linux Centos7操作系统中搭建 RabbitMQ… - 什么是RabbitMQ RabbitMQ 是一个使用 Erlang ...

  6. React源码之组件的实现与首次渲染

    react: v15.0.0 本文讲 组件如何编译 以及 ReactDOM.render 的渲染过程. babel 的编译 babel 将 React JSX 编译成 JavaScript. 在 ba ...

  7. TKCTF-学校内部的校赛

    *Reverse easy_C easy_re1.exe 在网络百度到解决逆向需要用到软件IDA 然后用IDA打开一条条的找我找到了一条很怪的ZmxhZ3s1ZWU1ZjYyOC1mMzVhLTQxN ...

  8. day54 js基础

    目录 一.变量 二.数据类型 1 数值类型(number) 2 字符类型(string) 3 字符类型常用方法 4 布尔值(boolean) 5 null与undefined 6 对象 7 运算符 8 ...

  9. day35 socket套接字介绍

    目录 一.套接字发展史与分类 二.套接字工作流程 三.基于tcp的套接字 一.套接字发展史与分类 套接字起源于 20 世纪 70 年代加利福尼亚大学伯克利分校版本的 Unix,即人们所说的 BSD U ...

  10. 使用命名管道承载gRPC

    最近GRPC很火,感觉整RPC不用GRPC都快跟不上时髦了. gRPC设计 刚好需要使用一个的RPC应用系统,自然而然就盯上了它,但是它真能够解决所有问题吗?不见得,先看看他的优点: gRPC是一种与 ...