gpt4 book ai didi

java - 使用 nodetool 获取 Cassandra 快照的 takeSnapshot java.lang.NoSuchMethodException

转载 作者:行者123 更新时间:2023-12-04 07:49:08 25 4
gpt4 key购买 nike

我正在尝试使用在 docker 容器上运行的 nodetool 快照工具获取 cassandra 数据库的快照。更准确地说,我使用以下命令

nodetool -h cassandra -p 9999 snapshot
其中 cassandra 在 hosts 文件中定义。
这会产生以下异常:
错误:takeSnapshot(java.lang.String, java.util.Map, [Ljava.lang.String;)
- 堆栈跟踪 -
java.lang.NoSuchMethodException: takeSnapshot(java.lang.String, java.util.Map, [Ljava.lang.String;)
在 com.sun.jmx.mbeanserver.PerInterface.noSuchMethod(PerInterface.java:169)
在 com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:135)
在 com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:252)
在 com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
在 com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
在 javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468)
在 javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
在 javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309)
在 javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401)
在 javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)
在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在 java.lang.reflect.Method.invoke(Method.java:498)
在 sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)
在 sun.rmi.transport.Transport$1.run(Transport.java:200)
在 sun.rmi.transport.Transport$1.run(Transport.java:197)
在 java.security.AccessController.doPrivileged(Native Method)
在 sun.rmi.transport.Transport.serviceCall(Transport.java:196)
在 sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)
在 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834)
在 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688)
在 java.security.AccessController.doPrivileged(Native Method)
在 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687)
在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
在 java.lang.Thread.run(Thread.java:748)
有人会知道为什么会这样吗?
提前致谢 !

最佳答案

看起来您在 Docker 和您的主机上有不兼容的 Cassandra 版本 - 在您的主机上,您有 DataStax Enterprise 或 Cassandra 4.0 beta,它们具有另一组参数 takeSnapshot函数(它是由 commit 5 年前引入的)。
要解决这个问题,你需要使用相同版本的 Cassandra 来执行命令,最简单的方法是在 Docker 容器中使用 docker exec <container-name> nodetool snapshot <options-if-necessary> 执行它。

关于java - 使用 nodetool 获取 Cassandra 快照的 takeSnapshot java.lang.NoSuchMethodException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67071388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com