SLF4J: Class path contains multiple SLF4J bindings.——Hbase启动输出

Posted Z.Q.Feng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SLF4J: Class path contains multiple SLF4J bindings.——Hbase启动输出相关的知识,希望对你有一定的参考价值。


项目场景:

系统:Ubuntu20.04
Hadoop版本:Hadoop3.3.1
Hbase版本:Hbase2.2.2


问题描述:

在启动 Hbase 时,或者查看 Hbase version 和使用 shell 时,出现如下输出:

hadoop@fzqs-Laptop:/usr/local/hbase$ bin/hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!
/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hbase/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!
/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]


原因分析:

原因很简单,Hbase 是自带有 Hadoop 中的相关依赖文件的,在本地装好 Hbase 后,Hadoop 中的文件与 Hbase 中的文件都有相关类的定义,从而导致如上输出。


解决方案:

方法有二,一是修改配置文件,让 Hbase 只使用内置的依赖文件:

先进入 Hbase 安装目录:

cd /usr/local/hbase

修改 hbase-env.sh 文件:

vim conf/hbase-env.sh

在命令模式下按下 G 键,跳转到文本末尾,可以看到最后几行内容如下:

# Tell HBase whether it should include Hadoop’s lib when start up,
# the default value is false,means that includes Hadoop’s lib.
# export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP=“true”

删除最后一行的注释符,即开头的“#”号,:wq 保存并退出,完成。

bin/hbase version

二是删除 Hadoop(或 Hbase)中相重复定义的文件,如上一条输出如下:

SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!
/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hbase/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!
/org/slf4j/impl/StaticLoggerBinder.class]

标红地方即是重复文件的位置,进入该位置:

cd /usr/local/hadoop/share/hadoop/common/lib
ls slf4j*

输出如下,

hadoop@fzqs-Laptop:/usr/local/hadoop/share/hadoop/common/lib$ ls slf4j*
slf4j-api-1.7.25.jar
slf4j-log4j12-1.7.25.jar

删除这两个文件即可:

sudo rm ./slf4j*

以上是关于SLF4J: Class path contains multiple SLF4J bindings.——Hbase启动输出的主要内容,如果未能解决你的问题,请参考以下文章

SLF4J: Class path contains multiple SLF4J bindings.警告解决

SLF4J: Class path contains multiple SLF4J bindings.

spark 与 Hadoop 融合后启动 slf4j提示Class path contains multiple SLF4J bindings

Hive客户端启动报SLF4J: Class path contains multiple SLF4J bindings.

SLF4J: Class path contains multiple SLF4J bindings.——Hbase启动输出

SLF4J: Class path contains multiple SLF4J bindings.——Hive启动输出