之前没注意到,其实hbase-env.sh中已经包含了变量HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP的说明:

# 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"

[image: image.png]

leojie <leo...@apache.org> 于2024年7月29日周一 12:46写道:

> 我可以先在hbase-env.sh中设置该变量的值为true,如下:
> export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP=true
>
> 这样不会改变原来hbase脚本中的逻辑,这个变量的默认值或者作用说明,感觉可以添加到hbase-env.sh中,让用户知晓,然后选择性修改该值
>
> leojie <leo...@apache.org> 于2024年7月29日周一 12:17写道:
>
>> 张老师
>>   您好,最近在使用hbase2.5.x和2.6.x的过程中发现一个问题,RegionServer进程无日志输出,在.out文件中发现如下异常:
>>
>> SLF4J: Class path contains multiple SLF4J bindings.
>> SLF4J: Found binding in
>> [jar:file:/data/app/hadoop-3.3.6/share/hadoop/common/lib/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class]
>> SLF4J: Found binding in
>> [jar:file:/data/app/hbase-2.5.10/lib/client-facing-thirdparty/log4j-slf4j-impl-2.17.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
>> SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an
>> explanation.
>>
>> 正常情况下,我们编译hbase的安装包,都会指定需要的hadoop
>> version,都会带着hadoop的依赖,因此,hbase进程启动时,不应该再去加载hadoop的lib
>> jar,我在bin目录的hbase文件中输出了CLASSPATH,发现hadoop的jar被追加到了CLASSPATH中。
>>
>> 之所以这样,是因为在hbase文件中,存在一个环境变量,HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP,它无默认值,触发了如下脚本逻辑的执行:
>>
>> #If avail, add Hadoop to the CLASSPATH and to the JAVA_LIBRARY_PATH
>> # Allow this functionality to be disabled
>> echo
>> "HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP=$HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP"
>> if [ "$HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP" != "true" ] ; then
>>   HADOOP_IN_PATH=$(PATH="${HADOOP_HOME:-${HADOOP_PREFIX}}/bin:$PATH"
>> which hadoop 2>/dev/null)
>> fi
>> 导致hbase进程启动的class
>> path中携带了hadoop的依赖,当我设置变量:HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP的值为true时,一切都恢复正常
>>
>

Reply via email to