繁体   English   中英

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

[英]Cassandra Could not initialize class com.sun.jna.Native

我在 CentOS 上安装了 Cassandra 3.9 版 7. 启动 Cassandra 服务器时,出现如下错误:

TRACE [MemtableFlushWriter:1] 2017-05-15 04:25:49,735 LogTransaction.java:264 - 关闭事务日志 [mc_txn_flush_3f6a46f0-3961-11e7-87b4-0728ea39fb0d.log in /var/libdata/system/cassandra -7ad54392bcdd35a684174e047860b377]
ERROR [main] 2017-05-15 04:25:49,745 CassandraDaemon.java:747 - Exception encountered during startup java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.NoClassDefFoundError: Could not initialize class 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.db.ColumnFamilyStore.invalidate(ColumnFamilyStore.java:541) ~[apache-cassandra-3.9.0.jar:3.9.0] at org.apache.cassandra.db.ColumnFamilyStore.invalidate(Column FamilyStore.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] 在 org.apache.cassandra.schema.LegacySchemaMigrator$$Lambda$93/1308179535.accept(未知来源)~[na:na] 在 java.lang.Iterable.forEach(Iterable.882138284674)8[na:na] .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.服务 e.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-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. 可能还有其他问题。

有人,请让我离开这里。

最后是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,那里已经存在一些问题,但这些问题并不具体。

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

升级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”

然后重新启动了卡桑德拉。

对于那些未来...

我在 system.log 文件中看到了 NoClassDefFound。

我尝试了 tmp 更改无济于事。 然后我看了看

sudo journalctl -u cassandra.service

我明白了

/etc/cassandra/cassandra-env.sh: Syntax error: Unterminated quoted string

以便于我查看。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM