cloudera learning8:MapReduce and Spark
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的更多相关文章
- MapReduce和Spark写入Hbase多表总结
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 大家都知道用mapreduce或者spark写入已知的hbase中的表时,直接在mapreduc ...
- hadoop的mapReduce和Spark的shuffle过程的详解与对比及优化
https://blog.csdn.net/u010697988/article/details/70173104 大数据的分布式计算框架目前使用的最多的就是hadoop的mapReduce和Spar ...
- 谈谈Hadoop MapReduce和Spark MR实现
谈谈MapReduce的概念.Hadoop MapReduce和Spark基于MR的实现 什么是MapReduce? MapReduce是一种分布式海量数据处理的编程模型,用于大规模数据集的并行运算. ...
- Yarn、MapReduce、spark、storm的关系
YARN并不是下一代 MapReduce (MRv2),下一代 MapReduce 与第一代 MapReduce (MRv1)在编程接口.数据处理引擎(MapTask和ReduceTask)是完全一样 ...
- 详解MapReduce(Spark和MapReduce对比铺垫篇)
本来笔者是不打算写MapReduce的,但是考虑到目前很多公司还都在用这个计算引擎,以及后续要讲的Hive原生支持的计算引擎也是MapReduce,并且为Spark和MapReduce的对比做铺垫,笔 ...
- spark VS mapreduce
Apache Spark,一个内存数据处理的框架,现在是一个顶级Apache项目. 这是Spark迈向稳定的重要一步,因为它越来越多地在下一代大数据应用中取代MapReduce. MapReduce是 ...
- MapReduce Shuffle原理 与 Spark Shuffle原理
MapReduce的Shuffle过程介绍 Shuffle的本义是洗牌.混洗,把一组有一定规则的数据尽量转换成一组无规则的数据,越随机越好.MapReduce中的Shuffle更像是洗牌的逆过程,把一 ...
- 【Hadoop】mapreduce采用多进程与spark采用多线程比较
转自:Mapreduce多进程与spark多线程 Apache Spark的高性能一定程度上取决于它采用的异步并发模型(这里指server/driver 端采用的模型),这与Hadoop 2.0(包括 ...
- Hadoop MapReduce Task的进程模型与Spark Task的线程模型
Hadoop的MapReduce的Map Task和Reduce Task都是进程级别的:而Spark Task则是基于线程模型的. 多进程模型和多线程模型 所谓的多进程模型和多线程模型,指的是同一个 ...
随机推荐
- 在linux中减小和增大LV的过程与思考
今天在安装oracle 11 rac的时候,查看操作系统df -lh,发现/home目录竟然分了500多G,/根目录才有50G,当时我就爆了句粗口,这TM系统是怎么做的. Filesystem ...
- Bootstrap Fileupload 文件上传
1.在jsp中引入css与js文件, <link href="${ctx}/plugins/fileup/css/fileinput.css" media="all ...
- ios推送-B/S架构-socket
B/S架构项目,某一用户登录后执行了某些动作需要向在手机登录的对应的用户推送消息 通过socket实现 1.socket服务器:使用C#的window服务(该服务监听两个端口:比如平台8889,手机8 ...
- Java 集合类 TreeSet、TreeMap
TreeMap和TreeSet的异同: 相同点: TreeMap和TreeSet都是有序的集合,也就是说他们存储的值都是拍好序的. TreeMap和TreeSet都是非同步集合,因此他们不能在多线程之 ...
- 51. N-Queens
题目: The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two que ...
- 单词(bzoj 3172)
Description 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. Input 第一个一个整数N,表示有多少个单词,接下来N ...
- iOS - 使用自定义字体-苹方字体
苹方提供了六个字重,font-family 定义如下:苹方-简 常规体font-family: PingFangSC-Regular, sans-serif;苹方-简 极细体font-family: ...
- ActiveMQ开发与简介
1.概述与介绍 ActiveMQ是Apache出品,最流行的.功能强大的即时通讯和集成模式的开源服务器.ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMSProvider实现.提供 ...
- CountDownLatch
使用的实例: @Override public <V> V get(Future<V> future) { final CountDownLatch l = new Count ...
- BZOJ 1076 & 撞鸭递推
题意: 还是看原题题面好... 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随 机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决 ...