【问题标题】:Cassandra Could not initialize class com.sun.jna.NativeCassandra 无法初始化类 com.sun.jna.Native
【发布时间】:2017-10-14 05:44:03
【问题描述】:

我在 CentOS 7 上安装了 Cassandra 3.9 版。 在启动 Cassandra Server 时,我收到如下错误::

TRACE [MemtableFlushWriter:1] 2017-05-15 04:25:49,735 LogTransaction.java:264 - 关闭事务日志 [mc_txn_flush_3f6a46f0-3961-11e7-87b4-0728ea39fb0d.log 在 /var/lib/cassandra/data/系统/本地-7ad54392bcdd35a684174e047860b377]
错误 [主要] 2017-05-15 04:25:49,745 CassandraDaemon.java:747 - 启动时遇到异常java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.NoClassDefFoundError:无法初始化类 com.sun.jna.Native 在 org.apache.cassandra.utils.FBUtilities.waitOnFuture(FBUtilities.java:403) ~[apache-cassandra-3.9.0.jar:3.9.0] 在 org.apache.cassandra.db.SystemKeyspace.forceBlockingFlush(SystemKeyspace.java:793) ~[apache-cassandra-3.9.0.jar:3.9.0] 在 org.apache.cassandra.db.SystemKeyspace.removeTruncationRecord(SystemKeyspace.java:639) ~[apache-cassandra-3.9.0.jar:3.9.0] 在 org.apache.cassandra.db.ColumnFamilyStore.invalidate(ColumnFamilyStore.java:541) ~[apache-cassandra-3.9.0.jar:3.9.0] 在 org.apache.cassandra.db.ColumnFamilyStore.invalidate(ColumnFamilyStore.java:517) ~[apache-cassandra-3.9.0.jar:3.9.0] 在 org.apache.cassandra.schema.LegacySchemaMigrator.lambda$unloadLegacySchemaTables$341(LegacySchemaMigrator.java:137) ~[apache-cassandra-3.9.0.jar:3.9.0] 在 org.apache.cassandra.schema.LegacySchemaMigrator$$Lambda$93/1308179535.accept(未知 来源)~[na:na] at java.lang.Iterable.forEach(Ite​​rable.java:75) ~[na:1.8.0_45] 在 org.apache.cassandra.schema.LegacySchemaMigrator.unloadLegacySchemaTables(LegacySchemaMigrator.java:137) ~[apache-cassandra-3.9.0.jar:3.9.0] 在 org.apache.cassandra.schema.LegacySchemaMigrator.migrate(LegacySchemaMigrator.java:83) ~[apache-cassandra-3.9.0.jar:3.9.0] 在 org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:254) [apache-cassandra-3.9.0.jar:3.9.0] 在 org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:601) [apache-cassandra-3.9.0.jar:3.9.0] 在 org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:730) [apache-cassandra-3.9.0.jar:3.9.0]

这个问题有一个解决方案(Cassandra Startup failure on ARM64 machine (java.lang.NoClassDefFoundError: Could not initialize class com.sun.jna.Native) ),Soultion 建议更改 cassandra-env.sh。我试过了,但它不适合我。

我在 cassandra-env.sh

中(分别)检查了这些选项
JVM_OPTS="$JVM_OPTS -Djava.io.tmpdir=/home/tech/cassandra/tmp"
JVM_OPTS="$JVM_OPTS -Djava.io.tmpdir=/home/cassandra/tmp"
JVM_OPTS="$JVM_OPTS -Djava.io.tmpdir=/var/lib/cassandra/tmp"

甚至尝试过

JVM_OPTS="$JVM_OPTS -Dcassandra.boot_without_jna=true"

但问题没有改变。

我将 cassandra 记录器更改为 TRACE,但它显示的错误日志与之前没有 TRACE 相同。文件 (jna-4.0.0.jar) 存在于 lib 文件夹 (/usr/share/cassandra/lib) 中。我无法找到真正的原因。

不为我工作的原因如下:

  1. cassandra-env.sh 由服务器加载。 (如果加载了怎么查看,是否加载)

  2. 可能还有其他问题。

有人,请让我离开这里。

【问题讨论】:

  • 您能提供类路径详细信息吗?另外您使用的是哪个版本的 Java?
  • Java 1.8.0_45版本,不知道CLASS_PATH,如何获取?
  • /usr/share/cassandra 是类路径

标签: java cassandra jna


【解决方案1】:

最后是 jna-4.0.0.jar 的问题。

lib 中的文件 jna-4.0.0.jar 没有初始化,所以我通过创建指向 jna.jar 的符号链接来更改文件。

sudo yum install jna

sudo ln -s (JAVA_PATH)/usr/share/java/jna.jar (CASSANDRA_PATH)/usr/share/cassandra/lib

然后它产生了一些关于tmp的错误,用以前的解决方案解决了。

关于JNA,那边已经有一些问题了,但并不具体。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。清理/tmp文件夹或'-Djava.io.tmpdir'指向的文件夹(rm -rf *)

    【讨论】:

      【解决方案3】:

      升级 Java 后,Cassandra 无法启动。我修好了。

      1。 mkdir -p /var/lib/cassandra/tmp chown cassandra:cassandra /var/lib/cassandra/tmp

      2。 将以下参数添加到文件 /cassandra-env.sh 的末尾 JVM_OPTS="$JVM_OPTS -Djava.io.tmpdir=/var/lib/cassandra/tmp"

      然后重新启动 Cassandra。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-01
        • 1970-01-01
        • 2014-02-15
        • 2019-03-31
        • 2021-11-03
        • 2012-10-10
        • 2015-11-23
        • 2011-09-28
        相关资源
        最近更新 更多