在MapReduce计算框架中,一个应用程序被划分为Map和Reduce两个计算阶段。他们分别由一个或多个Map Task 和Reduce Task组成。

  1. Map Task: 处理输入数据集合中的一片数据,并将产生的若干个数据片段写到本地磁盘。
    1. 按照用户提供的InputFormat将对应的InputSpilt解析成一系列的key/value, 并以此交给用户编写的map()函数处理。
    2. 按照指定的Partitioner对数据分片,以确定每个key/value将交给哪个Reducer Task处理。
    3. 将数据交给用户定义的Combiner进行以此本地规约(用户没有定义则直接跳过)
    4. 将处理结果保存到本地磁盘。
  2. Reduce Task: 从每个Map Task上远程拷贝相应的数据片段,经过分组聚集和规约后,将结果写到HDFS上作为最终结果。
    1. 通过HTTP请求从各个已经运行完成的Map Task上拷贝对应的数据分片。
    2. 待数据拷贝完成,以key为关键字对所有数据进行排序。通过排序,key相同的记录聚集在一起形成若干分组。
    3. 将每组数据交给用户编写的reduce()函数处理。
    4. 将结果直接写到HSFS上面作为最终输出结果。

 

IFile

    IFile是一种支持行压缩的存储格式。为了减少MapTask写入磁盘的数据量和跨网络传输的数据量,IFile支持按行压缩数据记录。当前Hadoop提供了ZLib(默认压缩方式)、BZip2等压缩算法。

    IFile文件格式:<key-len, value-len, key, value>

排序

     排序是MapReduce框架中最重要的从a组之一。Map Task和Reduce Task均会对数据(按照key)进行排序。该操作属于Hadoop的默认行为。任何应用程序均会被排序,而不管逻辑上是否需要。

     对于Map Task,它会将处理的结果暂时存放到一个缓冲区,当缓冲区使用率达到一定阈值后,在对缓冲区中的数据进行以此排序。并将这些有序集合以IFile文件的形式写到磁盘上。而当数据处理完毕后,它会对磁盘上所有文件进行一次合并。已将这些文件形成一个大的有序文件。

     对于Reduce Task,它从每个Map Task上面远程拷贝相应的数据文件,如果文件大小超过一定阈值,则放到磁盘,否则放到内存。如果磁盘上文件数目达到一定阈值,则进行一次合并以生成一个更大文件;如果内存中文件大小或者数目超过一定阈值,则进行一次合并后写到磁盘上。当所有数据拷贝完毕后,Reduce Task统一对内存和磁盘上的所有数据进行一次合并。

     Map Task和Reduce Task的缓冲区数据合并使用Hadoop自己实现的快排算法,而IFile文件合并则使用了基于堆实现的优先队列。

快排

  1. 枢轴选择:使用序列的首尾和中间元素的中位数作为枢轴
  2. 子序列划分:两个索引i,j分别从左右两端扫描,i扫描到大于等于枢轴的等值,j扫描到小于等于枢轴的元素停止,然后交换两个元素。重复直到相遇
  3. 相同元素的优化: 每次划分子序列,将于枢轴相同的元素集中存放到中间位置,让它们不再参与后续的递归处理过程。即序列划分三部分:小于枢轴、等于枢轴、大于枢轴
  4. 减少递归次数:当子序列中元素数目小于13时,直接使用插入排序算法,不再递归。

优先队列

  文件归并由类Merger完成。其采用多轮递归合并的方式。每轮选取最小的前io.sort.factor(默认是10,用户可配置)个文件进行合并。并将产生的文件重新加入带合并列表中。知道剩下的文件数目小于io.sort.factor个,此时,他会返回指向由这些文件组成的小顶堆的迭代器。

Reporter

   Reporter用来完成Task周期性的向TaskTracker汇报最新进度和计数器值。TaskReporter类实现了Reporter接口,并以线程形式启动。其汇报的信息中包含两部分:

  1. 任务执行进度
    1. Map Task 而言: 使用已读取数据量占数据总量的比例作为任务当前进度值
    2. Reduce Task: 其可以分解为三个阶段: Shuffle、Sort、Reduce。每个阶段占任务总进度的1/3.考虑在Shuttle阶段,Reduce Task需要从M(M为Map Task数目)个Map Task上读取数据。因此,可被分解为M个阶段,每个阶段占Shuffle进度的1/M。
  2. 任务计数器值: 是由Hadoop提供的,用于实现跟踪任务运行进度的全局技术功能。任务计数器由两部分组成<name, value>.计数器以组为单位进行管理,一个计数器属于一个计数器组。Hadoop规定一个作业最多包含120个计数器(可通过参数mapreduce.job.counters.limit设定),50个计数器组。

Hadoop–Task 相关的更多相关文章

  1. Activity Intent Flags及Task相关属性

    转自http://www.cnblogs.com/lwbqqyumidi/p/3775479.html 今天我们来讲一下Activity的task相关内容. 上次我们讲到Activity的四种启动模式 ...

  2. Hadoop及其相关组件简介

    一.大数据介绍 1.大数据指的是所涉及的数据量规模巨大到无法通过人工,在合理时间内达到截取.管理.处理.并整理成为人类所能解读的形式的信息. 2.大数据,可帮助我们能察觉商业趋势.判断研究质量.避免疾 ...

  3. Android总结篇系列:Activity Intent Flags及Task相关属性

    同上文一样,本文主要引用自网上现有博文,并加上一些自己的理解,在此感谢原作者. 原文地址: http://blog.csdn.net/liuhe688/article/details/6761337 ...

  4. 基础总结篇之三:Activity的task相关

    http://blog.csdn.net/liuhe688/article/details/6761337 古人學問無遺力,少壯工夫老始成.紙上得來終覺淺,絕知此事要躬行.南宋.陸遊<冬夜讀書示 ...

  5. Activity的task相关 详解

    task是一个具有栈结构的容器,可以放置多个Activity实例.启动一个应用,系统就会为之创建一个task,来放置根Activity:默认情况下,一个Activity启动另一个Activity时,两 ...

  6. Android Task 相关

    在日常开发过程中,只要涉及到activity,那么对task相关的东西总会或多或少的接触到,不过对task相关的一些配置的作用一直理解的还不是很透彻,官方文档在细节上说的也不够清楚,要透彻理解还是得自 ...

  7. hadoop以及相关组件介绍以及个人理解

    前言 本人是由java后端转型大数据方向,目前也有近一年半时间了,不过我平时的开发平台是阿里云的Maxcompute,通过这么长时间的开发,对数据仓库也有了一定的理解,ETL这些经验还算比较丰富.但是 ...

  8. 【转】Android总结篇系列:Activity Intent Flags及Task相关属性

    [转]Android总结篇系列:Activity Intent Flags及Task相关属性 同上文一样,本文主要引用自网上现有博文,并加上一些自己的理解,在此感谢原作者. 原文地址: http:// ...

  9. Hadoop开发相关问题

    总结自己在Hadoop开发中遇到的问题,主要在mapreduce代码执行方面.大部分来自日常代码执行错误的解决方法,还有一些是对Java.Hadoop剖析.对于问题,通过查询stackoverflow ...

随机推荐

  1. JS数组中Array.of()方法的使用

    Array.of()方法的使用: Array.of()方法用于将一组数值转换为数组,举例: const a = Array.of(2,4,6,8); console.log(a); // [2,4,6 ...

  2. Linux——用户及文件权限管理

    2019-07-31 用户管理 查看用户 who am i:打开当前伪终端的用户的用户名 pts/0 后面那个数字就表示打开的伪终端序号,你可以尝试再打开一个终端,然后在里面输入 who am i , ...

  3. Oracle 一个表的数据update到另一个表

    A表数据 B表数据         现在要把B表 B_COSTS 的值update到A表 A_COSTS 字段 SQL语法: update a set (a.a_costs) = (select b. ...

  4. 2018焦作网络赛-E- Jiu Yuan Wants to Eat

    题目描述 You ye Jiu yuan is the daughter of the Great GOD Emancipator.  And when she becomes an adult, s ...

  5. C#开发activex

    https://www.cnblogs.com/bobshieh/p/5746844.html

  6. 笔记68 Redis数据库

    一.Redis简介 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统.Redis是一个开源的使用ANSI ...

  7. iftop简单使用

    在linux下想查看当前与主机通信的IP有哪些?流量多少?怎么办?使用iftop吧,小巧实用的小工具.在排查问题的时候能起到大作用. centos安装 yum install iftop 界面如下: ...

  8. CleanMyMac x如何关闭自动更新,CleanMyMac关闭自动更新的方法

    在众多Mac清理软件中,CleanMyMac x应该是大多数Mac用户的选择,因为它不仅可以帮助我们清理系统垃圾,还可以帮助我们彻底卸载Mac上不需要的应用程序.今天要给大家介绍的是CleanMyMa ...

  9. Java中的Set集合以及HashSet

    Set集合: Set继承自Collection,所以没有什么特别的方法. 需要注意的是,Set集合不包含重复元素,我们重点了解Set集合如何保证不包含多余元素. HashSet: HashSet如何保 ...

  10. read more阅读更多,文字超过三行字符后面添加省略号

    var text;$('.blog-item').each(function (i) {text = $(this).find('.blog-excerpt').html();if (text.len ...