Cassandra无法初始化类com.sun.jna.Native

时间:2017-05-15 12:24:47

标签: java apache cassandra jna

我在CentOS 7上使用Cassandra 3.9版。 在启动Cassandra Server时,我收到了像这样的错误::

  

TRACE [MemtableFlushWriter:1] 2017-05-15 04:25:49,735 LogTransaction.java:264 - 在/ var / lib / cassandra / data /中关闭事务日志[mc_txn_flush_3f6a46f0-3961-11e7-87b4-0728ea39fb0d.log系统/本地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 at   org.apache.cassandra.utils.FBUtilities.waitOnFuture(FBUtilities.java:403)   〜[apache-cassandra-3.9.0.jar:3.9.0] at   org.apache.cassandra.db.SystemKeyspace.forceBlockingFlush(SystemKeyspace.java:793)   〜[apache-cassandra-3.9.0.jar:3.9.0] at   org.apache.cassandra.db.SystemKeyspace.removeTruncationRecord(SystemKeyspace.java:639)   〜[apache-cassandra-3.9.0.jar:3.9.0] at   org.apache.cassandra.db.ColumnFamilyStore.invalidate(ColumnFamilyStore.java:541)   〜[apache-cassandra-3.9.0.jar:3.9.0] at   org.apache.cassandra.db.ColumnFamilyStore.invalidate(ColumnFamilyStore.java:517)   〜[apache-cassandra-3.9.0.jar:3.9.0] at   org.apache.cassandra.schema.LegacySchemaMigrator.lambda $ unloadLegacySchemaTables $ 341(LegacySchemaMigrator.java:137)   〜[apache-cassandra-3.9.0.jar:3.9.0] at   org.apache.cassandra.schema.LegacySchemaMigrator $$ LAMBDA $ 93 / 1308179535.accept(未知   来源)〜[na:na]在java.lang.Iterable.forEach(Iterable.java:75)   〜[na:1.8.0_45] at   org.apache.cassandra.schema.LegacySchemaMigrator.unloadLegacySchemaTables(LegacySchemaMigrator.java:137)   〜[apache-cassandra-3.9.0.jar:3.9.0] at   org.apache.cassandra.schema.LegacySchemaMigrator.migrate(LegacySchemaMigrator.java:83)   〜[apache-cassandra-3.9.0.jar:3.9.0] at   org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:254)   [apache-cassandra-3.9.0.jar:3.9.0] at   org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:601)   [apache-cassandra-3.9.0.jar:3.9.0] at   org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:730)   [Apache的卡桑德拉-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 logger更改为TRACE,但它显示的错误日志与之前没有TRACE相同。文件(jna-4.0.0.jar)存在于lib文件夹(/ usr / share / cassandra / lib)中。我无法找到实际原因。

不为我工作的原因如下:

  1. cassandra-env.sh由服务器加载。 (如果它加载我如何检查,是否加载)

  2. 可能还有其他问题。

  3. 有人,请让我离开。

3 个答案:

答案 0 :(得分:3)

Finally the problem with jna-4.0.0.jar.

The file jna-4.0.0.jar in lib is not initializing, so I changed the file by creating symbolic link to jna.jar.

sudo yum install jna

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

Then It produced some errors regarding tmp, solved with previous solutions.

Regarding JNA, there are already some questions over there, but those are not specific.

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我升级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。