资源的申请,分配过程略过,从开始执行开始。

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的更多相关文章

  1. Hadoop MapReduce执行过程详解(带hadoop例子)

    https://my.oschina.net/itblog/blog/275294 摘要: 本文通过一个例子,详细介绍Hadoop 的 MapReduce过程. 分析MapReduce执行过程 Map ...

  2. Hadoop MapReduce执行过程实例分析

    1.MapReduce是如何执行任务的?2.Mapper任务是怎样的一个过程?3.Reduce是如何执行任务的?4.键值对是如何编号的?5.实例,如何计算没见最高气温? 分析MapReduce执行过程 ...

  3. hadoop -- mapreduce执行过程

    1.运行mapreduce程序  ---run2.本次运行将会生成呢个一个Job , 于是JobClient向JobTracker申请一个JobID 标识该Job.3.JobClient将Job需要的 ...

  4. Hadoop学习之Mapreduce执行过程详解

    一.MapReduce执行过程 MapReduce运行时,首先通过Map读取HDFS中的数据,然后经过拆分,将每个文件中的每行数据分拆成键值对,最后输出作为Reduce的输入,大体执行流程如下图所示: ...

  5. 分析MapReduce执行过程

    分析MapReduce执行过程 MapReduce运行的时候,会通过Mapper运行的任务读取HDFS中的数据文件,然后调用自己的方法,处理数据,最后输出. Reducer任务会接收Mapper任务输 ...

  6. 分析MapReduce执行过程+统计单词数例子

    MapReduce 运行的时候,会通过 Mapper 运行的任务读取 HDFS 中的数据文件,然后调用自己的方法,处理数据,最后输出.Reducer 任务会接收 Mapper 任务输出的数据,作为自己 ...

  7. MapReduce执行过程

    Mapper任务的执行过程: 第一阶段是把输入文件按照一定的标准分片(InputSplit),每个输入片的大小是固定的.默认情况下,输入片(InputSplit)的大小与数据块(Block)的大小是相 ...

  8. [转] hadoop MapReduce实例解析-非常不错,讲解清晰

    来源:http://blog.csdn.net/liuxiaochen123/article/details/8786715?utm_source=tuicool 2013-04-11 10:15 4 ...

  9. (转载)Hadoop map reduce 过程获取环境变量

    来源:http://www.linuxidc.com/Linux/2012-07/66337.htm   作者: lmc_wy Hadoop任务执行过程中,在每一个map节点或者reduce节点能获取 ...

随机推荐

  1. C#利用反射来判断对象是否包含某个属性的实现方法

    本文实例展示了C#利用反射来判断对象是否包含某个属性的实现方法,对于C#程序设计人员来说有一定的学习借鉴价值. 具体实现代码如下: /// <summary> /// 利用反射来判断对象是 ...

  2. 荣耀实锤Magic2或将助力AI,再次带动成长?

    临近年底,热闹了一年的手机圈纷纷偃旗息鼓,准备为明年3月的新品发力.然而今天(12月7日),恰逢节气大雪,@荣耀手机 在微博发布了一张预热海报,随后荣耀总裁赵明转发这条微博表示「关于技术,真的有很多话 ...

  3. 使用嵌入式jetty实现文件服务器

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  4. BZOJ4891 TJOI2017龙舟(Polllard-Rho)

    对给定模数分解质因数后约分即可.依然常数巨大过不了. #include<iostream> #include<cstdio> #include<cmath> #in ...

  5. HDU4287-STL模拟水题

    一场2012天津网络预选赛的题,签到题. 但是还是写了三四十分钟,C++和STL太不熟悉了,总是编译错误不知道怎么解决. 一开始用的Char [] 后来改成了string,STL和string搭配起来 ...

  6. POI获取单元格的宽和高

    获取单元格的宽,即获取所在列的宽.先获取单元格所在的sheet:cell.getSheet() sheet.getColumnWidth( cell.getColumnIndex() )  单位不是像 ...

  7. 自学Aruba5.1.1-基于时间的Role定义

    点击返回:自学Aruba之路 自学Aruba5.1.1-基于时间的Role定义 可以配置一条rule是基于时间来做限制 具体配置时间(Time ranges)步骤如下: 1 建立一个绝对时间范围,命令 ...

  8. 自学Zabbix2.3-服务器端server安装过程

    点击返回:自学Zabbix之路 ....

  9. 用DotNetOpenAuth实现基于OAuth 2.0的web api授权 (一)Getting Start

    1. 下载 源码下载 2. build solution,创建虚拟目录: 右健MyContatacts/MyPromo项目,选择Properties,点击左边的Web,点击 Create Virtua ...

  10. C# 哈希表&列队&栈

    哈希表://不规定类型,不规定长度,不规定键值 Hashtable ht = new Hashtable();  //定义 ht[1] = 1; ht['a'] = "abc"; ...