NoClassDefFoundError: org/apache/hadoop/hdfs/HdfsConfiguration when using Paimon Lakehouse
- 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