整套大数据学习资料(视频+笔记)百度网盘无门槛下载:http://www.edu360.cn/news/content?id=3377

10.2.2 度量

HDFSMapReduce守护进程收集的事件和度量相关的信息,这些信息统 称为“度量”(metric)。例如,各个datanode会收集以下度量(还有更多): 写入的字节数、块的复本数和客户端发起的读操作请求数(包括本地的和远 程的)。

度量从属于特定的上下文(context)。目前Hadoop使用dfsmapred、rpc jvm四个上下文Hadoop守护进程通常在多个上下文中收集度量。例 如,datanode会分别为dfsrpcjvm上下文收集度量

度量和计数器的差别在哪里?

主要区别是应用范围不同:度量由Hadoop守护进程收集,而计数器(参见 8.1节对计数器的讨论)先针对MapReduce任务进行采集,再针对整个作业 进行汇总。此外,用户群也不同,从广义上讲,度量为管理员服务,而计 数器主要为MapReduce用户服务。

二者的数据采集和聚集过程也不相同。计数器是MapReduce的特性, MapReduce系统确保计数器值由tasktracker产生,再传回jobtrackter,最终 传回运行MapReduce作业的客户端。(计数器是通过RPC的心跳[heartbeat] 传播的,详情可以参见6.1.2节。)在整个过程中,tasktrackerjobtracker 都会执行汇总操作。

度量的收集机制独立于接收更新的组件。有多种输出度量的方式,包括本 地文件、GangliaJMX。守护进程收集度量,并在输出之前执行汇总操作。

上下文指定发布单元。例如,可以选择只发布dfs上下文,而不发布jvm上下文。度量在conf/hadoop-metrics.properties文件中配置,默认情况下,所有上下文都被配置成不发布度量。下例显示一个默认的配置文件(已经移除 了注释):

dfs.class=org.apache.hadoop.metrics.spi.NullContext 
mapred.class=org.apache.hadoop.metrics.spi.NullContext 
jvm.class=org.apache.hadoop.metrics.spi.NullContext 
rpc.class=org.apache.hadoop.metrics.spi.NullContext

该文件中的每一行分别配置一个不同的上下文,并且指定一个类来管理该 上下文中的度量。这种类必须实现了 MetricsContext接口;并且,正如名称所描述的那样,NullContext类既不发布也不更新度量。

后面几个小节将介绍其他几个实现了MetricsContext接口的类。

用户可以访问特定守护进程的/metrics网页以浏览该守护进程所采集的原始度量,这为调试带来了便利。例如,要想以纯文本方式浏览jobtracker 度量,可访问http://jobtracker-host:50030/metrics网页;要想以json格式 进行浏览,则要访问http://jobtracker-host:50030/metrics?Format=json网页

1.关于FileContext

FileContext将度量写到一个本地文件中。它含有两个配置属性,即 fileNameperiod。属性fileName指定待写入文件的绝对路径文件名;属性period指定文件更新间隔(以秒为单位)。这两个属性都是可选 的;如果没有设置,则每隔五秒钟将度量写到标准输出。

待配置的属性名称的格式为:“上下文名称.属性名称”,中间用句点分 隔。例如,为了将jvm上下文转储到一个文件,我们将像下面这样更改其 配置:

jvm.class=org.apache.hadoop.metrics.file.FileContext jvm.fileName=/tmp/jvm_metrics.log

第一行将jvm上下文更改为使用FileContext类;第二行将jvm上下文的fileName属性设置为一个临时文件。输出的日志文件也有两行,但限于页 面宽度,这里分成多行显示:

jvm.metrics: hostName=ip-10-250-59-159, processName=NameNode,sessionId=, 
gcCount=46, gcTimeMillis=394, logErrorW, logFatal=0, logInfo=59, logWarn=l, 
memHeapCommittedM=4.9375,memHeaptJsedM=2.5322647, memNonHeapCommittedM=18.25,
memNonHeapUsedM=ll.330269, threadsBlocked=0, threadsNew=0, threadsRunnable=6, 
threadsTerminated=0,threadsTimedWaiting=8, threadsWaiting=13 
jvm.metrics: hostName=ip-10-250-59-159, processName=SecondaryNameNode, sessionId=,
gcCount=36, gcTimeMillis=261, logError=0, logFatal=0, logInfo=18, logWarn=4, 
memHeapCommittedM=5.4414062, memHeapUsedM=4.46756, memNonHeapCommittedM=18.25,
memNonHeapUsedM=10.624519j threadsBlocked=0, threadsNevj=0, threadsRunnable=5,
threadsTerminated=0,threadsTimedWaiting=4, threadsWaiting=2

尽管FileContext可在本地系统上调试程序,但并不适用大型集群。如果 在大型集群中使用该方法,输出文件会被分散到集群中各个节点,从而给 分析带来一定难度。

2.关于 GangliaContext

Ganglia是一个针对超大规模集群的开源的分布式监控系统,运行之后仅消耗各个节点上很少的资源。Ganglia通过 GangliaContext收集度量,例如CPU和内存的使用情况。用户也可以将 Hadoop度量添加到Ganglia

GangliaContext需要指定一个属性(即severs)来描述一系列Ganglia服务器,格式是由空格和(或)逗号分隔的主端口对

图10-2显示了从Ganglia获取的一类信息,即jobtracker队列中任务数量的 变化情况。

图片.png

图10-2.在jobtracker队列中的任务数(由Ganglia获得)

3.关于 NullContextWithUpdateThread

FileContextGangliaContext都将度量“推送”(push)到一个外部系统。 但某些监控系统(特别是JMX)则需要从Hadoop系统中“拉取”(pull)度量。 NullContextWithUpdateThread就是这样的一个类,它不向外部系统发布任

何度量,但会借助定时器定期刷新存储在内存中的度量值,以确保这些度 量在供其他系统使用时都是最新的

除了 NullContext之外,所有实现了 MetricsContext接口的类都有自动 更新功能(这些类都使用period属性,默认值是5秒)。因此,只有在用户 无需向外部系统输出度量时,才会用到NullContextWithUpdateThread类。例如,由于GangliaContext可以确保度量是最新的,因此用户在使 用JMX时无需额外配置度量系统。后面将详细讨论JMX

4.关于CompositeContext

CompositeContext类允许用户向多个上下文输出同一组度量。假设要将度量同时输出到FileContextGangliaContext,则配置文件如下所示。

jvm.class=org.apache.hadoop.metrics.spi.CompositeContext jvm.arity=2
jvm.subl.class=org.apache.hadoop.metrics.file.FileContext jvm.fileName=/tmp/jvm_metrics.log
jvm.sub2.class=org.apache.hadoop.metrics.ganglia.GangliaContext jvm.servers=ip-10-250-59-159.ec2.internal:8649

属性arity用于指定子上下文的数量。在本例中有两个子上下文。在各个子上下文中,属性名称都附带一个序号做后缀,例如jvm.subl.classjvm.sub2.class

 

转载请注明:全栈大数据 » 10.2.2 度量

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址