首页 > 解决方案 > JanusGraph 0.5.2 嵌入式 cassandra java.lang.NoSuchMethodError: com.codahale.metrics.Snapshot

问题描述

我们正在使用嵌入式 cassandra 模式设置 JanusGraph 0.5.2。
当我们以这种模式启动 Janus 时,它会在其日志中抛出以下异常:

org.apache.cassandra.service.CassandraDaemon - Exception in thread Thread[OptionalTasks:1,5,main]
java.lang.NoSuchMethodError: com.codahale.metrics.Snapshot: method <init>()V not found
    at org.apache.cassandra.metrics.DecayingEstimatedHistogramReservoir$EstimatedHistogramReservoirSnapshot.<init>(DecayingEstimatedHistogramReservoir.java:353)
    at org.apache.cassandra.metrics.DecayingEstimatedHistogramReservoir.getSnapshot(DecayingEstimatedHistogramReservoir.java:224)
    at com.codahale.metrics.Histogram.getSnapshot(Histogram.java:54)
    at com.codahale.metrics.Timer.getSnapshot(Timer.java:142)
    at org.apache.cassandra.db.ColumnFamilyStore$3.run(ColumnFamilyStore.java:446)
    at org.apache.cassandra.concurrent.DebuggableScheduledThreadPoolExecutor$UncomplainingRunnable.run(DebuggableScheduledThreadPoolExecutor.java:118)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

我在网上搜索它似乎是metrics-core的一些maven依赖问题。

有什么办法可以在 JanusGraph 设置中解决这个问题?我们可以从日志中抑制此异常或禁用 Cassandra 指标吗?
这在 Janus 0.3.1 中不会发生

请帮忙

标签: javacassandrajanusgraph

解决方案


所以这个问题最终归结为 Codahale metrics-core JAR 的版本冲突。我相信 Cassandra 目前依赖于 3.1.5,而 JanusGraph(实际上是 Gremlin)附带(两者)3.0.2 和 3.2.2。

一种解决方案$JANUSGRAPH_HOME/lib.

但是如果你不想搞乱不同项目的库依赖关系,最好的解决方案可能是确保 JanusGraph 和 Cassandra 在不同的 JVM 中运行。


推荐阅读