apache / apache/fluss

NoClassDefFoundError: org/apache/hadoop/hdfs/HdfsConfiguration when using Paimon Lakehouse

Open
#1,314 13 comments 1 reaction 0 assignees View on GitHub
priority=critical
Dominant language
Java
Stars
2.1k
Forks
625
Avg merge
3d 14h
Merged PRs (30d)
97

Description

### Search before asking

- [x] I searched in the [issues](https://github.com/alibaba/fluss/issues) and found nothing similar.

### Fluss version

0.7.0 (latest release)

### Please describe the bug 🐞

## Problem1

This is reported in https://apache-fluss.slack.com/archives/C08QXHUH3M1/p1752314994560869 by George Leonard (see more detailed information and files in the slack thread).

I copied the important configuration to here. The NoClassDefFoundError of `HdfsConfiguration` can be reproduced by following steps:
1. Configure `datalake.format` paimon with filesystem metastore and **a local warehouse path** on each Fluss server
2. Download `fluss-fs-hadoop-0.7.0.jar`, `fluss-fs-s3-0.7.0.jar`, `fluss-lake-paimon-0.7.0.jar` into `/lib`
3. Start all the Fluss servers and Coordinator reports the error.

If remove step 2, all the things work. If adding `flink-shaded-hadoop-2-uber-2.8.3-10.0.jar` into `fluss/lib`, it also works.

```
zookeeper.address: zookeeper:2181
coordinator.host: coordinator-server
remote.data.dir: hdfs://namenode:9000/fluss
datalake.format: paimon
datalake.paimon.metastore: filesystem
datalake.paimon.warehouse: /tmp/paimon
```

```
coordinator-server | 2025-07-12 10:00:26,777 ERROR com.alibaba.fluss.server.ServerBase [] - Could not start the CoordinatorServer.
coordinator-server | java.lang.NoClassDefFoundError: org/apache/hadoop/hdfs/HdfsConfiguration
coordinator-server | at org.apache.paimon.catalog.CatalogContext.(CatalogContext.java:53) ~[fluss-lake-paimon-0.7.0.jar:0.7.0]
coordinator-server | at org.apache.paimon.catalog.CatalogContext.create(CatalogContext.java:65) ~[fluss-lake-paimon-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.lake.paimon.PaimonLakeCatalog.(PaimonLakeCatalog.java:71) ~[fluss-lake-paimon-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.lake.paimon.PaimonLakeStorage.createLakeCatalog(PaimonLakeStorage.java:42) ~[fluss-lake-paimon-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.lake.paimon.PaimonLakeStorage.createLakeCatalog(PaimonLakeStorage.java:27) ~[fluss-lake-paimon-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.server.coordinator.CoordinatorServer.createLakeCatalog(CoordinatorServer.java:258) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.server.coordinator.CoordinatorServer.startServices(CoordinatorServer.java:195) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.server.ServerBase.start(ServerBase.java:118) [fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.server.ServerBase.startServer(ServerBase.java:88) [fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.server.coordinator.CoordinatorServer.main(CoordinatorServer.java:154) [fluss-server-0.7.0.jar:0.7.0]
coordinator-server | Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hdfs.HdfsConfiguration
coordinator-server | at jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source) ~[?:?]
coordinator-server | at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source) ~[?:?]
coordinator-server | at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
coordinator-server | ... 10 more
coordinator-server | 2025-07-12 10:00:26,789 ERROR com.alibaba.fluss.server.ServerBase [] - Could not start CoordinatorServer.
coordinator-server | com.alibaba.fluss.exception.FlussException: Failed to start the CoordinatorServer.
coordinator-server | at com.alibaba.fluss.server.ServerBase.start(ServerBase.java:131) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.server.ServerBase.startServer(ServerBase.java:88) [fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.server.coordinator.CoordinatorServer.main(CoordinatorServer.java:154) [fluss-server-0.7.0.jar:0.7.0]
coordinator-server | Caused by: java.lang.NoClassDefFoundError: org/apache/hadoop/hdfs/HdfsConfiguration
coordinator-server | at org.apache.paimon.catalog.CatalogContext.(CatalogContext.java:53) ~[fluss-lake-paimon-0.7.0.jar:0.7.0]
coordinator-server | at org.apache.paimon.catalog.CatalogContext.create(CatalogContext.java:65) ~[fluss-lake-paimon-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.lake.paimon.PaimonLakeCatalog.(PaimonLakeCatalog.java:71) ~[fluss-lake-paimon-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.lake.paimon.PaimonLakeStorage.createLakeCatalog(PaimonLakeStorage.java:42) ~[fluss-lake-paimon-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.lake.paimon.PaimonLakeStorage.createLakeCatalog(PaimonLakeStorage.java:27) ~[fluss-lake-paimon-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.server.coordinator.CoordinatorServer.createLakeCatalog(CoordinatorServer.java:258) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.server.coordinator.CoordinatorServer.startServices(CoordinatorServer.java:195) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.server.ServerBase.start(ServerBase.java:118) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | ... 2 more
coordinator-server | Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hdfs.HdfsConfiguration
coordinator-server | at jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source) ~[?:?]
coordinator-server | at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source) ~[?:?]
coordinator-server | at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
coordinator-server | at org.apache.paimon.catalog.CatalogContext.(CatalogContext.java:53) ~[fluss-lake-paimon-0.7.0.jar:0.7.0]
coordinator-server | at org.apache.paimon.catalog.CatalogContext.create(CatalogContext.java:65) ~[fluss-lake-paimon-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.lake.paimon.PaimonLakeCatalog.(PaimonLakeCatalog.java:71) ~[fluss-lake-paimon-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.lake.paimon.PaimonLakeStorage.createLakeCatalog(PaimonLakeStorage.java:42) ~[fluss-lake-paimon-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.lake.paimon.PaimonLakeStorage.createLakeCatalog(PaimonLakeStorage.java:27) ~[fluss-lake-paimon-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.server.coordinator.CoordinatorServer.createLakeCatalog(CoordinatorServer.java:258) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.server.coordinator.CoordinatorServer.startServices(CoordinatorServer.java:195) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.server.ServerBase.start(ServerBase.java:118) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | ... 2 more
```

## Problem2
Reverting to fluss/fluss:0.7.0 with a dockerfile tha references lakehouse storage tiering/paimon/hdfs with the same configuration,

```
zookeeper.address: zookeeper:2181
coordinator.host: coordinator-server
remote.data.dir: hdfs://namenode:9000/fluss
datalake.format: paimon
datalake.paimon.metastore: filesystem
datalake.paimon.warehouse: /tmp/paimon
```
it throws the exception during initialize fluss HDFS fs.

```
| 2025-07-12 13:25:56,802 ERROR com.alibaba.fluss.server.ServerBase [] - Could not start CoordinatorServer.
coordinator-server | com.alibaba.fluss.exception.FlussException: Failed to start the CoordinatorServer.
coordinator-server | at com.alibaba.fluss.server.ServerBase.start(ServerBase.java:131) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.server.ServerBase.startServer(ServerBase.java:88) [fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.server.coordinator.CoordinatorServer.main(CoordinatorServer.java:154) [fluss-server-0.7.0.jar:0.7.0]
coordinator-server | Caused by: com.alibaba.fluss.fs.UnsupportedFileSystemSchemeException: Cannot support file system for 'hdfs' via Hadoop, because Hadoop is not in the classpath, or some classes are missing from the classpath.
coordinator-server | at com.alibaba.fluss.fs.hdfs.HadoopFsPlugin.create(HadoopFsPlugin.java:160) ~[?:?]
coordinator-server | at com.alibaba.fluss.fs.PluginFileSystemWrapper.create(PluginFileSystemWrapper.java:58) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.fs.FileSystem.lambda$getUnguardedFileSystem$3(FileSystem.java:400) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.utils.concurrent.LockUtils.inLock(LockUtils.java:41) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.fs.FileSystem.getUnguardedFileSystem(FileSystem.java:305) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.fs.FileSystem.get(FileSystem.java:300) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.fs.FsPath.getFileSystem(FsPath.java:264) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.server.ServerBase.start(ServerBase.java:116) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | ... 2 more
coordinator-server | Caused by: java.lang.NoClassDefFoundError: org/apache/hadoop/hdfs/HdfsConfiguration
coordinator-server | at com.alibaba.fluss.fs.hdfs.HadoopFsPlugin.create(HadoopFsPlugin.java:70) ~[?:?]
coordinator-server | at com.alibaba.fluss.fs.PluginFileSystemWrapper.create(PluginFileSystemWrapper.java:58) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.fs.FileSystem.lambda$getUnguardedFileSystem$3(FileSystem.java:400) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.utils.concurrent.LockUtils.inLock(LockUtils.java:41) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.fs.FileSystem.getUnguardedFileSystem(FileSystem.java:305) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.fs.FileSystem.get(FileSystem.java:300) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.fs.FsPath.getFileSystem(FsPath.java:264) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.server.ServerBase.start(ServerBase.java:116) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | ... 2 more
coordinator-server | Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hdfs.HdfsConfiguration
coordinator-server | at java.net.URLClassLoader.findClass(Unknown Source) ~[?:?]
coordinator-server | at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
coordinator-server | at com.alibaba.fluss.classloading.ComponentClassLoader.loadClassFromComponentOnly(ComponentClassLoader.java:152) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.classloading.ComponentClassLoader.loadClass(ComponentClassLoader.java:115) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
coordinator-server | at com.alibaba.fluss.fs.hdfs.HadoopFsPlugin.create(HadoopFsPlugin.java:70) ~[?:?]
coordinator-server | at com.alibaba.fluss.fs.PluginFileSystemWrapper.create(PluginFileSystemWrapper.java:58) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.fs.FileSystem.lambda$getUnguardedFileSystem$3(FileSystem.java:400) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.utils.concurrent.LockUtils.inLock(LockUtils.java:41) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.fs.FileSystem.getUnguardedFileSystem(FileSystem.java:305) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.fs.FileSystem.get(FileSystem.java:300) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.fs.FsPath.getFileSystem(FsPath.java:264) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | at com.alibaba.fluss.server.ServerBase.start(ServerBase.java:116) ~[fluss-server-0.7.0.jar:0.7.0]
coordinator-server | ... 2 more
```

### Solution

_No response_

### Are you willing to submit a PR?

- [ ] I'm willing to submit a PR!

Contributor guide

No contributing guide indexed for this repository

Research direction

Reproduce the failure with the listed Fluss 0.7.0 HDFS and Paimon configuration, then read HadoopFsPlugin.create and the PaimonLakeCatalog/CatalogContext startup path shown in the traces. Check how the fluss-fs-hadoop, fluss-fs-s3, and fluss-lake-paimon jars are loaded. Done means the CoordinatorServer starts with HDFS and Paimon enabled without manually adding the shaded Hadoop jar.

Written by the indexing model from the issue text.

Assessment

Tech stack
hadoop, java
Domain
data-engineering, distributed-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.