Cannot initialize class org.xerial.snappy.Snappy
An error may occur when Snappy compression/decompression is enabled although its library is available from the classpath.
An error may occur when Snappy compression/decompression is enabled although its library is available from the classpath.
java.util.concurrent.ExecutionException: java.lang.NoClassDefFoundError: Could not initialize class org.xerial.snappy.Snappy ... Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.xerial.snappy.Snappy at org.apache.cassandra.io.compress.SnappyCompressor.initialCompressedBufferLength (SnappyCompressor.java:39)
The native library snappy-1.0.4.1-libsnappyjava.so for Snappy compression is included in the snappy-java-1.0.4.1.jar file. When the JVM initializes the JAR, the library is added to the default temp directory. If the default temp directory is mounted with a noexec option, it results in the above exception.
One solution is to specify a different temp directory that has already been mounted without the noexec option, as follows:
- If you use the DSE/Cassandra command $_BIN/dse cassandra or
$_BIN/cassandra, simply append the command line:
- DSE: bin/dse cassandra -t -Dorg.xerial.snappy.tempdir=/path/to/newtmp
- Cassandra: bin/cassandra -Dorg.xerial.snappy.tempdir=/path/to/newtmp
- If starting from a package using service dse start or service cassandra start, add a
system environment variable JVM_OPTS with the
value:
JVM_OPTS=-Dorg.xerial.snappy.tempdir=/path/to/newtmp
The default cassandra-env.sh looks for the variable and appends to it when starting the JVM.
Package installations | /etc/cassandra/cassandra-env.sh |
Tarball installations | install_location/conf/cassandra-env.sh |