MapReduce运行全流程
来源:互联网 发布:小米4c可以4g网络吗 编辑:程序博客网 时间:2024/05/17 09:16
MapReduce运行全流程:
Nodemanager从Resourcemanager那里拿到Task之后,就启动一个规定cpu、内存的container用来运行MapTask。
那么MapTask就开始工作了,MapTask通过Inputformat组件,从任务所指定路径(如:HDFS)上开始读取数据。需注意的是,他一次只读一行,读完一行调一次用户写的Map方法,数据格式为<K,V>,其中K为起始偏移量(按字节来算),V为那一行的内容。<K,V>经过用户的Map逻辑处理后,通过上下文context.write()将处理后得到的<K,V>写出去。
此时有一个组件OutPutCollector将写出的数据,写到一个环形缓冲区中,这个环形缓冲区可以实现异步工作,提高了程序的工作效率。
这个环形缓冲区,默认当数据占到80%的时候,就发生split溢出,溢出的时候通过HashPartitioner和Key.CompareTo进行分区、排序。于此同时,程序继续往剩下的20%写<K,V>。如下图:
溢出到文件的时候,会调用用户定义的combiner组件,对相同K的V进行combiner,然后再写到文件中去。这里会源源不断的溢出文件,从上一个溢出位置开始,每满80%就开始溢出。那么就会有很多文件,此时就会调用归并排序,将他们归并起来形成一个大文件。如果此时发现用户定义了combiner,就会调用combiner形成最终的结果文件。如下图:
与此同时,还有很多MapTask在运行,他们都运行完了后。AppMaster会知道,因为AppMaster时刻都在监控着这些MapTask,他们一完成AppMaster马上向resourcemanager申请新的container来运行reduce的任务。
Nodemanager领取到任务后,首先从多个MapTask上下载自己分区的结果文件到reduceTask本地磁盘的工作目录。然后进行归并排序。然后通过GroupingComparaor(k,nextk)组件,判断哪些数据为一组<k1,v1> <k1,v2> <k1,v3>。
最后将数据传给reduce逻辑处理,数据的格式为<K,Values>,其中K为一组<k1,v1> <k1,v2> <k1,v3>中的第一个K。逻辑处理后,context.write()写出去,最后通过OutPutFormat写到HDFS上。
- MapReduce运行全流程
- MapReduce作业运行流程
- MapReduce 运行流程概要
- MapReduce程序运行流程
- MapReduce作业运行流程
- MapReduce的运行流程
- MapReduce的运行流程
- MapReduce之全流程讲解
- Hadoop--MapReduce运行处理流程
- MapReduce框架结构与运行流程
- Hadoop 之MapReduce 运行原理全解析
- Hadoop-MapReduce Job本地运行流程
- MapReduce原理及运行流程回顾
- MapReduce作业运行流程整体分析
- MapReduce的运行流程和容错机制
- MapReduce的原理和运行流程
- MapReduce在YARN上的运行流程
- Hadoop学习之MapReduce运行流程
- vue+cropperjs实现图片剪裁,上传七牛云
- OSPF邻接建立状态--Smallbaal的博客
- 安装percona 5.7
- 史上最强Java学习路线(详解)
- opc-ua技术资料网站汇总
- MapReduce运行全流程
- 投区块链?听听当下硅谷最火的四条投资军规
- go语言-defer关键字
- 微信页面禁止长按复制(input输入框可正常输入)
- caffe入门学习(5):绘制网络结构图
- Python之路【第十七篇】:Django【进阶篇 】
- 在腾讯云上部署项目
- Tomcat项目运行时加载web项目的顺序
- 写接口时,对数据进行验证