`
brandNewUser
  • 浏览: 456097 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hadoop从调整GC到关键Counter计算原理分析

阅读更多
 hadoop集群中发现使用Parallel Scavenge+Parallel Old收集器组合进行垃圾收集(这也是server端jvm默认的GC方式)时CPU占用可能会非常高,偶尔会出现爆满的状态,考虑可能是由于当时程序在执行GC导致的,而且很可能是由于并行GC导致的,我们根据服务器启动的Java进程查看一下当前使用的是哪种GC方式:
 
$ jinfo -flag "GC方式" jvm进程id
 
最终可以看出使用的是-XX:+UseParallelOldGC,打开此开关参数后,使用Parallel Scavenge+Parallel Old收集器组合进行垃圾收集。
 
串行垃圾回收器在jvm Client模式下是默认启动的,参数 -XX:+UseSerialGC 可以设置垃圾回收策略为串行。
 
模拟线上同样的两个MR任务,比较其执行CPU时间和GC时间:
 
-XX:+UseParallelOldGC

 
-XX:+UseSerialGC


 
经过分析之后,可以发现GC花费的时间有一定的增长,由453s提高了大概3倍左右,到达1321s;而CPU时间则有大幅度下降,说明的确降低了CPU的时间。
 
为了确保实验结果的正确性,再进行第二次的测试:
 
-XX:+UseParallelOldGC

 
-XX:+UseSerialGC

 
通过对比仍然可以看出,CPU时间减少200s左右,GC时间增加大概260s。通过简单分析可以看出,对于hadoop的每个任务的JVM,更像是client应用程序而非server端的应用,因为每个Task分配的资源CPU: 1 core, 2G memory是相对固定的。

 

Counter的计算逻辑

 
那么这两个Counter(CPU时间的计算以及GC时间的计算)是如何得出来的?
 
这两个Counter都在hadoop-mapreduce-client包下面的hadoop-mapreduce-client-core模块下,其中的resources包含了所有需要的资源,每个分组都是以不同的.properties文件命名的。CPU和GC消耗时间都在TaskCounter.properties文件中,可以看出这个文件的Counter都属于分组Map-Reduce Framework,在工程中它们存在于具体的枚举中:org.apache.hadoop.mapreduce.TaskCounter,
GC_TIME_MILLIS,
CPU_MILLISECONDS
  
 
hadoop如何衡量mapreduce任务的计算量,肯定不能按照任务的运行时间来计算,这是由于Map和Reduce的不均匀性,任务可能卡在单个Map或者Reduce端(由于分片和Partition的不均匀性导致)。
 

CPU,内存等资源的计算

 
可以确定,hadoop使用的是CPU时间,CPU_MILLISECONDS就是任务运行耗费的CPU时间。原来在hadoop运行期间,task会从/proc/<pid>/stat读取对应进程的用户CPU时间和内核CPU时间,其总和就是最后的CPU时间。
 
关于proc文件的具体信息说明,可以查看这篇blog:
 
我们关联到具体的源码位置,可以查看下面这个方法:
org.apache.hadoop.mapred.Task void updateResourceCounters()
方法说明:Update resource information counters
 
其中使用了org.apache.hadoop.yarn.util.ResourceCalculatorProcessTree来获得进程使用的相关资源,其中包括了CPU资源,物理内存以及虚拟内存资源等等。在hadoop2.2.0版本中包括了两种子类型,分别是基于Windows和Linux监测进程资源的,这里只分析基于Linux计算资源的子类:
org.apache.hadoop.yarn.util.ProcfsBasedProcessTree
  
由于CPU时间都是以jiffies为单位的,因此ProcessTree中首先计算了jiffies:
  • 执行Shell命令:  getconf CLK_TCK,返回jiffiPerseconds=100
  • jiffies的计算公式为:JIFFY_LENGTH_IN_MILLIS = jiffiesPerSecond != -1 ? Math.round(1000D / jiffiesPerSecond) : -1; 
而内存占用则摘自上述blog中:
"Map-Reduce Framework:Physical memory (bytes) snapshot" 每个task会从/proc/<pid>/stat读取对应进程的内存快照,这个是进程的当前物理内存使用大小。

"Map-Reduce Framework:Virtual memory (bytes) snapshot" 每个task会从/proc/<pid>/stat读取对应进程的虚拟内存快照,这个是进程的当前虚拟内存使用大小。
 
"Map-Reduce Framework:Total committed heap usage (bytes)" 每个task的jvm调用Runtime.getRuntime().totalMemory()获取jvm的当前堆大小。
  
物理内存和虚拟内存是从/proc/pid/stat中拿到的,Total committed heap usage (bytes)是直接调用JDK中的方法Runtime.getRuntime().totalMemory()方法拿到,这个值是这个JVM能拿到的最大内存。
 

GC时间的计算 

 
GC时间是肯定不能从系统中得出,这只能寄希望于Java虚拟机。Hadoop中是使用JMX来拿到GC的总时间的,这部分代码可以参考类org.apache.hadoop.mapred.Task类中子类GCTimeUpdater中的构造器以及getElapseGC()方法:
 
public GcTimeUpdater() {
      this.gcBeans = ManagementFactory.getGarbageCollectorMXBeans();
      getElapsedGc(); // Initialize 'lastGcMillis' with the current time spent.
    }

    /**
     * @return the number of milliseconds that the gc has used for CPU
     * since the last time this method was called.
     */
    protected long getElapsedGc() {
      long thisGcMillis = 0;
      for (GarbageCollectorMXBean gcBean : gcBeans) {
        thisGcMillis += gcBean.getCollectionTime();
      }

      long delta = thisGcMillis - lastGcMillis;
      this.lastGcMillis = thisGcMillis;
      return delta;
    }
 
JMX,Java Management eXtension,即Java管理扩展,为管理和监测资源提供了一个通过架构,设计模式,API和服务,JMX可以管理和监测的资源包括应用程序、设备、服务和Java虚拟机。
JMX的应用包括但不仅限于以下几种:
  • 管理应用程序的配置;
  • 统计并展现应用程序的行为;
  • 当资源的状态发生变化时发出通知;
比如JDK自带的工具JConsole就是第二种应用的方式:


 
通过其中的GarbageCollectorMBean中的方法就可以监测到具体的收集次数以及收集时间。


 
上述的分析仅仅是关于单个TaskAttempt的counter,这些Counter也需要定时地向Application Master汇报(通过RPC方式以及org.apache.hadoop.mapred.TaskUmbilicalProtocol协议)。
 
任务的Counter刷新也是有一定的间隔的,默认时间间隔(貌似不能修改的):
/** The number of milliseconds between progress reports. */
  public static final int PROGRESS_INTERVAL = 3000;
 
在任务执行过程中会进行不断地刷新操作,任务整体完成后,也会进行最后一次的状态提交,所以我们可以在任务完成后能够查看到所有map/reduce任务成功attemp的Counter指标数据。
 
 
 
  • 大小: 23.4 KB
  • 大小: 23.1 KB
  • 大小: 15.3 KB
  • 大小: 17 KB
  • 大小: 128 KB
  • 大小: 88.7 KB
分享到:
评论

相关推荐

    Hadoop运行原理分析pdf

    《Hadoop运行原理分析》是深入理解大数据处理框架Hadoop的核心读物,它详细解析了Hadoop如何在大规模数据集上高效运行。本文件主要涵盖了以下几个关键知识点: 1. **Hadoop概述**:Hadoop是Apache软件基金会开发的...

    hadoop 运行原理分析

    Hadoop是一个由Apache软件基金会开发的分布式计算平台,它最初是由Doug Cutting创造的,受到Google发布的一系列关于其搜索引擎的论文的启发。Hadoop的主要组件包括Hadoop分布式文件系统(HDFS)和MapReduce编程模型...

    hadoop从入门到精通课件pdf

    《Hadoop从入门到精通》课程的PDF课件是一份全面了解和掌握Hadoop技术体系的宝贵资源。这个课程涵盖了从Hadoop的基础概念到高级应用的方方面面,旨在帮助学习者逐步提升对Hadoop的理解和实战能力。以下是根据提供的...

    Hadoop HDFS原理分析,技术详解

    "Hadoop HDFS原理分析" HDFS(Hadoop Distributed File System)是Hadoop项目的一部分,是一个分布式文件管理系统。HDFS的设计理念是为了存储和管理大量的数据,具有高容错性、可扩展性和高性能的特点。 HDFS的...

    Hadoop存储与计算分离实践PDF

    总结来说,“Hadoop存储与计算分离实践”涵盖了从理论到实践的多个层面,对于理解大数据处理中的关键技术和优化策略具有重要价值。通过学习和掌握这些知识,开发者和数据工程师能够构建更加高效、可扩展的大数据解决...

    Hadoop进行分布式计算的入门资料

    - Hadoop优化:包括数据倾斜问题的解决、内存和磁盘使用策略的调整等。 六、实战应用 通过实际项目来巩固理论知识,例如建立一个日志分析系统,使用Hadoop处理网络日志,提取用户行为信息,进行用户画像构建或异常...

    Hadoop运行原理分析

    Hadoop运行原理分析主要涉及MapReduce编程模式、HDFS的架构以及Hadoop分布式计算的基本流程。以下是对该文件内容的详细解析。 1. Hadoop概述 Hadoop是一个能够处理海量数据的分布式计算框架,它基于Google开发的...

    基于Hadoop豆瓣电影数据分析实验报告

    【基于Hadoop豆瓣电影数据分析实验报告】 在大数据时代,对海量信息进行高效处理和分析是企业决策的关键。Hadoop作为一款强大的分布式计算框架,自2006年诞生以来,已经在多个领域展现了其卓越的数据处理能力。本...

    基于Hadoop数据分析系统设计(需求分析).docx

    总的来说,设计一个基于Hadoop的数据分析系统涉及到多个环节,从需求分析到系统设计,再到具体的部署和优化,每个步骤都需要细致考虑和精心实施。通过这样的系统,企业能够高效地处理和分析海量数据,从而获取有价值...

    Hadoop的工作原理

    Hadoop是大数据处理领域的重要工具,它以分布式计算模型为核心,为海量数据处理提供了解决方案。这个资料包显然包含了关于Hadoop工作原理的图片和一个深入理解Hadoop集群和网络的文档,让我们来详细探讨一下Hadoop的...

    Hadoop源码分析(完整版)

    Hadoop源码分析是深入理解Hadoop分布式计算平台原理的起点,通过源码分析,可以更好地掌握Hadoop的工作机制、关键组件的实现方式和内部通信流程。Hadoop项目包括了多个子项目,其中最核心的是HDFS和MapReduce,这两...

    基于hadoop计算机平均分

    总结来说,这个项目提供了一个全面的学习资源,涵盖了从理论到实践的全过程,适合对大数据处理和Hadoop MapReduce感兴趣的初学者或开发者。通过这个项目,学习者不仅可以掌握如何使用Java和Hadoop计算平均分,还能...

    Hadoop面试题(含代码和原理讲解)

    Hadoop面试题(含代码和原理讲解)Hadoop面试题(含代码和原理讲解)Hadoop面试题(含代码和原理讲解)Hadoop面试题(含代码和原理讲解)Hadoop面试题(含代码和原理讲解)Hadoop面试题(含代码和原理讲解)Hadoop...

    基于Hadoop的电影影评数据分析

    【基于Hadoop的电影影评数据分析】是一项大数据课程的大作业,旨在利用Hadoop的分布式处理能力来分析电影影评数据。Hadoop是一个由Apache软件基金会开发的开源框架,专为处理和存储大规模数据而设计。它由四个核心...

    hadoop作业调优参数整理及原理

    Hadoop作业调优是提升大数据处理效率的关键环节,通过对Hadoop MapReduce框架中的参数进行精细调整,可以显著改善作业的性能。以下是对标题和描述中涉及的参数及原理的详细说明: 1. **MapTask运行内部原理** - **...

    hadoop 第三版-权威指南-从入门到精通-中文pdf版本

    hadoop 第三版-权威指南-从入门到精通-中文pdf版本。介绍hadoop分布式文件系统,MapReduce的工作原理,并手把手教你如何构建hadoop集群,同时附带介绍了pig,hive,hbase,zookeeper,sqoop等hadoop家族的开源软件。

    Hadoop下载 hadoop-2.9.2.tar.gz

    摘要 Hadoop 是一个处理、存储和分析海量的...Hadoop 和 Google 内部使用的分布式计算系统原理相同,其开源特性使其成为分布式计算系统的事实上的国际标准。 Yahoo、Facebook、Amazon,以及国内的百度、阿里巴巴等众多

Global site tag (gtag.js) - Google Analytics