Hadoop2动态调整Log级别-以datanode的heartbeat log为例

  在Hadoop中,有些log信息在正常情况下是不打印出来的。比如datanode发送heartbeat的日志。
  代码位于BPServiceActor#sendHeartBeat方法中,如下图:
  这里写图片描述
  由于默认心跳间隔时间为3s,默认打印该日志的话,日志文件会很大。

一、使用命令

  可以使用命令hadoop daemonlog来获取和修改指定类的Log级别。

[hadoop@hadoop001 logs]$ hadoop daemonlog

Usage: General options are:
    [-getlevel <host:httpPort> <name>]
    [-setlevel <host:httpPort> <name> <level>]

  这个参数需要传入是get日志级别,还是set日志级别。
  需要指定访问的host和port
  需要指定修改日志级别的类
  如果是set日志级别,需要指定希望设置的Log级别

二、端口号

  查看datanode进程可以通过http访问的端口号

参数 默认值 作用
dfs.datanode.http.address 0.0.0.0:50075 The datanode http server address and port.

  所有想要动态调整的,都需要访问该进程的http-address。
  再比如,如果需要调整namenode的日志级别,那么需要访问端口号

参数 默认值 作用
dfs.namenode.http-address 0.0.0.0:50070 The address and the base port where the dfs namenode web ui will listen on.

三、操作

1、获取datanode日志级别

hadoop daemonlog -getlevel hadoop001:50075 org.apache.hadoop.hdfs.server.datanode.DataNode
Connecting to http://hadoop001:50075/logLevel?log=org.apache.hadoop.hdfs.server.datanode.DataNode
Submitted Log Name: org.apache.hadoop.hdfs.server.datanode.DataNode
Log Class: org.apache.commons.logging.impl.Log4JLogger
Effective level: INFO

2、设置datanode日志级别

[hadoop@hadoop001 logs]$ hadoop daemonlog -setlevel hadoop001:50075 org.apache.hadoop.hdfs.server.datanode.DataNode DEBUG
Connecting to http://hadoop001:50075/logLevel?log=org.apache.hadoop.hdfs.server.datanode.DataNode&level=DEBUG
Submitted Log Name: org.apache.hadoop.hdfs.server.datanode.DataNode
Log Class: org.apache.commons.logging.impl.Log4JLogger
Submitted Level: DEBUG
Setting Level to DEBUG ...
Effective level: DEBUG

四、查看日志

  修改datanode进程的日志级别后,查看日志。
1、INFO级别日志
这里写图片描述

2、DEBUG级别日志
  从下图中可以看出,调整为DEBUG后,log中显示了最前面源码中的日志语句。
这里写图片描述

原文地址:https://www.cnblogs.com/wuyida/p/6300231.html