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中显示了最前面源码中的日志语句。