Cassandra 1.2在FreeBSD上初始化Snappy失败。

7
ERROR [WRITE-/10.10.35.30] 2013-06-19 23:15:56,907 CassandraDaemon.java (line 175) Exception in thread Thread[WRITE-/10.10.35.30,5,main]
java.lang.NoClassDefFoundError: Could not initialize class org.xerial.snappy.Snappy
    at org.xerial.snappy.SnappyOutputStream.<init>(SnappyOutputStream.java:79)
    at org.xerial.snappy.SnappyOutputStream.<init>(SnappyOutputStream.java:66)
    at org.apache.cassandra.net.OutboundTcpConnection.connect(OutboundTcpConnection.java:341)
    at org.apache.cassandra.net.OutboundTcpConnection.run(OutboundTcpConnection.java:143)

在查找已知问题时,我发现以下内容:snappy-java-1.0.4.1.jar 文件中包括用于Snappy压缩的原生库 snappy-1.0.4.1-libsnappyjava.so。当JVM初始化该JAR时,该库会被添加到默认临时目录中。如果默认临时目录被挂载为 noexec 选项,则会导致上述异常。
我在 cassandra.in.sh 中添加了 JVM_OPTS=-Dorg.xerial.snappy.tempdir=/tmp,但仍然无法解决问题。我还尝试直接指定临时目录。
./bin/cassandra -Dorg.xerial.snappy.tempdir=/tmp

在同一台机器上,Cassandra版本1.0.12运行良好。

任何帮助都将不胜感激。


1
你是在单节点上运行这个东西吗?如果是的话,可以进入cassandra.yaml文件并将internode_compression更改为none,然后重新启动服务器。 - abhi
我在RHEL5.9上使用EmbeddedCassandra运行集成测试时遇到了同样的问题,但是abhi建议的修复方法解决了这个问题。谢谢! - Eemeli Kantola
2个回答

5

问题在于Cassandra所带的snappy JAR文件中没有包含FreeBSD库。需要安装archivers/snappy-java端口,删除Cassandra所带的snappy-java JAR文件,将/usr/local/share/java/classes/snappy-java.jar复制到Cassandra的lib目录中。


2
尝试在FreeBSD上启用apache kafka 0.8的snappy压缩时遇到了同样的问题,但解决方案是相同的。只需将/usr/local/share/java/classes/snappy-java.jar复制到kafka/src/core/target/scala-2.8.0目录中,重新启动kafka并享受吧!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接