我在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)中。我无法找到实际原因。
不为我工作的原因如下:
cassandra-env.sh由服务器加载。 (如果它加载我如何检查,是否加载)
可能还有其他问题。
有人,请让我离开。
答案 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。