Hadoop mapreduce执行过程涉及api
资源的申请,分配过程略过,从开始执行开始。
mapper阶段: 首先调用默认的PathFilter进行文件过滤,确定哪些输入文件是需要的哪些是不需要的,然后调用inputFormat的getSplits方法进行文件的分割,返回inputSplit列表,每个inputSplit会分到对应的mapper执行。之后调用默认的createRecordReader()方法,确定传给map函数处理的key和value。map函数执行的结果先存到缓存中,默认大小是100M,当达到阀值0.8也就是80M时会写入磁盘文件,写入磁盘之前会进行分区,不同区的数据会给不用的reduce处理。调用默认Partitioner的getPartition()方法进行分区,分区之后进行key默认的排序,也可以让自定义的key实现WriteableComparable接口进行自定义排序规则。排序后进行分组,分组的目的时key值相同的,value会放到一个集合中,可以让key值继承RowComparator实现自定义分组。分组后看用户是否自定义了Combine(可以说是本地reduce程序),如果定义了则执行Combine函数进行合并数据,合并后写入本地磁盘。当map任务结束之前会进行一次全部文件的合并,因为在map的执行过程达到80M会进行写一次文件,可能存在多个文件,所以需要进行一次合并。过程是一样的,会进行分区,排序,分组,如果有Combine则进行Combine,不同分区的结果存放在一个文件中,通过索引进行区分不同的分区。当然对于map的结果可以进行可选性压缩,需要进行手动的设置。
reduce阶段: 从各个map节点获取自己对应的分区,map的完成时间时不同的,reduce会周期性的询问是否有完成的map需要copy,reduce存在5个copy线程(可以通过mapreduce.reduce.shuffle.parallelcopies配置),一旦有属于自己的那部分分区的map执行完,就会将其copy过来。map端不会立即删除数据,因为可能出现reduce失败重做。
如果map输出的数据足够小,则会被拷贝到reduce任务的JVM内存中(可以通过mapreduce.reduce.shuffle.input.buffer.percent配置JVM堆内存的多少比例可以用于存放map任务的输出结果)。如果数据太大容不下,则被拷贝到reduce的机器磁盘上。当达到缓冲区的阀值时,会写入磁盘,后台的一个线程会对写入磁盘的文件进行合并和排序,如果有Combine同时也进行Combine较少占用存储大小。最后会形成一个排序后的文件,作为reduce的输入。执行结果保存到hdfs。
Hadoop mapreduce执行过程涉及api的更多相关文章
- Hadoop MapReduce执行过程详解(带hadoop例子)
https://my.oschina.net/itblog/blog/275294 摘要: 本文通过一个例子,详细介绍Hadoop 的 MapReduce过程. 分析MapReduce执行过程 Map ...
- Hadoop MapReduce执行过程实例分析
1.MapReduce是如何执行任务的?2.Mapper任务是怎样的一个过程?3.Reduce是如何执行任务的?4.键值对是如何编号的?5.实例,如何计算没见最高气温? 分析MapReduce执行过程 ...
- hadoop -- mapreduce执行过程
1.运行mapreduce程序 ---run2.本次运行将会生成呢个一个Job , 于是JobClient向JobTracker申请一个JobID 标识该Job.3.JobClient将Job需要的 ...
- Hadoop学习之Mapreduce执行过程详解
一.MapReduce执行过程 MapReduce运行时,首先通过Map读取HDFS中的数据,然后经过拆分,将每个文件中的每行数据分拆成键值对,最后输出作为Reduce的输入,大体执行流程如下图所示: ...
- 分析MapReduce执行过程
分析MapReduce执行过程 MapReduce运行的时候,会通过Mapper运行的任务读取HDFS中的数据文件,然后调用自己的方法,处理数据,最后输出. Reducer任务会接收Mapper任务输 ...
- 分析MapReduce执行过程+统计单词数例子
MapReduce 运行的时候,会通过 Mapper 运行的任务读取 HDFS 中的数据文件,然后调用自己的方法,处理数据,最后输出.Reducer 任务会接收 Mapper 任务输出的数据,作为自己 ...
- MapReduce执行过程
Mapper任务的执行过程: 第一阶段是把输入文件按照一定的标准分片(InputSplit),每个输入片的大小是固定的.默认情况下,输入片(InputSplit)的大小与数据块(Block)的大小是相 ...
- [转] hadoop MapReduce实例解析-非常不错,讲解清晰
来源:http://blog.csdn.net/liuxiaochen123/article/details/8786715?utm_source=tuicool 2013-04-11 10:15 4 ...
- (转载)Hadoop map reduce 过程获取环境变量
来源:http://www.linuxidc.com/Linux/2012-07/66337.htm 作者: lmc_wy Hadoop任务执行过程中,在每一个map节点或者reduce节点能获取 ...
随机推荐
- elk安装最佳实践
一.添加清华源 .x.repo<<EOF [elasticsearch-.x] name=Elasticsearch repository .x packages baseurl=http ...
- ava 8中的新功能特性
正如我之前所写的,Java 8中的新功能特性改变了游戏规则.对Java开发者来说这是一个全新的世界,并且是时候去适应它了. 在这篇文章里,我们将会去了解传统循环的一些替代方案.在Java 8的新功能特 ...
- jquery遍歷
遍歷是什麼? jquery的遍歷指的是移動,就是從選中的元素根據元素之間的關係移動,直到找到目標元素.從DOM樹中,可以進行向上移動(祖先),向下移動(子孫)和水平移動(同胞). 祖先就是父,祖父,曾 ...
- day6 字符串
重复输出字符串 # * 重复输出字符串 print("hello"*2) 字符串切片 # 字符串也拥有索引,和列表切片操作类似 print("helloworld&quo ...
- 自学Linux Shell14.2-在脚本中使用其他文件描述符
点击返回 自学Linux命令行与Shell脚本之路 14.2-在脚本中使用其他文件描述符 在脚本中重定向输入和输出,并布局限于以上讲的3个默认的文件描述符,shell最多可以有9个打开的文件描述符.这 ...
- Java 关键字final的一小结
* final类不能被继承,没有子类,final类中的方法默认是final的. * final方法不能被子类的方法覆盖,但可以别继承 (方法) * final 成员变量 表示常量,只能被赋值一 ...
- 【转】IAR for STM8介绍、下载、安装与注册
Ⅰ.写在前面 本文讲述的内容是IAR for STM8(EWSTM8)的介绍.下载.安装与注册,其安装.注册过程和IAR for ARM类似,如果需要了解IAR for ARM相关的文章,可以到我博客 ...
- 软Raid50制作
=====创建Raid50的步骤====== 1.创建分区[root@localhost ~]# fdisk /dev/sdb[root@localhost ~]# fdisk /dev/sdc[ro ...
- SQL Server 增、删、改、小部分查
--现有三个表Student.Score.Course.Teacher create table Student ( Sno ) not null,--学号 Sname ) not null,--姓名 ...
- LOJ#2320 生成树计数
解:讲一个别的题解里我比较难以理解的地方,就是为什么可以把这两个东西合起来看成某一个连通块指数是2m而别的指数都是m. 其实很好理解,但是别人都略过了......把后面的∑提到∏的前面,然后展开,也可 ...