Hi Henrik, Thanks for reporting the problem. org.apache.ratis.metrics.MetricsReporting imports org.apache.hadoop.metrics2.lib.DefaultMetricsSystem, I guess it is causing the ClassNotFoundException. It is a bug. Do you want to file a JIRA?
Tsz-Wo On Mon, Sep 30, 2019 at 2:23 AM Henrik Hegardt <[email protected]> wrote: > > Hi everyone, > > I'm getting this error while running Ratis: > > Caused by: java.io.IOException: java.lang.NoClassDefFoundError: > org/apache/hadoop/metrics2/lib/DefaultMetricsSystem > at org.apache.ratis.util.IOUtils.asIOException(IOUtils.java:54) > at org.apache.ratis.util.IOUtils.toIOException(IOUtils.java:61) > at org.apache.ratis.util.IOUtils.getFromFuture(IOUtils.java:70) > at > org.apache.ratis.server.impl.RaftServerProxy.getImpls(RaftServerProxy.java:284) > at > org.apache.ratis.server.impl.RaftServerProxy.start(RaftServerProxy.java:296) > at test.cluster.ClusterSevice.start(ClusterSevice.java:85) > ... 65 more > Caused by: java.lang.NoClassDefFoundError: > org/apache/hadoop/metrics2/lib/DefaultMetricsSystem > at > org.apache.ratis.metrics.MetricsReporting.<clinit>(MetricsReporting.java:42) > at > org.apache.ratis.server.metrics.RatisMetrics.<clinit>(RatisMetrics.java:39) > at > org.apache.ratis.server.raftlog.segmented.SegmentedRaftLogWorker.<init>(SegmentedRaftLogWorker.java:176) > at > org.apache.ratis.server.raftlog.segmented.SegmentedRaftLog.<init>(SegmentedRaftLog.java:197) > at > org.apache.ratis.server.raftlog.segmented.SegmentedRaftLog.<init>(SegmentedRaftLog.java:183) > at > org.apache.ratis.server.impl.ServerState.initRaftLog(ServerState.java:188) > at > org.apache.ratis.server.impl.ServerState.<init>(ServerState.java:120) > at > org.apache.ratis.server.impl.RaftServerImpl.<init>(RaftServerImpl.java:110) > at > org.apache.ratis.server.impl.RaftServerProxy.lambda$newRaftServerImpl$2(RaftServerProxy.java:208) > at > java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1700) > at > java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) > at > java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) > at java.base/java.lang.Thread.run(Thread.java:834) > Caused by: java.lang.ClassNotFoundException: > org.apache.hadoop.metrics2.lib.DefaultMetricsSystem > at > java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583) > at > java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) > at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) > ... 13 more > > AFAICT this is a class in the dependency > org.apache.hadoop:hadoop-common:3.1.1. I'm running with the dependencies > and Ratis 0.4.0 > > <dependency> > <artifactId>ratis-server</artifactId> > <groupId>org.apache.ratis</groupId> > > <exclusions> > <exclusion> > <groupId>log4j</groupId> > <artifactId>log4j</artifactId> > </exclusion> > <exclusion> > <groupId>org.slf4j</groupId> > <artifactId>slf4j-log4j12</artifactId> > </exclusion> > </exclusions> > </dependency> > <dependency> > <artifactId>ratis-grpc</artifactId> > <groupId>org.apache.ratis</groupId> > </dependency> > > And which should be enough according to the documentation. While it's > possible to include this dependency, it pulls in a lot of other > dependencies. While org.apache.ratis.metrics.MetricsReporting class does > have a dependency on the > org.apache.hadoop.metrics2.lib.DefaultMetricsSystem class, ratis-metrics > doesn't define a dependency to org.apache.hadoop:hadoop-common:3.1.1 in > its pom. Is this intended or am I missing something? > > Thank you for all your efforts. > > /Henrik > > > >
