chi*_*kku 5 java jna cassandra
我在CentOS 7上使用Cassandra 3.9版.在启动Cassandra Server时,我收到的错误是这样的::
TRACE [MemtableFlushWriter:1] 2017-05-15 04:25:49,735 LogTransaction.java:264 - 在/ var/lib/cassandra/data/system/local中关闭事务日志[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:无法初始化在org.apache.cassandra的org.apache.cassandra.utils.FBUtilities.waitOnFuture(FBUtilities.java:403)〜[apache-cassandra-3.9.0.jar:3.9.0]中的类com.sun.jna.Native. 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] at org .apache.cassandra.db.ColumnFamil yStore.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] at org.apache.cassandra.schema.LegacySchemaMigrator $$ Lambda $ 93/1308179535.accept(Unknown Source)〜[na:na] at java.lang.Iterable.forEach (Iterable.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] 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-cass 的Andra-3.9.0.jar:3.9.0]
这个问题有一个解决方案(ARM64机器上的Cassandra Startup失败(java.lang.NoClassDefFoundError:无法初始化类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"
Run Code Online (Sandbox Code Playgroud)
甚至试过
JVM_OPTS="$JVM_OPTS -Dcassandra.boot_without_jna=true"
Run Code Online (Sandbox Code Playgroud)
但问题没有改变.
我将cassandra logger更改为TRACE,但它显示的错误日志与之前没有TRACE相同.文件(jna-4.0.0.jar)存在于lib文件夹(/ usr/share/cassandra/lib)中.我无法找到实际原因.
不为我工作的原因是:
cassandra-env.sh由服务器加载.(如果加载我如何检查,是否加载)
可能还有其他一些问题.
有人,请让我从这里出来.
最后是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
Run Code Online (Sandbox Code Playgroud)
然后它产生了一些关于tmp 的错误,用以前的解决方案解决了。
关于JNA,那边已经有一些问题,但不具体。