Cassandra Failed to initialize class com.sun.jna.Native

I have Cassandra version 3.9 on CentOS 7. When I start Cassandra Server, I get an error, for example:

TRACE [MemtableFlushWriter: 1] 2017-05-15 04: 25: 49,735 LogTransaction.java:264 - Closing the transaction log [mc_txn_flush_3f6a46f0-3961-11e7-87b4-0728ea39fb0d.log in / var / lib / cassandra / data / system / local 7ad54392bcdd35a684174e047860b377]
ERROR [main] 2017-05-15 04: 25: 49,745 CassandraDaemon.java:747 - An exception occurred while starting java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.NoClassDefFoundError: failed to initialize class com.sun.jna.National 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∗41) ~ [apache-cassandra-3.9.0.jar: 3.9.0] at org. apache.cassandra.db.ColumnFamilyStore.invalidate (ColumnFamilyStore.java∗17) ~ [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/1308 Source) ~ [na: na] in java.lang.Iterable.forEach (Iterable.java:75) ~ [na: 1.8.0_45] in 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-Cassandra-3.9.0.jar: 3.9 .0]

There is a solution to this problem ( Error starting Cassandra on an ARM64 machine (java.lang.NoClassDefFoundError: failed to initialize class com.sun.jna.Native) ), Soultion suggests changes to cassandra-env.sh . I tried, but this does not work for me.

I checked these options (separately) in 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" 

even tried using

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

But no change in the problem.

And I changed cassandra logger to TRACE, but it shows the same error log as before TRACE. The file (jna-4.0.0.jar) is present in the lib folder (/ usr / share / cassandra / lib). I can not find the reason.

Reasons for me don't work:

  • cassandra-env.sh is loaded by the server. (If it loads, how can I check if it is loaded or not)

  • Perhaps another problem arose.

Someone, please let me go from here.

+5
source share
3 answers

Finally, the problem with jna-4.0.0.jar.

The jna-4.0.0.jar file in lib is not initialized, so I changed the file by creating a 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 

He then made some errors regarding tmp resolved by previous solutions.

As for JNA, there are already some questions, but they are not specific.

+3
source

I ran into the same problem. Clear (rm -rf *) the / tmp folder or the folder where '-Djava.io.tmpdir' points to

+1
source

After I updated Java, Cassandra could not start. I fixed it.

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

2. Add the following parameter to the end of the file /cassandra-env.sh JVM_OPTS = "$ JVM_OPTS -Djava.io.tmpdir = / var / lib / cassandra / tmp"

Then restarted Cassandra.

0
source

All Articles