`

Hadoop Metrics1(转自:http://yangyoupeng-cn-fujitsu-com.iteye.com/)

 
阅读更多
Hadoop Metrics
Hadoop内部包含一套对外开放的各种metrics接口支持。每一个hadoop的守护进程都可以被配置定期去收集其自身内部组件的数据信息,然后可以通过调用某些插件来处理这一批metrics。目前已经有很多与hadoop配套的插件,这些插件可以应用在一般的部署场景。相互联系的一部分metrics划归为context(上下文),每一个context都是可以被独立对待。一些context是针对所有的daemon,比如说JVM,RPC,
还有一些对应一些特殊的daemon,比如HDFS metrics 只能从namenode 以及datanode中获得。在大多数情况下,当管理员需要监控hadoop集群,了解其性能,诊断问题的时候,hadoop提供的contexts会对管理员提供很大的帮助。
metric system 已经经过一段时间的改进,取得了一些提高以及特色。在2010年4月,一个旨在解决现有metrics system的问题的重构项目开始了。需要注意的事,新的metrics system(现在被称为metric2)支持将metric信息发送给多个多个插件,以及能够通过多种方法进行过滤,对JMX提供了更多的支持。
在2011年下半年重构工作已经完成,并被纳入到apache hadoop 0.20.205以及CDH 4以后的版本中,之前的apache hadoop版本 以及CDH版本还是使用初始的metrics 实现。为了能够记述清晰,我们在描述特殊特性的时候,将早先的metric称为metric1,对于一些共通特征,我们将新旧两个版本都称为metrics。

Apache Hadoop 0.20.0 and CDH3 (metrics1)

初始的metrics system 将相同的metric划归为context。一个context可以单独和某一个插件进行配置,这个插件的作用是定义这个metrics信息如何被处理。目前已经有很多插件,其中包括一个NullContexts,NullContext会忽略掉所有的metrics信息。某一daemon的内部组件会按照用户的定义的时间间隔拉取数据,被拉取的数据会被交个配置的插件进行管理。

下面是四个contexts。
jvm
   包含了java虚拟机信息,以及metrics。比如说heap size的最大值,已被占据的heap,垃圾回收的平均时间,所有的daemon都会产生这个contexts的metrics信息。

dfs:
   包含了hdfs的metrics。metrics信息会因为daemon角色的不同而不同。例如:
NameNode提供整个HDFS容量(total HDFS capacity)的信息,已被占用的容量(consumed capacity),丢失副本的block数(missing-replicated blocks,),需要进行复制的block数(under-replicated blocks),集群中活跃的datanode数。
DataNode提供坏disk volume的数目,剩余的capacity,只有HDFS daemons输出这个context的metrics信息
mapred
   包含mapred metrics。这些metrics也会因为daemon角色的不同而不同。比如:
jobtracker 提供的信息包括:map的数目,reduce slots的数目,要注意的tasktrackers(blacklisted tasktrackers),以及失败的tasktrackers 的failures。而tasktrackers提供正在运行的,已经失败的,被kill的任务。只有MapReduce的daemon输出该context的 metrics。

rpc 包含了远程过程调用的metrics信息。比如每一个队列中RPC被处理之前的时间,打开的连接数,所有的daemon输出这个context的metrics信息。

虽然所有的Hadoop的部分都可以抓取这类信息,但是在默认情况下这些信息是不能被外部系统使用。用户必须为每一个context配置一个插件来完成处理这些信息的。metrics system
的配置文件是hadoop-metrics.properties。该文件是一个简单的java format文件,并且可以做自由扩展。在该配置文件中有一些样例metrics 插件:
org.apache.hadoop.metrics.spi.NullContext
   这是hadoop为所有的contexts准备的默认的metrics 插件,.NullContext就是一个/dev/null.在Hadoop内部是不会进行Metrics收集的,也不会输出到外部系统。实际上,这个插件会有效的禁制对metrics访问。
配置举例如下:
# hadoop-metrics.properties
jvm.class = org.apache.hadoop.metrics.spi.NullContext
dfs.class = org.apache.hadoop.metrics.spi.NullContext

org.apache.hadoop.metrics.spi.NoEmitMetricsContext
NoEmitMetricsContext是NullContext的一个轻微变种,只有一个重要的不同点。虽然所有的metrics不会输出到外部系统,但是这个线程会在hadoop中运行,而这个线程会更新内存中的metrics信息。
诸如JMX系统,metrics servlet,这些系统依赖这些被搜集的metrics信息。没有理由停用这个插件。
对system的监察非常重要,应该作为最小配置。更新metrics的配置文件,需要重新启动一个daemon,这会给系统增加负载,NoEmitMetricsContext的唯一参数是period。该参数定义了信息采集频率:
例如:
# hadoop-metrics.properties
jvm.class = org.apache.hadoop.metrics.spi.NoEmitMetricsContext
jvm.period = 10
dfs.class = org.apache.hadoop.metrics.spi.NoEmitMetricsContext
dfs.period = 10

org.apache.hadoop.metrics.file.FileContext
FileContext 为了获得metrics而周期性测试hadoop内部组件,并且会将获得到的信息写入到local filesystem中去,他包含两个参数:fileName(这是写入到文件名),periods,更新频率。
jvm.class = org.apache.hadoop.metrics.file.FileContext
jvm.period = 10
jvm.fileName = /tmp/jvm-metrics.log
dfs.class = org.apache.hadoop.metrics.file.FileContext
dfs.period = 10
dfs.fileName = /tmp/dfs-metrics.log

实际的讲,该插件是有缺点,他不会循环切换文件,会导致输出文件不断增加,所以不要在实际的生产集群中使用这个插件。还有一个缺点就是需要为每一个context都指定一个唯一的用户名。所以还是推荐NoEmitMetricsContext。

org.apache.hadoop.metrics.ganglia.GangliaContext and org.apache.hadoop.metrics.ganglia.GangliaContext31
这两个插件,是hadoop为了开源监测系统ganglia提供第一个插件。ganglia是加州大学,Berkeley开发的,专门用于收集,聚合,探取大型集群系统的metrics信息。鉴于他的可扩展能力,ganglia和hadoop的集成是一个完美的系统。他通过在每一个节点上面运行一个小的daemon(gmond),gmond的作用是在每一个节点上面收集metrics信息。每一个gmond进程都依赖中中心的gmetad进程,该进程通过RRd记录数据信息,或者轮询的数据库文件,该文件是一种大小固定的,用以存储series data,ganglia提供了一个php的web应用展示的数据信息。
GangliaContext 通常被配置成向本地的gmond进程发送metrics信息,这些配置在配置文件中hadoop-metrics.properties发现。GangliaContext也同样有一个period的参数来定义采集频率。

# hadoop-metrics.properties
jvm.class = org.apache.hadoop.metrics.file.FileContext
jvm.period = 10
jvm.servers = 10.0.0.191
# The server value may be a comma separated list of host:port pairs.
# The port is optional, in which case it defaults to 8649.
# jvm.servers = gmond-host-a, gmond-host-b:8649
dfs.class = org.apache.hadoop.metrics.file.FileContext
dfs.period = 10
dfs.servers = 10.0.0.191
GangliaContext and GangliaContext31之间的不同支持,是前者是针对Ganglia 3.0以及之前的版本低,而GangliaContext31支持Ganglia 3.0之后的版。

JMX Support
由于Hadoop是基于java的,所以从开发角度来说,支持JMX就成了一个理所当然的决定。
在一些监视系统中,特别是java内部的监视系统,都包含对JMX的支持类,JMX好的原因是他支持自描述的端点endpoint(比如开启了JMX client),端点endpoint可以发现可用MBeans 以及他们的属性,JMX 术语,RPC 栈,安全,以及配置都是非常巧妙,但是非常费解。
不管怎样,加入你知道,并且已经有系统支持JMX,那么这个作为一个非常完美的集成选项。
JMX 功能与metrics 插件之间联系是以一种不常见的方式。hadoop内部的MBeans依赖于metrics 插件。使用默认的NullContext插件,虽然他会将JMX client连接到Hadoop daemon上面去,可以看到很多MBean,但是这些MBean不会被更新,这将给调试带了麻烦。
启动具有更新线程的插件,比如NoEmitMetricsContext, GangliaContext将会是Mbeans的信息得到正确展现。

REST interface

另外一个比较通用的获取hadoop的metrics信息的方式是使用一个运行在每一个hadoop daemon中内嵌的web 服务器内的叫REST/JSON servlet。Http 服务,大量的JSON解析库,以及其简单性令这个接口成了一个非常好的选择。
一共有两周servlet,一个初始的metrics servlet,在/metrics中;一个是更新替代版本,位于/jmx.两者都提供相似的机能(一个HTTP get请求,产生JSON格式的返回,但是两者却用不同的工作方式在工作)。/metrics servlet 直接使用Hadoop metrics,只和metrics1配合使用,他在CDH3以及apache hadoop 0.20.203之前的版本一直被使用,但是在这之后就停止使用了。新的/jmx servlet,将Hadoop的JMX Mbeas以JSON的形式暴露给外部http系统。
Using the metrics servlet.
如果你定义了一个具有更新线程的插件,通过访问如下URl,将会获得一个文本形式的metrics信息:
[esammer@hadoop01:~ ]$ curl http://hadoop117:50070/metrics
dfs
FSDirectory
{hostName=hadoop117,sessionId=}:
files_deleted=100
FSNamesystem
{hostName=hadoop117,sessionId=}:
BlockCapacity=2097152
BlocksTotal=9
CapacityRemainingGB=24
CapacityTotalGB=31
CapacityUsedGB=0
CorruptBlocks=0
ExcessBlocks=0
FilesTotal=33
MissingBlocks=0
PendingDeletionBlocks=0
PendingReplicationBlocks=0
ScheduledReplicationBlocks=0
TotalLoad=1
UnderReplicatedBlocks=1
namenode
{hostName=vm02.localdomain,sessionId=}:
AddBlockOps=1
CreateFileOps=1
DeleteFileOps=1
FileInfoOps=12
FilesAppended=0

通过使用http://hadoop117:50070/metrics?format=json,在后面添加format=JSON的形式,可以获取json形式的metrics信息。
[esammer@hadoop01:~ ]$ curl 'http://hadoop117:50070/metrics?format=json'
{"dfs":{
"FSDirectory":[
[{"hostName":"hadoop117","sessionId":""},{"files_deleted":100}]
],
"FSNamesystem":[
[
{"hostName":"hadoop117","sessionId":""},
{"BlockCapacity":2097152,"BlocksTotal":9,"CapacityRemainingGB":24,
"CapacityTotalGB":31,"CapacityUsedGB":0,"CorruptBlocks":0,"ExcessBlocks":0,
"FilesTotal":33,"MissingBlocks":0,"PendingDeletionBlocks":0,


Using the JMX JSON servlet.
  被设计作为/metrics的替代品,/jmx servlet 产生相同的输出,但是数据使用Hadoop JMX Mbeans中获得,而不是从metrics system直接获得。/jmx servlet只支持JSON形式的输出:
[esammer@hadoop01:~ ]$ curl http://hadoop117:50070/jmx
{
"name" : "hadoop:service=NameNode,name=NameNodeActivity",
"modelerType" : "org.apache.hadoop.hdfs.server.namenode.metrics.NameNodeActivtyMBean",
"AddBlockOps" : 0,
"fsImageLoadTime" : 2756,
"FilesRenamed" : 0,
"SyncsNumOps" : 0,
"SyncsAvgTime" : 0,
"SyncsMinTime" : 0,
"SyncsMaxTime" : 70,
"JournalTransactionsBatchedInSync" : 0,
"FileInfoOps" : 0,
"CreateFileOps" : 0,
"GetListingOps" : 0,
"TransactionsNumOps" : 0,
"TransactionsAvgTime" : 0,
"TransactionsMinTime" : 0,
"TransactionsMaxTime" : 1,
"GetBlockLocations" : 0,
"BlocksCorrupted" : 0,
"FilesInGetListingOps" : 0,
"SafemodeTime" : 40117,
"FilesCreated" : 0,
"FilesAppended" : 0,
"DeleteFileOps" : 0,
"blockReportNumOps" : 0,
"blockReportAvgTime" : 0,
"blockReportMinTime" : 0,
"blockReportMaxTime" : 3
}, {
"name" : "java.lang:type=Threading",
"modelerType" : "sun.management.ThreadImpl",
"ThreadContentionMonitoringEnabled" : false,
"DaemonThreadCount" : 29,
"PeakThreadCount" : 38,
"CurrentThreadCpuTimeSupported" : true,
"ObjectMonitorUsageSupported" : true,
"SynchronizerUsageSupported" : true,
"ThreadContentionMonitoringSupported" : true,
"ThreadCpuTimeEnabled" : true,
...
分享到:
评论

相关推荐

    centos安装jdk1.8时出现没有/lib/ld-linux.so.2:这个文件的原因分析

    -bash: /usr/local/jdk/jdk1.8.0_181/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory 安装完后 java -version 查看版本出现: 原因是:没有那个文件或目录,找了很久发现需要...

    org.apache.hadoop.ipc.Client: Retrying connect to server

    NULL 博文链接:https://ouyida3.iteye.com/blog/1144326

    hadoop常见问题及解决办法

    在网上搜集的以及本人自己总结的hadoop集群常见问题及解决办法,融合了网上常常搜到的一些文档以及个人自己的经验。

    hadoop-core-0.20.2-cdh3u3.jar

    export CLASSPATH="$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:${HADOOP_HOME}/lib/commons-logging-1.0.4.jar:${HADOOP_HOME}/lib/guava-r09-jarjar.jar:${HADOOP_HOME}/hadoop-core-0.20.2-cdh3u3.jar:/usr/...

    Hadoop集群搭建

    Hadoop集群搭建: 1.CentOS 6.7 minimal http://mirror.neu.edu.cn/centos/6.7/isos/x86_64/CentOS-6.7-x86_64-minimal.iso 2.Hadoop 2.6.3 ...

    spark-2.4.0-bin-without-hadoop.tgz

    spark的安装包,主要用于安装spark。Apache Spark是一个新兴的大数据处理通用引擎,提供了分布式的内存抽象。

    重新编译好的contain-executor文件,指向/etc/hadoop/container-executor.cfg

    hadoop版本3.2.1 hadoop自带的Container-executor在配置yarn-kerberos时存在问题,以及在配置...1 替换/$HADOOP_HOME/bin/下的container-executor 2 创建/etc/hadoop目录,并将container-executor.cfg放在该目录下即可

    在配置SSH免密登录时报错:/usr/bin/ssh-copy-id: ERROR: failed to open ID file ‘/root/.pub’: 没有那个文件或目录

    [root@hadoop1 sbin]# ssh-copy-id hadoop1 /usr/bin/ssh-copy-id: ERROR: failed to open ID file '/root/.pub': 没有那个文件或目录 (to install the contents of '/root/.pub' anyway, look at the -f option) ...

    hadoop-eclipse-plugin-1.1.2.jar

    <property name="hadoop.root" location="${root}/../../../"/> 改成 <property name="root" value="/home/hadoop/soft/hadoop-1.1.2/src/contrib/eclipse-plugin"/> <property name="eclipse.home" location="/...

    hadoop-eclipse-plugin-2.10.0.jar

    Eclipse集成Hadoop2.10.0的插件,使用`ant`对hadoop的jar包进行打包并适应Eclipse加载,所以参数里有hadoop和eclipse的目录. 必须注意对于不同的hadoop版本,` HADDOP_INSTALL_PATH/share/hadoop/common/lib`下的jar包...

    HDFS上传文件报错org.apache.hadoop.fs.ChecksumException: Checksum error: file:/hyk/data/hyk.txt

    当从本地上传文件到HDFS中...org.apache.hadoop.fs.ChecksumException: Checksum error: file:/hyk/data/hyk.txt [root@node01 data]# hadoop fs -put hyk.txt /hyk/test 20/02/18 12:54:39 INFO fs.FSInputChecker: Fo

    hadoop-lzo-master

    1.安装 Hadoop-gpl-compression 1.1 wget http://hadoop-gpl-compression.apache-extras.org.codespot.com/files/hadoop-gpl-compression-0.1.0-rc0.tar.gz 1.2 mv hadoop-gpl-compression-0.1.0/lib/native/Linux-...

    flink-shaded-hadoop-3-uber-3.1.1.7.1.1.0-565-9.0.jar

    Flink-1.11.2与Hadoop3集成JAR包,放到flink安装包的lib目录下,可以避免Caused by: org.apache.flink.core.fs.UnsupportedFileSystemSchemeException: Hadoop is not in the classpath/dependencies.这个报错,实现...

    HBase的安装与配置

    /root/hbase-0.98.12.1-hadoop2/bin/./start-hbase.sh 12、通过浏览器访问hbase管理页面 Node11:60010 Node12:60010 Node11:50070 Node12:50070 13、为保证集群的可靠性,要启动多个HMaster hbase-daemon.sh ...

    hdfs-default.xml

    export CLASSPATH="$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:${HADOOP_HOME}/lib/commons-logging-1.0.4.jar:${HADOOP_HOME}/lib/guava-r09-jarjar.jar:${HADOOP_HOME}/hadoop-core-0.20.2-cdh3u3.jar:/usr/...

    hadoop-2.6.0-hadoop.dll-winutils.exe

    log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory). log4j:WARN Please initialize the log4j system properly. log4j:WARN See ...

    hadoop-mapreduce-examples-2.6.5.jar

    hadoop-mapreduce-examples-2.6.5.jar 官方案例源码

    Ubuntu_Hadoop部署笔记

    CLASSPATH=./:/usr/lib/jvm/java-6-openjdk/lib JAVA_HOME=/usr/lib/jvm/java-6-openjdk PATH添加::/usr/lib/jvm/java-6-openjdk 二、新增hadoop用户 命令:sudo addgroup hadoop1001 sudo adduser --ingroup ...

    hadoop-3.1.1.3.1.4.0-315.tar.gz

    ambari-2.7.5 编译过程中四个大包下载很慢,所以需要提前下载,包含:hbase-2.0.2.3.1.4.0-315-bin.tar.gz ,hadoop-3.1.1.3.1.4.0-315.tar.gz , grafana-6.4.2.linux-amd64.tar.gz ,phoenix-5.0.0.3.1.4.0-315....

    hadoop最新版本3.1.1全量jar包

    hadoop-annotations-3.1.1.jar hadoop-common-3.1.1.jar hadoop-mapreduce-client-core-3.1.1.jar hadoop-yarn-api-3.1.1.jar hadoop-auth-3.1.1.jar hadoop-hdfs-3.1.1.jar hadoop-mapreduce-client-hs-3.1.1.jar ...

Global site tag (gtag.js) - Google Analytics