`
langyu
  • 浏览: 887876 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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读取文件内容(总输入数据)的统计
   
CounterMapReduceTotal
FileInputFormatCountersBYTES_READ1,109,990,59601,109,990,596

    BYTES_READ
         Map task的所有输入数据(字节),等于各个map task的map方法传入的所有value值字节之和。


FileSystemCounters
    MapReduce job执行所依赖的数据来自于不同的文件系统,这个group表示job与文件系统交互的读写统计
 
CounterMapReduceTotal
FileSystemCountersFILE_BYTES_READ01,544,520,8381,544,520,838
FILE_BYTES_WRITTEN1,544,537,3101,544,520,8383,089,058,148
HDFS_BYTES_READ1,110,269,50801,110,269,508
HDFS_BYTES_WRITTEN0827,982,518827,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端中间数据时的各种错误。
CounterMapReduceTotal
Shuffle ErrorsBAD_ID000
CONNECTION000
IO_ERROR000
WRONG_LENGTH000
WRONG_MAP000
WRONG_REDUCE000

    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调度相关的统计
CounterMapReduceTotal
Job CountersData-local map tasks0067
FALLOW_SLOTS_MILLIS_MAPS000
FALLOW_SLOTS_MILLIS_REDUCES000
SLOTS_MILLIS_MAPS001,210,936
SLOTS_MILLIS_REDUCES001,628,224
Launched map tasks0067
Launched reduce tasks008


    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, …]}。
CounterMapReduceTotal
Map-Reduce FrameworkCombine input records200,000,0000200,000,000
Combine output records117,838,5460117,838,546
Failed Shuffles000
GC time elapsed (ms)23,47246,58870,060
Map input records10,000,000010,000,000
Map output bytes1,899,990,59601,899,990,596
Map output records200,000,0000200,000,000
Merged Map outputs0536536
Reduce input groups084,879,13784,879,137
Reduce input records0117,838,546117,838,546
Reduce output records084,879,13784,879,137
Reduce shuffle bytes01,544,523,9101,544,523,910
Shuffled Maps0536536
Spilled Records117,838,546117,838,546235,677,092
SPLIT_RAW_BYTES8,57608,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无关,这里记录的大小就是表示额外信息的字节大小

5
1
分享到:
评论
10 楼 brandNewUser 2014-12-05  
你好,我请教一下关于Counter中的Data-local map tasks,含义上说的是本地数据的任务。但是如果任务的Split中包含了较多的文件(CombineFileSplit),或者文件比较大(含有很多块),数据不可能达到完全本地化,但这种情况下,这个Counter还是有值,那么此时代表什么含义?
谢谢
9 楼 crowgns 2014-05-30  
counter还是有大学问的阿
8 楼 coobery 2013-03-23  
多谢总结!
7 楼 langyu 2012-06-14  
xuxm2007 写道
其实我一开始找到你的博客
主要是想知道 Map output bytes和map端Local bytes written,以及reduce端的Local bytes read之间的关系?

现在搞明白了么?
6 楼 xuxm2007 2012-06-14  
其实我一开始找到你的博客
主要是想知道 Map output bytes和map端Local bytes written,以及reduce端的Local bytes read之间的关系?
5 楼 xuxm2007 2012-06-14  
楼主在杭州什么公司呢?
4 楼 xuxm2007 2012-06-14  
langyu 写道
xuxm2007 写道
不好意思 一不小心直接提交了
而且那三个显示的也没有你这个全面?是版本的问题,还是需要设置的问题

这是因为版本的问题。我所列出的这些都是0.21版本默认提供的项。


ok 非常感谢
以后多向你请教
3 楼 langyu 2012-06-13  
xuxm2007 写道
不好意思 一不小心直接提交了
而且那三个显示的也没有你这个全面?是版本的问题,还是需要设置的问题

这是因为版本的问题。我所列出的这些都是0.21版本默认提供的项。
2 楼 xuxm2007 2012-06-13  
不好意思 一不小心直接提交了
而且那三个显示的也没有你这个全面?是版本的问题,还是需要设置的问题
1 楼 xuxm2007 2012-06-13  
请问我用的是0.19.2
只能看到"File Systems" "Job Counters" "Map-Reduce Framework"

相关推荐

    MapReduce: Simplified Data Processing on Large Clusters 英文原文

    这是谷歌三大论文之一的 MapReduce: Simplified Data Processing on Large Clusters 英文原文。我的翻译可以见https://blog.csdn.net/m0_37809890/article/details/87830686

    MapReduce: Simplified Data Processing on Large Clusters中文版

    MapReduce 编程模型简介 MapReduce 是一种编程模型,由 Jeffrey Dean 和 Sanjay Ghemawat 于 2004 年提出,用于处理大规模数据集的分布式计算。该模型将计算任务分解成两个主要阶段:Map 和 Reduce。Map 阶段将...

    MapReduce: Simplified Data Processing on Large Clusters

    ### MapReduce:简化大型集群上的数据处理 #### 概述 MapReduce是一种编程模型及其相应的实现方式,旨在处理和生成大型数据集。该技术由谷歌的Jeffrey Dean和Sanjay Ghemawat提出,用于解决大规模数据处理的问题。...

    论文:MapReduce: Simplified Data Processing on Large Clusters

    ### MapReduce: 简化的大型集群数据处理 #### 一、引言 《MapReduce: Simplified Data Processing on Large Clusters》这篇论文由Google的研究员Jeffrey Dean和Sanjay Ghemawat撰写,旨在介绍一种名为MapReduce的...

    MapReduce: Simplified Data Processing on Large Clusters翻译

    ### MapReduce:简化大型集群上的数据处理 #### 概述 MapReduce是一种高效的数据处理模型,主要用于处理和生成大规模数据集。它通过将数据处理任务分解为“映射(Map)”和“归并(Reduce)”两个阶段,极大地简化...

    mapreduce:映射学习自我

    mapreduce创建代码项目mvn原型:generate -DarchetypeGroupId = org.apache.maven.archetypes -DgroupId = org.conan.mymahout -DartifactId = myPro -DpackageName = org.conan.mymahout -Dversion = 1.0-SNAPSHOT ...

    MapReduce: Simplified Data Processing on Large Clusters.pdf

    MapReduce programming model MapReduce是Google公司开发的一种编程模型和实现方法,用于处理和生成大规模数据集。该模型允许用户指定一个Map函数,以处理键值对,并生成中间键值对;然后,指定一个Reduce函数,以...

    MapReduce:Fair Scheduler前传

    MapReduce是一种广泛使用的编程模型,用于处理和生成大数据集。其核心思想是将大数据集分割成独立的块,这些块可以并行处理,然后再将结果合并起来。MapReduce模型主要由两个阶段组成:Map(映射)阶段和Reduce...

    MapReduce_ Simplified Data Processing on Large Clusters.pdf

    MapReduce的翻译,我只是个搬运工qwq

    MapReduce:超大机群上的简单数据处理

    MapReduce是一种编程模型,专为处理和生成大型数据集而设计。它简化了在超大机群中进行数据处理的复杂性,使程序员无需深入掌握并行分布式处理系统的细节就能编写程序。MapReduce的核心思想是将计算过程分为两个主要...

    MapReduce: Simplified Data Processing on Large Clusters

    Google那篇著名的论文的ppt,MapReduce开山之作,介绍了Google对MapReduce的实现。

    MapReduce:Nkeys,Nfiles终极解决方案.docx

    MapReduce是一种分布式编程模型,由Google开发,用于处理和生成大型数据集。它将复杂的并行数据处理任务分解为两个阶段:Map(映射)和Reduce(化简)。在这个Nkeys,Nfiles的终极解决方案中,主要关注的是MapReduce...

    MapReduce多语言编程1

    MapReduce教程视频,难度不算太高。这个是上半部分,下半部分在下一个资源。。嘿嘿

    MapReduce:股票波动率计算

    在这个特定的案例中,"MapReduce:股票波动率计算"项目利用MapReduce框架来分析纳斯达克股票的波动性,这是一种衡量股票价格变化幅度的重要金融指标。波动率可以帮助投资者了解市场的不确定性,并据此做出投资决策。 ...

    i2MapReduce:用于挖掘不断发展的大数据的增量MapReduce

    i2MapReduce:用于挖掘不断发展的大数据的增量MapReduce

    MapReduce:简单字数

    总结来说,“MapReduce:简单字数”指的是使用MapReduce模型来统计文本中的单词数量。通过Map、Shuffle和Reduce三个步骤,这个模型可以高效地处理大规模数据,实现快速准确的词频统计。在实际应用中,MapReduce可以...

    Dean-2008-Mapreduce.pdf

    MapReduce是一种编程模型,同时也是一种与之相关的实现,用于处理和生成大数据集,适用于各种现实世界中的任务。它由Google的工程师Jeffrey Dean和Sanjay Ghemawat在2004年提出,并在2008年发表。MapReduce的概念和...

    go-web-mapreduce:使用Web浏览器作为工作程序的MapReduce服务器,用Go编写

    Web MapReduce 使用Web浏览器作为工作程序的MapReduce...资源实施中使用的资源: Google Research:MapReduce:大型集群上的简化数据处理WebSocket RFC WebRTC RFC 谷歌/ MR4C Gorrila / Websocket SockJS Gopher图

Global site tag (gtag.js) - Google Analytics