Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

Hadoop中类似Dapper的跟踪

HTrace

HDFS-5274使用开源跟踪库Apache HTrace添加了对通过HDFS跟踪请求的支持。设置跟踪非常简单,但是它需要对客户端代码进行一些非常小的更改。

跨度接收器

跟踪系统通过收集称为“跨度”的结构中的信息来工作。由您决定如何使用与HTrace捆绑在一起的SpanReceiver接口的实现或自己实现接收信息的方式。

HTrace提供了诸如

  • FlumeSpan接收器
  • HBaseSpanReceiver
  • HTracedRESTReceiver
  • ZipkinSpanReceiver

有关HTrace配置键的说明,请参见core-default.xml。在某些情况下,您还需要将包含要使用的SpanReceiver的jar添加到每个节点上Hadoop的类路径中。(在上面的示例中,与Hadoop捆绑在一起的htrace-core4 jar中包含LocalFileSpanReceiver。)

    $ cp htrace-htraced / target / htrace-htraced-4.1.0-incubating.jar $ HADOOP_HOME / share / hadoop / common / lib /

动态更新跟踪配置

您可以使用hadoop trace命令查看和更新​​每个服务器的跟踪配置。您必须通过-host选项指定namenode或datanode的IPC服务器地址。如果要更新所有服务器的配置,则需要对所有服务器运行该命令。

hadoop trace -list显示与ID关联的已加载跨度接收器的列表。

  $ hadoop trace -list -host 192.168.56.2:9000
  ID类别
  1个org.apache.htrace.core.LocalFileSpanReceiver

  $ hadoop trace -list -host 192.168.56.2:9867
  ID类别
  1个org.apache.htrace.core.LocalFileSpanReceiver

hadoop trace -remove从服务器删除跨度接收器。-remove选项将跨度接收器的id作为参数。

  $ hadoop跟踪-删除1-主机192.168.56.2:9000
  删除了跟踪跨度接收器1

hadoop trace -add将跨度接收器添加到服务器。您需要将span接收器的类名称指定为-class选项的参数。您可以通过-Ckey = value选项指定与跨度接收器关联的配置。

  $ hadoop trace -add -class org.apache.htrace.core.LocalFileSpanReceiver -Chadoop.htrace.local.file.span.receiver.path = / tmp / htrace.out -host 192.168.56.2:9000
  添加了具有配置hadoop.htrace.local.file.span.receiver.path = /tmp/htrace.out的跟踪跨度接收器2

  $ hadoop trace -list -host 192.168.56.2:9000
  ID类别
  2 org.apache.htrace.core.LocalFileSpanReceiver

如果集群是Kerberized,则必须使用-principal选项指定服务主体名称。例如,要显示名称节点的跨度接收器列表:

$ hadoop trace -list -host NN1:8020 -principal namenode/NN1@EXAMPLE.COM

或者,对于数据节点:

$ hadoop trace -list -host DN2:9867 -principal datanode/DN1@EXAMPLE.COM

通过HTrace API开始跟踪范围

为了进行跟踪,您将需要使用跟踪范围来包装被跟踪的逻辑,如下所示。运行跟踪范围时,跟踪信息将与RPC请求一起传播到服务器。

    导入org.apache.hadoop.hdfs.HdfsConfiguration;
    导入org.apache.htrace.core.Tracer;
    导入org.apache.htrace.core.TraceScope;

    ...


    ...

        TraceScope ts = tracer.newScope(“ Gets”);
        尝试{
          ... //追踪逻辑
        }最后{
          ts.close();
        }

HTrace API跟踪的示例代码

下面显示的TracingFsShell.javaFsShell的包装,它在调用HDFS Shell命令之前开始跟踪范围。

    导入org.apache.hadoop.fs.FileSystem;
    导入org.apache.hadoop.fs.Path;
    导入org.apache.hadoop.conf.Configuration;
    导入org.apache.hadoop.conf.Configured;
    导入org.apache.hadoop.tracing.TraceUtils;
    导入org.apache.hadoop.util.Tool;
    导入org.apache.hadoop.util.ToolRunner;
    导入org.apache.htrace.core.Tracer;
    导入org.apache.htrace.core.TraceScope;
    
    公共类示例扩展已配置的工具Tool {
      @Override
      public int run(String argv [])引发异常{
        FileSystem fs = FileSystem.get(getConf());
        Tracer tracer =新的Tracer.Builder(“ Sample”)。
            conf(TraceUtils.wrapHadoopConf(“ sample.htrace。”,getConf()))。
            建立();
        int res = 0;
        试试(TraceScope scope = tracer.newScope(“ sample”)){
          Thread.sleep(1000);
          fs.listStatus(new Path(“ /”));
        }
        tracer.close();
        返回资源;
      }
      
      公共静态void main(String argv [])引发异常{
        ToolRunner.run(new Sample(),argv);
      }
    }

您可以如下所示编译并执行此代码。

$ javac -cp`hadoop classpath` Sample.java
$ java -cp。:`hadoop classpath`示例\
    -Dsample.htrace.span.receiver.classes = LocalFileSpanReceiver \
    -Dsample.htrace.sampler.classes = AlwaysSampler

通过FileSystem Shell启动跟踪范围

FileSystem Shell可以启用按配置属性进行的跟踪。

通过属性fs.client.htrace.sampler.classesfs.client.htrace.spanreceiver.classescore-site.xml或命令行中配置跨度接收器和采样器。

$ hdfs dfs -Dfs.shell.htrace.span.receiver.classes = LocalFileSpanReceiver \
           -Dfs.shell.htrace.sampler.classes = AlwaysSampler \
           -ls /

通过HDFS客户端的配置启动跟踪范围

DFSClient可以在内部启用跟踪。这使您可以将HTrace与客户端一起使用,而无需修改客户端源代码。

通过属性fs.client.htrace.sampler.classesfs.client.htrace.spanreceiver.classeshdfs-site.xml中配置跨度接收器和采样器。fs.client.htrace.sampler.classes的值可以是NeverSampler,AlwaysSampler或ProbabilitySampler。

  • NeverSampler:对于名称节点和数据节点的所有请求,HTrace均关闭;
  • AlwaysSampler:对名称节点和数据节点的所有请求的HTrace均打开;
  • ProbabilitySampler:对于名称节点和数据节点的一定百分比的请求,HTrace为ON
      <属性>
        <name> hadoop.htrace.span.receiver.classes </ name>
        <value> LocalFileSpanReceiver </ value>
      </ property>
      <属性>
        <name> fs.client.htrace.sampler.classes </ name>
        <value> ProbabilitySampler </ value>
      </ property>
      <属性>
        <name> fs.client.htrace.sampler.fraction </ name>
        <值> 0.01 </值>
      </ property>