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

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. c3算法详解

    c3 算法求某一类在多继承中的继承顺序:类的mro == [类] + [父类的继承顺序] + [父类2的继承顺序]如果从左到右的第一个类在后面的顺序中出现,那么就提取出来到mro顺序中[ABCD] + ...

  2. nginx的安装应用

    Nginx的安装 # yum install gcc pcre-devel zlib-devel –y #./configure –prefix=/usr/local/nginx #make & ...

  3. sql优化问题笔记(mysql)

    相信大家平时面试都会遇到这个问题:平时你都是怎么对sql进行调优的? 此篇文章相当于一个随便笔记,根据朋友们的聊天记录整理而成,如有不对,请指正! 注意:这篇是以mysql整理的 查看sql计划分析 ...

  4. python----面对对象三大特征2

    多态 什么是多态?多态指的是一类事物有多种形态,例如一个动物类,狗和猫都通过继承动物类来得来,这样我们可以将狗.猫称作动物类的另一种形态. 在java中也存在多态,java中的多态是用来解决在一个函数 ...

  5. C# 文件比较差异

    参考:https://www.cnblogs.com/vaevvaev/p/7115721.html 这里我就比较2个文件 使用了fc命令. 2个文件路径如下  path1,path2 static ...

  6. Linux 系统免密码登陆远程服务器

    在当前Linux生成公钥私钥ssh-keygen公钥私钥存放路径为:~/root/.ssh/id_rsa id_rsa.pub 登陆被远程主机,进入目录~/root/.ssh/是否存在authoriz ...

  7. Twitter数据挖掘:如何使用Python分析大数据

    我们可以创建变量来存放待拉取的微博数量(即count),以及待拉取的用户(即name).然后用这两个参数调用user_timeline()函数.下面是更新后的代码(注意,在代码的顶部应该保持认证和AP ...

  8. 【Luogu4512】多项式除法(FFT)

    题面 洛谷 题解 模板题... 我直接蒯我写的东西... 这个除法是带余除法,所以并不能直接求逆解决. 要求的就是给定两个多项式\(A(x),B(x)\),其项数为\(n,m\) 求解一个\(n-m\ ...

  9. 【BZOJ2285】[SDOI2011]保密(分数规划,网络流)

    [BZOJ2285][SDOI2011]保密(分数规划,网络流) 题面 BZOJ 洛谷 题解 首先先读懂题目到底在干什么. 发现要求的是一个比值的最小值,二分这个最小值\(k\),把边权转换成\(t- ...

  10. Centos6.5使用yum安装mysql

    0. 说明 先要查看yum源是否有你想要的mysql版本 yum list | grep mysql 如果没有则先要更新yum源 yum -y update 更新后即可进行下一步操作. 1. yum安 ...