5

I am having Cassandra version 3.9 on CentOS 7. While starting Cassandra Server, I'm getting error like this::

TRACE [MemtableFlushWriter:1] 2017-05-15 04:25:49,735 LogTransaction.java:264 - Closing 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 - 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-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(Unknown Source) ~[na:na] at 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-cassandra-3.9.0.jar:3.9.0]

There is a solution to this problem (Cassandra Startup failure on ARM64 machine (java.lang.NoClassDefFoundError: Could not initialize class com.sun.jna.Native) ), Soultion suggests changes in cassandra-env.sh. I tried it but it is not working for me.

I checked with 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 with

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

But no change in the problem.

And I changed cassandra logger to TRACE, but it is showing the same error log as before there was no TRACE. The file(jna-4.0.0.jar) is present in lib folder (/usr/share/cassandra/lib). I am unable to find what the actual reason is.

The reasons for not working for me are like:

  1. cassandra-env.sh is loaded by server. (If it loading how do I check, whether it is loaded or not)

  2. There might be some other problem.

Someone, Please let me out from this.

Vadim Kotov
  • 8,084
  • 8
  • 48
  • 62
chikku
  • 863
  • 1
  • 7
  • 19

4 Answers4

4

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.

chikku
  • 863
  • 1
  • 7
  • 19
1

I faced the same problem. Clean up (rm -rf *) of the /tmp folder or the folder which '-Djava.io.tmpdir' points to

Vinod Jayachandran
  • 3,726
  • 8
  • 51
  • 88
0

After I upgraded Java, the Cassandra couldn't start. I fixed it by.

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

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

Then restarted Cassandra.

Richardhe2007
  • 379
  • 2
  • 3
0

For those of the future...

I see the NoClassDefFound in the system.log file.

I tried the tmp changes to no avail. Then I looked at

sudo journalctl -u cassandra.service

And I see

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

So that my be helpful to look at.