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

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. 请求与响应编码及jsp基本原理

    1.请求转发和请求包含 (1)请求转发: this.getServletContext().getRequestDispatcher("").forward(request,res ...

  2. Spring各个jar包的作用

    Spring AOP:Spring的面向切面编程,提供AOP(面向切面编程)的实现 Spring Aspects:Spring提供的对AspectJ框架的整合Spring Beans:Spring I ...

  3. 我的G++编译选项

    -Wall -Wextra -g3 -DLOCAL -Wshadow -Wpointer-arith -Wcast-qual -Waggregate-return -Winline -Wunreach ...

  4. GO系列教程

    1.介绍与安装 2.Hello World 3.变量 4. 类型 5.常量 6.函数(Function) 7.包 8.if-else 语句 9.循环 10.switch语句 11.数组和切片 12.可 ...

  5. day10 前向引用

    风湿理论,函数即变量.没定义没加载(开辟内存空间).都是没法用的 不定义调用必然出错 def foo(): print("from foo") bar () # 标红 foo() ...

  6. 自学Zabbix11.3 Zabbix SNMP 常用OID列表

    点击返回:自学Zabbix之路点击返回:自学Zabbix4.0之路点击返回:自学zabbix集锦 自学Zabbix11.3 Zabbix SNMP 常用OID列表 点击获取CISCO设备OID 系统参 ...

  7. Linux 系统缓存机制学习

    前言:本文为参考他人的文章,是一篇学习记录型博客.理解linux的系统缓存机制有助于理解elasticsearch实时更新的原理. 一.缓存机制 为了提高文件系统性能,内核利用一部分物理内存分配出缓冲 ...

  8. ubuntu 13.04 开发环境搭建

    install ubuntu1, mysql serversudo apt-get install mysql-server2, ssh sudo apt-get install openssh-se ...

  9. Windows 10 MBR转GPT

    Windows 10的创意者更新中,新增了mbr2gpt命令行工具,只需简单几步快速搞定分区表的转换 语法 MBR2GPT /validate|convert [/disk:] [/logs:] [/ ...

  10. Luogu 1351 NOIP 2014 联合权值(贪心,计数原理)

    Luogu 1351 NOIP 2014 联合权值(贪心,计数原理) Description 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi, ...