Skip to content

HBase: HBCK2 misses dependencies #1575

Description

@Maleware

Symptom

Currently reproduced in 26.3.0, 25.11.0 HBase 2.6.4, 2.6.3 and 2.6.2 and possibly in previous versions (unknown) if you have HBase backed by ABFS (Azure Blob File System) and you try in the HBase master to

hbck2 filesystem "my_table"

you end up with

stackable@hbase-master-default-0 /stackable/hbase-2.6.3-stackable25.11.0 $ hbck2 filesystem "my_table"
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/stackable/hbase-2.6.3-stackable25.11.0/lib/client-facing-thirdparty/log4j-slf4j-impl-2.17.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/stackable/hbase-operator-tools-1.3.0-fd5a5fb-hbase2.6.3-stackable25.11.0/hbase-hbck2/hbase-hbck2-1.3.0-fd5a5fb-stackable25.11.0.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.apache.logging.slf4j.Log4jLoggerFactory]
2026-07-09T12:53:34,853 WARN  [main {}] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2026-07-09T12:53:35,636 WARN  [main {}] client.ZKConnectionRegistry: ZKConnectionRegistry is deprecated. See https://hbase.apache.org/book.html#client.rpcconnectionregistry
Exception in thread "main" java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.azurebfs.AzureBlobFileSystem not found
	at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2737)
	at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:3569)
	at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:3612)
	at org.apache.hadoop.fs.FileSystem.access$300(FileSystem.java:172)
	at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:3716)
	at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:3667)
	at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:557)
	at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:289)
	at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:541)
	at org.apache.hadoop.fs.Path.getFileSystem(Path.java:366)
	at org.apache.hadoop.hbase.util.CommonFSUtils.getRootDir(CommonFSUtils.java:293)
	at org.apache.hbase.FileSystemFsck.<init>(FileSystemFsck.java:44)
	at org.apache.hbase.HBCK2.doCommandLine(HBCK2.java:1230)
	at org.apache.hbase.HBCK2.run(HBCK2.java:1136)
	at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:82)
	at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:97)
	at org.apache.hbase.HBCK2.main(HBCK2.java:1533)
Caused by: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.azurebfs.AzureBlobFileSystem not found
	at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2641)
	at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2735)
	... 16 more

Expectation

hbck2 should be able to perform operations from the terminal out of the box.

Workaround

It was necessary to

export HBASE_CLASSPATH=\
/stackable/hbase/lib/commons-lang3-3.18.0.jar:\
/stackable/hbase/lib/hadoop-azure-3.4.2-stackable26.3.0.jar:\
/stackable/hbase/lib/httpclient-4.5.14.jar:\
/stackable/hbase/lib/httpcore-4.4.16.jar:\
/stackable/hbase/lib/jackson-annotations-2.19.2.jar:\
/stackable/hbase/lib/jackson-core-2.19.2.jar:\
/stackable/hbase/lib/jackson-databind-2.19.2.jar:\
/stackable/hbase/lib/zookeeper-3.8.4.jar:\
/stackable/hbase/lib/hadoop-hdfs-client-3.4.2-stackable26.3.0.jar

in HBase master terminal. After this hbck2 completed operations without further errors.

Metadata

Metadata

Assignees

No one assigned

    Type

    Fields

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions