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

MapReduce过程分析

input split(输入分片)阶段:在进行Map之前,会根据输入文件的大小进行输入分片,每个输入分片对应一个Map任务。输入分片本身并不记录输入数据的内容,而是记录一个分片的长度和一个记录数据所在位置的数组。输入分片往往和HDFS的block关系密切,比如,一个block的大小为128M,有三个输入文件,大小分别为3M,129M,254M则输入分片会把3M分为1个输入分片,129M分成两个分片,254M也会分成两个输入分片。如果我们在map之前做文件合并,把小文件合成大文件,就能够减少map的数量,可以优化MapReduce执行效率。

Map阶段:执行Map function。基于数据本地化原则,一般map的执行是在存储数据的DataNode节点上执行的。

Sort操作:sort是MapReduce模型默认的行为,根据Key对序列化的字节做的排序。

Combiner操作:可选。Combiner实际上是DataNode节点(单个Map的数据)本地数据做的Reduce操作。先对Map结果进行局部Reduce,最大的好处是减少了Reduce阶段数据传输的大小。不过也不是所有的应用都适合进行局部Reduce,要根据业务的需要进去操作。

Merge操作:将spill的文件归并到一起。它是怎么做的呢?“aaa”从某个map task读取过来时值是5,从另外一个map 读取时值是8,因为它们有相同的key,所以得merge成group。什么是group。对于“aaa”就是像这样的:{“aaa”, [5, 8, 2, …]},数组中的值就是从不同溢写文件中读取出来的,然后再把这些值加起来。

Shuffle阶段:将Map的输出作为Reduce的输入的过程就是shuffle了。Map结果输出时,会在内存里开启一个环形内存缓冲区,默认大小为100M。并且在配置文件里为这个缓冲区设定了一个阀值,默认是0.80,同时Map还会为输出操作启动一个守护线程,如果缓冲区的内存达到了阀值的80%时候,这个守护线程就会把内容写到磁盘上,这个过程叫spill,另外的20%内存可以继续写入要写进磁盘的数据,写磁盘和写内存是互不干扰的,如果内存区被撑满了,那么map久会阻塞写内存的操作,让写磁盘操作完成后再继续执行写内存,写磁盘之前,还会先后执行Sort和Combiner操作。写入磁盘的操作叫做spill,即内存满了往磁盘上“溢出”一个文件。也就是说在做map输出有几次spill就会产生多少个溢出文件,等map输出全部做完后,map会Merge这些溢出文件。这个过程里还有一个Partitioner,其实Partitioner操作和map阶段的输入分片(Input split)很像,一个Partitioner对象一个reduce作业,如果我们的mapreduce操作只有一个reduce操作,那么Partitioner就只有一个,如果有多个reduce操作,那么Partitioner对应会有多个,Partitioner就是reduce的输入分片,这个可以编程控制,主要是根据实际Key-Value的值,根据实际业务类型或者为了更好的reduce负载均衡要求进行,这是提高reduce效率的一个关键所在。到了reduce阶段就是合并map输出的文件,Partitioner会找到对应的map输出文件,然后进行复制操作(通过HTTP请求,把需要Reduce的数据聚到一起(HTTP传输也是影响performance的主要地方)),复制操作时reduce会开启几个复制线程,这些线程默认个数是5个,程序员也可以在配置文件更改复制线程的个数,这个复制过程和map写入磁盘过程类似,也有阀值和内存大小,阀值一样可以在配置文件里配置。

Reduce阶段:执行reduce function,把结果写到HFDS上。

Spark过程分析

不同于Hadoop MapReduce把数据处理流程分成明显的input split,map,spill,merge,shuffle, sort,reduce等几个阶段,每个阶段各司其职,spark的核心是RDD,在执行阶段分为不同的stage和一系列transformation,action操作。Spark会记录所有的transformation操作,绘制一个DAG图,DAG中的RDDs之间如果是窄依赖,则化为同一个stage,如果是宽依赖,则分成不同的stage。

  • 窄依赖是指父RDD的每个分区只被子RDD的一个分区所使用,子RDD分区通常对应常数个父RDD分区(O(1),与数据规模无关)
  • 相应的,宽依赖是指父RDD的每个分区都可能被多个子RDD分区所使用,子RDD分区通常对应所有的父RDD分区(O(n),与数据规模有关)

Spark运行过程中记录所有的transformation操作(不实际执行),遇到Action操作,把所有之前的transformation操作一把进行执行。在执行的过程中,也可能遇到shuffle的case(比如,reduceByKey操作),spark的shuffle也是将mapper的输出通过Partitioner操作送入Reducer。Reducer以内存做缓冲,变shuffle边做aggerate,等到aggerate完成之后,执行reduce function。

cloudera learning8:MapReduce and Spark的更多相关文章

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

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

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

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

  3. 谈谈Hadoop MapReduce和Spark MR实现

    谈谈MapReduce的概念.Hadoop MapReduce和Spark基于MR的实现 什么是MapReduce? MapReduce是一种分布式海量数据处理的编程模型,用于大规模数据集的并行运算. ...

  4. Yarn、MapReduce、spark、storm的关系

    YARN并不是下一代 MapReduce (MRv2),下一代 MapReduce 与第一代 MapReduce (MRv1)在编程接口.数据处理引擎(MapTask和ReduceTask)是完全一样 ...

  5. 详解MapReduce(Spark和MapReduce对比铺垫篇)

    本来笔者是不打算写MapReduce的,但是考虑到目前很多公司还都在用这个计算引擎,以及后续要讲的Hive原生支持的计算引擎也是MapReduce,并且为Spark和MapReduce的对比做铺垫,笔 ...

  6. spark VS mapreduce

    Apache Spark,一个内存数据处理的框架,现在是一个顶级Apache项目. 这是Spark迈向稳定的重要一步,因为它越来越多地在下一代大数据应用中取代MapReduce. MapReduce是 ...

  7. MapReduce Shuffle原理 与 Spark Shuffle原理

    MapReduce的Shuffle过程介绍 Shuffle的本义是洗牌.混洗,把一组有一定规则的数据尽量转换成一组无规则的数据,越随机越好.MapReduce中的Shuffle更像是洗牌的逆过程,把一 ...

  8. 【Hadoop】mapreduce采用多进程与spark采用多线程比较

    转自:Mapreduce多进程与spark多线程 Apache Spark的高性能一定程度上取决于它采用的异步并发模型(这里指server/driver 端采用的模型),这与Hadoop 2.0(包括 ...

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

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

随机推荐

  1. 调试asp.net网页时不显示treeview的原因

    在.net中本地调试asp.net网页时,treeview控件显示为文字方式,原因是在http://localhost/下面找不到webctrl_client的路径,解决的方法是把webctrl_cl ...

  2. java冒泡排序

    public class BubbleSort { public static void main(String[] args) { int score[] = {1,4,5,7,2,3,9,0,6, ...

  3. Received an invalid response. Origin 'null' is therefore not allowed access

    Received an invalid response. Origin 'null' is therefore not allowed access. 今天在做二级联动,使用ajax请求xml数据, ...

  4. Hadoop 大数据第一天

    大数据第一天 1.Hadoop生态系统 1.1 Hadoop v1.0 架构 MapReduce(用于数据计算) HDFS(用于存储数据) 1.2 Hadoop v2.0 架构 MapReduce(用 ...

  5. map 和 vector 的erase函数说明

    1. map的erase函数使用 这里首先要注意,C++针对map的erase函数有不同的函数原型,这往往是出现问题的关键所在.根据参考文献1: 在C++98中: (1) void erase (it ...

  6. WebRTC APM音频处理流程概述

    本文主要介绍WebRTC的APM. 现在主要介绍一下audio_processing.h. 首先插入了几个类,这些都是audio_processing的核心模块. class AudioFrame; ...

  7. https

    http://www.cnblogs.com/bugly/p/5075909.html# http://www.cnblogs.com/peijian708/archive/2011/05/07/20 ...

  8. Tomcat 解压版安装

    1.下载tomcat7.0 http://tomcat.apache.org/download-70.cgi

  9. Eclipse中快速删除空行

    1.在要编辑的文档中 "Ctrl"+"F",弹出搜索框: 2.在Find文本框中输入正则表达式:^\s*\n 3.勾选正则表达式选项: 4.Find和替换所有.

  10. CAS代理配置

    CAS Server:www.sinosoft.com 代理服务:palace.sinosoft.com 被代理服务:gguser.sinosoft.com 1. 建立key,命令如下: keytoo ...