如何设置Hadoop HBase的Log Appender

要想很好的监控Hadoop集群的状态,hadoop打印的log是很重要的。我们的思路是使用部门研发的log appender将hadoop的数据append到我们自己的central logging数据库中(其实就是存在hbase中)。

说起来简单,实际操作起来也花了一天多的时间,下面记录下整个过程。

首先要明确hadoop使用的log机制。hadoop使用了slf4j,log4j,apache的common-logging。slf4j是纯的log接口,common-logging和log4j既是接口也有实现。而common-logging在检查到classpath下有log4j存在时会默认用log4j吐出log,classpath里有slf4j-log4j12-xxx.jar时slf4j也通过log4j吐出log。这样hadoop的所有log都通过一个log4j.properties配置即可管理log的吐出。关系图如下:

如何设置Hadoop HBase的Log Appender

但。。。我们自己的central logging系统只有logback的appender。因此需要把这些logging的家伙都转到logback里再通过logback里的logAppender存到我们自己的log系统里。

了解了原理,我们看下如何让logback一统天下,把他们全收拾了。

如何设置Hadoop HBase的Log Appender

原理:

在classpath中加上log4j-over-slf4j jar包,这样log4j就会进入slf4j,在classpath中加入jcl-over-slf4j jar包,common-logging的log就也会进入slf4j。此时只要再加上logback的jar包,slf4j是纯接口,此时只有logback一条路可以走,这样所有的log就会乖乖的都从logback里吐出来了。下面看下实际配置的步骤:

1.创建需要lib的文件夹:

sudo mkdir /logback

2.放入我们所需的lib:

3.由于我们用的cdh系列,需要让lib目录能够让hdfs用户能访问:

sudo chmod 777 -R /logback

sudo chown -R hdfs:hdfs /logback

4.修改hadoop的启动脚本,添加我们的lib到classpath下:

sudo vim /etc/hadoop/conf/hadoop-env.sh

添加以下内容

<SPAN style="FONT-SIZE: 18px">修改classpath
LOGBACK_HOME=/logback

for i in "$LOGBACK_HOME"/*.jar; do
  HADOOP_CLASSPATH="$i":"$HADOOP_CLASSPATH"
done


export HADOOP_CLASSPATH</SPAN>

相关推荐