【转】MapReduce:默认Counter的含义
MapReduce Counter为提供我们一个窗口:观察MapReduce job运行期的各种细节数据。今年三月份期间,我曾经专注于MapReduce性能调优工作,是否优化的绝大多评估都是基于这些Counter的数值表现。MapReduce自带了许多默认Counter,可能有些朋友对它们有些疑问,现在我分析下这些默认Counter的含义,方便大家观察job结果。
我的分析是基于Hadoop0.21,我也看过Hadoop其它版本的Counter展现,细节大同小异,如果有差异的地方,以事实版本为主。
Counter有"组group"的概念,用于表示逻辑上相同范围的所有数值。MapReduce job提供的默认Counter分为五个组,下面逐一介绍。这里也拿我的一份测试数据来做详细比对,它们会以表格的形式出现在各组描述中。
FileInputFormatCounters
这个group表示map task读取文件内容(总输入数据)的统计
| Counter | Map | Reduce | Total | |
| FileInputFormatCounters | BYTES_READ | 1,109,990,596 | 0 | 1,109,990,596 |
BYTES_READ
Map task的所有输入数据(字节),等于各个map task的map方法传入的所有value值字节之和。
FileSystemCounters
MapReduce job执行所依赖的数据来自于不同的文件系统,这个group表示job与文件系统交互的读写统计
| Counter | Map | Reduce | Total | |
| FileSystemCounters | FILE_BYTES_READ | 0 | 1,544,520,838 | 1,544,520,838 |
| FILE_BYTES_WRITTEN | 1,544,537,310 | 1,544,520,838 | 3,089,058,148 | |
| HDFS_BYTES_READ | 1,110,269,508 | 0 | 1,110,269,508 | |
| HDFS_BYTES_WRITTEN | 0 | 827,982,518 | 827,982,518 |
FILE_BYTES_READ
job读取本地文件系统的文件字节数。假定我们当前map的输入数据都来自于HDFS,那么在map阶段,这个数据应该是0。但reduce在执行前,它的输入数据是经过shuffle的merge后存储在reduce端本地磁盘中,所以这个数据就是所有reduce的总输入字节数。
FILE_BYTES_WRITTEN
map的中间结果都会spill到本地磁盘中,在map执行完后,形成最终的spill文件。所以map端这里的数据就表示map task往本地磁盘中总共写了多少字节。与map端相对应的是,reduce端在shuffle时,会不断地拉取map端的中间结果,然后做merge并不断spill到自己的本地磁盘中。最终形成一个单独文件,这个文件就是reduce的输入文件。
HDFS_BYTES_READ
整个job执行过程中,只有map端运行时,才从HDFS读取数据,这些数据不限于源文件内容,还包括所有map的split元数据。所以这个值应该比FileInputFormatCounters.BYTES_READ 要略大些。
HDFS_BYTES_WRITTEN
Reduce的最终结果都会写入HDFS,就是一个job执行结果的总量。
Shuffle Errors
这组内描述Shuffle过程中的各种错误情况发生次数,基本定位于Shuffle阶段copy线程抓取map端中间数据时的各种错误。
| Counter | Map | Reduce | Total | |
| Shuffle Errors | BAD_ID | 0 | 0 | 0 |
| CONNECTION | 0 | 0 | 0 | |
| IO_ERROR | 0 | 0 | 0 | |
| WRONG_LENGTH | 0 | 0 | 0 | |
| WRONG_MAP | 0 | 0 | 0 | |
| WRONG_REDUCE | 0 | 0 | 0 |
BAD_ID
每个map都有一个ID,如attempt_201109020150_0254_m_000000_0,如果reduce的copy线程抓取过来的元数据中这个ID不是标准格式,那么此Counter增加
CONNECTION
表示copy线程建立到map端的连接有误
IO_ERROR
Reduce的copy线程如果在抓取map端数据时出现IOException,那么这个值相应增加
WRONG_LENGTH
map端的那个中间结果是有压缩好的有格式数据,所有它有两个length信息:源数据大小与压缩后数据大小。如果这两个length信息传输的有误(负值),那么此Counter增加
WRONG_MAP
每个copy线程当然是有目的:为某个reduce抓取某些map的中间结果,如果当前抓取的map数据不是copy线程之前定义好的map,那么就表示把数据拉错了
WRONG_REDUCE
与上面描述一致,如果抓取的数据表示它不是为此reduce而准备的,那还是拉错数据了。
Job Counters
这个group描述与job调度相关的统计
| Counter | Map | Reduce | Total | |
| Job Counters | Data-local map tasks | 0 | 0 | 67 |
| FALLOW_SLOTS_MILLIS_MAPS | 0 | 0 | 0 | |
| FALLOW_SLOTS_MILLIS_REDUCES | 0 | 0 | 0 | |
| SLOTS_MILLIS_MAPS | 0 | 0 | 1,210,936 | |
| SLOTS_MILLIS_REDUCES | 0 | 0 | 1,628,224 | |
| Launched map tasks | 0 | 0 | 67 | |
| Launched reduce tasks | 0 | 0 | 8 |
Data-local map tasks
Job在被调度时,如果启动了一个data-local(源文件的幅本在执行map task的taskTracker本地)
FALLOW_SLOTS_MILLIS_MAPS
当前job为某些map task的执行保留了slot,总共保留的时间是多少
FALLOW_SLOTS_MILLIS_REDUCES
与上面类似
SLOTS_MILLIS_MAPS
所有map task占用slot的总时间,包含执行时间和创建/销毁子JVM的时间
SLOTS_MILLIS_REDUCES
与上面类似
Launched map tasks
此job启动了多少个map task
Launched reduce tasks
此job启动了多少个reduce task
Map-Reduce Framework
这个Counter group包含了相当多地job执行细节数据。这里需要有个概念认识是:一般情况下,record就表示一行数据,而相对地byte表示这行数据的大小是多少,这里的group表示经过reduce merge后像这样的输入形式{“aaa”, [5, 8, 2, …]}。
| Counter | Map | Reduce | Total | |
| Map-Reduce Framework | Combine input records | 200,000,000 | 0 | 200,000,000 |
| Combine output records | 117,838,546 | 0 | 117,838,546 | |
| Failed Shuffles | 0 | 0 | 0 | |
| GC time elapsed (ms) | 23,472 | 46,588 | 70,060 | |
| Map input records | 10,000,000 | 0 | 10,000,000 | |
| Map output bytes | 1,899,990,596 | 0 | 1,899,990,596 | |
| Map output records | 200,000,000 | 0 | 200,000,000 | |
| Merged Map outputs | 0 | 536 | 536 | |
| Reduce input groups | 0 | 84,879,137 | 84,879,137 | |
| Reduce input records | 0 | 117,838,546 | 117,838,546 | |
| Reduce output records | 0 | 84,879,137 | 84,879,137 | |
| Reduce shuffle bytes | 0 | 1,544,523,910 | 1,544,523,910 | |
| Shuffled Maps | 0 | 536 | 536 | |
| Spilled Records | 117,838,546 | 117,838,546 | 235,677,092 | |
| SPLIT_RAW_BYTES | 8,576 | 0 | 8,576 |
Combine input records
Combiner是为了减少尽量减少需要拉取和移动的数据,所以combine输入条数与map的输出条数是一致的。
Combine output records
经过Combiner后,相同key的数据经过压缩,在map端自己解决了很多重复数据,表示最终在map端中间文件中的所有条目数
Failed Shuffles
copy线程在抓取map端中间数据时,如果因为网络连接异常或是IO异常,所引起的shuffle错误次数
GC time elapsed(ms)
通过JMX获取到执行map与reduce的子JVM总共的GC时间消耗
Map input records
所有map task从HDFS读取的文件总行数
Map output records
map task的直接输出record是多少,就是在map方法中调用context.write的次数,也就是未经过Combine时的原生输出条数
Map output bytes
Map的输出结果key/value都会被序列化到内存缓冲区中,所以这里的bytes指序列化后的最终字节之和
Merged Map outputs
记录着shuffle过程中总共经历了多少次merge动作
Reduce input groups
Reduce总共读取了多少个这样的groups
Reduce input records
如果有Combiner的话,那么这里的数值就等于map端Combiner运算后的最后条数,如果没有,那么就应该等于map的输出条数
Reduce output records
所有reduce执行后输出的总条目数
Reduce shuffle bytes
Reduce端的copy线程总共从map端抓取了多少的中间数据,表示各个map task最终的中间文件总和
Shuffled Maps
每个reduce几乎都得从所有map端拉取数据,每个copy线程拉取成功一个map的数据,那么增1,所以它的总数基本等于 reduce number * map number
Spilled Records
spill过程在map和reduce端都会发生,这里统计在总共从内存往磁盘中spill了多少条数据
SPLIT_RAW_BYTES
与map task 的split相关的数据都会保存于HDFS中,而在保存时元数据也相应地存储着数据是以怎样的压缩方式放入的,它的具体类型是什么,这些额外的数据是MapReduce框架加入的,与job无关,这里记录的大小就是表示额外信息的字节大小
转自:http://langyu.iteye.com/blog/1171091
【转】MapReduce:默认Counter的含义的更多相关文章
- Yarn&Mapreduce参数的具体含义和配置参考
Yarn & Mapreduce 参数的具体含义和配置 http://zh.hortonworks.com/blog/how-to-plan-and-configure-yarn-in-hdp ...
- 关于MapReduce默认分区策略
MapReduce默认分区策略 mapreduce 默认的分区方式是hashPartition,在这种分区方式下,KV对根据key的hashcode值与reduceTask个数进行取模,决定该键值对该 ...
- [Hadoop] - Mapreduce自定义Counter
在Hadoop的MR程序开发中,经常需要统计一些map/reduce的运行状态信息,这个时候我们可以通过自定义Counter来实现,这个实现的方式是不是通过配置信息完成的,而是通过代码运行时检查完成的 ...
- MapReduce计数器
1.MapReduce计数器是什么? 计数器是用来记录job的执行进度和状态的.它的作用可以理解为日志.我们可以在程序的某个位置插入计数器,记录数据或者进度的变化情况. 2.MapReduce计数器能 ...
- MapReduce 计数器简介
转自:http://my.oschina.net/leejun2005/blog/276891?utm_source=tuicool&utm_medium=referral 1.计数器 简介 ...
- 大数据【四】MapReduce(单词计数;二次排序;计数器;join;分布式缓存)
前言: 根据前面的几篇博客学习,现在可以进行MapReduce学习了.本篇博客首先阐述了MapReduce的概念及使用原理,其次直接从五个实验中实践学习(单词计数,二次排序,计数器,join,分 ...
- Hadoop学习之路(十五)MapReduce的多Job串联和全局计数器
MapReduce 多 Job 串联 需求 一个稍复杂点的处理逻辑往往需要多个 MapReduce 程序串联处理,多 job 的串联可以借助 MapReduce 框架的 JobControl 实现 实 ...
- Hadoop MapReduce编程 API入门系列之计数器(二十七)
不多说,直接上代码. MapReduce 计数器是什么? 计数器是用来记录job的执行进度和状态的.它的作用可以理解为日志.我们可以在程序的某个位置插入计数器,记录数据或者进度的变化情况. Ma ...
- Hadoop案例(四)倒排索引(多job串联)与全局计数器
一. 倒排索引(多job串联) 1. 需求分析 有大量的文本(文档.网页),需要建立搜索索引 xyg pingping xyg ss xyg ss a.txt xyg pingping xyg pin ...
随机推荐
- linux 后渗透测试
学习参考: http://weibo.com/1869235073/B9Seswf9R?type=comment http://weibo.com/p/1001603723521007220513 h ...
- @Valid的坑
@Valid 只能用来验证 @RequestBody 标注的参数,并且要写在 @RequestBody 之前
- 有些其他程序设置为从 Outlook 下载并删除邮件。为防止发生此意外情况,我们将这些邮件放入一个特殊的 POP 文件夹中
最近使用FOXMAIL接收MSN邮件时,发现有一些邮件收取不到,进到WEB页面,页面下方提示“你的邮件位于 POP 文件夹中!有些其他程序设置为从 Outlook 下载并删除邮件.为防止发生此意外情况 ...
- 一、Web 如何工作的
平常我们在浏览器中输入一个网址,随即看到一个页面,这个过程是怎样实现的呢?下面用一幅图来说明: 整个流程如下: 1.域名解析 浏览器会解析域名对应的IP地址 PS:DNS服务器的知识 2.建立TCP ...
- Trie:字典树
简介 \(Trie\),又称字典树或前缀树,是一种有序树状的数据结构,用于保存关联数组,其中的键值通常是字符串. 作用 把许多字符串做成一个字符串集合,并可以对其进行快速查找(本文以求多少个单词是一个 ...
- 转载请注明:Windows 系统必备好用软件&工具合集跟推荐 | 老D博客
Windows 系统必备好用软件&工具合集跟推荐 97 63,371 A+ 所属分类:工具软件 一.浏览器 二.下载软件 三.播放软件 五.电子邮件客户端 六.图片/照片 浏览查看工具 七.文 ...
- fold - 折叠输入行, 使其适合指定的宽度
总览 (SYNOPSIS) ../src/fold [OPTION]... [FILE]... 描述 (DESCRIPTION) 折叠(wrap) 每个 文件 FILE 中 的 输入行 (缺省为 标准 ...
- linux用命令行运行matlab的.mat文件
入m文件所在目录后,运行 $ matlab -nodesktop -nosplash -r matlabfile 只用文件名matlabfile,不能添加.m
- SpringMVC+Hibernate框架快速搭建
1. 新建Maven项目springmvc 2. pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" ...
- HTML 5.1 的 14 个新特性(含使用案例)
HTML5 属于万维网联盟 (W3C), 这个组织为整个网络界提供了标准,如此形成的协议可在全世界通行.在 2016 年 11 月, W3C 对长期行使的 HTML 5 标准进行了更新,它是2年内的第 ...