Hadoop–Task 相关
在MapReduce计算框架中,一个应用程序被划分为Map和Reduce两个计算阶段。他们分别由一个或多个Map Task 和Reduce Task组成。
- Map Task: 处理输入数据集合中的一片数据,并将产生的若干个数据片段写到本地磁盘。
- 按照用户提供的InputFormat将对应的InputSpilt解析成一系列的key/value, 并以此交给用户编写的map()函数处理。
- 按照指定的Partitioner对数据分片,以确定每个key/value将交给哪个Reducer Task处理。
- 将数据交给用户定义的Combiner进行以此本地规约(用户没有定义则直接跳过)
- 将处理结果保存到本地磁盘。
- Reduce Task: 从每个Map Task上远程拷贝相应的数据片段,经过分组聚集和规约后,将结果写到HDFS上作为最终结果。
- 通过HTTP请求从各个已经运行完成的Map Task上拷贝对应的数据分片。
- 待数据拷贝完成,以key为关键字对所有数据进行排序。通过排序,key相同的记录聚集在一起形成若干分组。
- 将每组数据交给用户编写的reduce()函数处理。
- 将结果直接写到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文件合并则使用了基于堆实现的优先队列。
快排
- 枢轴选择:使用序列的首尾和中间元素的中位数作为枢轴
- 子序列划分:两个索引i,j分别从左右两端扫描,i扫描到大于等于枢轴的等值,j扫描到小于等于枢轴的元素停止,然后交换两个元素。重复直到相遇
- 相同元素的优化: 每次划分子序列,将于枢轴相同的元素集中存放到中间位置,让它们不再参与后续的递归处理过程。即序列划分三部分:小于枢轴、等于枢轴、大于枢轴
- 减少递归次数:当子序列中元素数目小于13时,直接使用插入排序算法,不再递归。
优先队列
文件归并由类Merger完成。其采用多轮递归合并的方式。每轮选取最小的前io.sort.factor(默认是10,用户可配置)个文件进行合并。并将产生的文件重新加入带合并列表中。知道剩下的文件数目小于io.sort.factor个,此时,他会返回指向由这些文件组成的小顶堆的迭代器。
Reporter
Reporter用来完成Task周期性的向TaskTracker汇报最新进度和计数器值。TaskReporter类实现了Reporter接口,并以线程形式启动。其汇报的信息中包含两部分:
- 任务执行进度
- Map Task 而言: 使用已读取数据量占数据总量的比例作为任务当前进度值
- Reduce Task: 其可以分解为三个阶段: Shuffle、Sort、Reduce。每个阶段占任务总进度的1/3.考虑在Shuttle阶段,Reduce Task需要从M(M为Map Task数目)个Map Task上读取数据。因此,可被分解为M个阶段,每个阶段占Shuffle进度的1/M。
- 任务计数器值: 是由Hadoop提供的,用于实现跟踪任务运行进度的全局技术功能。任务计数器由两部分组成<name, value>.计数器以组为单位进行管理,一个计数器属于一个计数器组。Hadoop规定一个作业最多包含120个计数器(可通过参数mapreduce.job.counters.limit设定),50个计数器组。
Hadoop–Task 相关的更多相关文章
- Activity Intent Flags及Task相关属性
转自http://www.cnblogs.com/lwbqqyumidi/p/3775479.html 今天我们来讲一下Activity的task相关内容. 上次我们讲到Activity的四种启动模式 ...
- Hadoop及其相关组件简介
一.大数据介绍 1.大数据指的是所涉及的数据量规模巨大到无法通过人工,在合理时间内达到截取.管理.处理.并整理成为人类所能解读的形式的信息. 2.大数据,可帮助我们能察觉商业趋势.判断研究质量.避免疾 ...
- Android总结篇系列:Activity Intent Flags及Task相关属性
同上文一样,本文主要引用自网上现有博文,并加上一些自己的理解,在此感谢原作者. 原文地址: http://blog.csdn.net/liuhe688/article/details/6761337 ...
- 基础总结篇之三:Activity的task相关
http://blog.csdn.net/liuhe688/article/details/6761337 古人學問無遺力,少壯工夫老始成.紙上得來終覺淺,絕知此事要躬行.南宋.陸遊<冬夜讀書示 ...
- Activity的task相关 详解
task是一个具有栈结构的容器,可以放置多个Activity实例.启动一个应用,系统就会为之创建一个task,来放置根Activity:默认情况下,一个Activity启动另一个Activity时,两 ...
- Android Task 相关
在日常开发过程中,只要涉及到activity,那么对task相关的东西总会或多或少的接触到,不过对task相关的一些配置的作用一直理解的还不是很透彻,官方文档在细节上说的也不够清楚,要透彻理解还是得自 ...
- hadoop以及相关组件介绍以及个人理解
前言 本人是由java后端转型大数据方向,目前也有近一年半时间了,不过我平时的开发平台是阿里云的Maxcompute,通过这么长时间的开发,对数据仓库也有了一定的理解,ETL这些经验还算比较丰富.但是 ...
- 【转】Android总结篇系列:Activity Intent Flags及Task相关属性
[转]Android总结篇系列:Activity Intent Flags及Task相关属性 同上文一样,本文主要引用自网上现有博文,并加上一些自己的理解,在此感谢原作者. 原文地址: http:// ...
- Hadoop开发相关问题
总结自己在Hadoop开发中遇到的问题,主要在mapreduce代码执行方面.大部分来自日常代码执行错误的解决方法,还有一些是对Java.Hadoop剖析.对于问题,通过查询stackoverflow ...
随机推荐
- ionic node-sass安装或编译失败:MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”
错误原因:缺少windows构建插件 解决方法:npm install --global --production windows-build-tools (如果目录在C盘下,需要管理员权限运行,全 ...
- nginx信号及平滑升级
1.nginx信号 nginx进程处理命令: kill -signals PID PID即nginx进程ID signals的参数解释如下所示: TERM,INT快速关闭进程 QUIT优雅的关闭,如果 ...
- ethtool---查看网卡
ethtool 命令详解 命令描述: ethtool 是用于查询及设置网卡参数的命令. 使用概要:ethtool ethx //查询ethx网口基本设置,其中 x 是对应网卡的编号,如et ...
- vue组件参数校验与非props特性
组件参数校验 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...
- Java 基础 - 如何理解String不可变
ref: https://www.zhihu.com/question/20618891 第一个答案. 扩展“ Java 基础 - System.arraycopy() 浅拷贝 深拷贝
- sql 条件查询
使用SELECT * FROM <表名>可以查询到一张表的所有记录.但是,很多时候,我们并不希望获得所有记录,而是根据条件选择性地获取指定条件的记录,例如,查询分数在80分以上的学生记录. ...
- PC 端响应式布局
前言:PC端 电脑显示器的尺寸种类还是很多的,台式电脑和笔记本电脑尺寸相差就更明显,所以响应式布局还是很重要的,甚至是必须要考虑的. 响应式的页面好不好,在后管平台上很明显.因为后管平台,一般是全屏显 ...
- [经典]Python 一篇学会多线程
对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂.所以,这里力图用简单的例子,让你对多线程有个初步的认识. 单线程 在好些年前的MS-DOS时代,操作系统处理问题都是单任 ...
- SPSS聚类分析:K均值聚类分析
SPSS聚类分析:K均值聚类分析 一.概念:(分析-分类-K均值聚类) 1.此过程使用可以处理大量个案的算法,根据选定的特征尝试对相对均一的个案组进行标识.不过,该算法要求您指定聚类的个数.如果知道, ...
- AI应用在金融领域,如何能够在商业上有所突破
AI应用在金融领域,如何能够在商业上有所突破 如今,随着社会不断发展,技术不断进步,国内外各大金融机构已经在大数据.人工智能.区块链等新技术上有很多尝试,智能客服.智能投顾等新金融形式也早已不新鲜.那 ...