2013-10-23 310 views
1

可能是什么这个异常卡桑德拉启动java.lang.reflect.InvocationTargetException

java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.xerial.snappy.SnappyLoader.loadNativeLibrary(SnappyLoader.java:322) 
at org.xerial.snappy.SnappyLoader.load(SnappyLoader.java:229) 
at org.xerial.snappy.Snappy.<clinit>(Snappy.java:48) 
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:359) 
at org.apache.cassandra.net.OutboundTcpConnection.run(OutboundTcpConnection.java:150) 
Caused by: java.lang.UnsatisfiedLinkError: /tmp/snappy-1.0.5-libsnappyjava.so: /tmp/snappy-1.0.5-libsnappyjava.so: failed to map segment from shared object: Operation not permitted 
at java.lang.ClassLoader$NativeLibrary.load(Native Method) 
at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1957) 
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1882) 
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1843) 
at java.lang.Runtime.load0(Runtime.java:795) 
at java.lang.System.load(System.java:1061) 
at org.xerial.snappy.SnappyNativeLoader.load(SnappyNativeLoader.java:39) 
... 11 more 
ERROR 11:46:22,430 Exception in thread Thread[WRITE-/172.20.6.138,5,main] 
org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] null 
at org.xerial.snappy.SnappyLoader.load(SnappyLoader.java:239) 
at org.xerial.snappy.Snappy.<clinit>(Snappy.java:48) 
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:359) 
at org.apache.cassandra.net.OutboundTcpConnection.run(OutboundTcpConnection.java:150) 

的解决办法,而卡桑德拉启动执行是继续。和在结束我收到异常

java.lang.IllegalStateException: Unable to contact any seeds! 
at org.apache.cassandra.service.StorageService.bootstrap(StorageService.java:947) 
at org.apache.cassandra.service.StorageService.joinTokenRing(StorageService.java:716) 
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:554) 
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:451) 
at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:347) 
at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:446) 
at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:489) 
Exception encountered during startup: Unable to contact any seeds! 

ERROR 11:55:11732异常在螺纹螺纹[StorageServiceShutdownHook,如图5所示,主]

java.lang.NullPointerException 
at org.apache.cassandra.service.StorageService.stopRPCServer(StorageService.java:321) 
at org.apache.cassandra.service.StorageService.shutdownClientServers(StorageService.java:370) 
at org.apache.cassandra.service.StorageService.access$000(StorageService.java:88) 
at org.apache.cassandra.service.StorageService$1.runMayThrow(StorageService.java:519) 
at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28) 
at java.lang.Thread.run(Thread.java:724) 

但种子节点都在运行。

机器防火墙被禁用。

我也试着改变默认的tmp目录。我尝试了包括JVM_OPTS = -Dorg.xerial.snappy.tempdir =/tmp到cassandra.in.sh文件,但问题仍然存在。

Linux版本2.6.32-358.6.1.el6.x86_64([email protected])(gcc版本4.4.7 20120313(Red Hat 4.4.7-3)(GCC)) #1 SMP周二4月23日19:29:00 UTC 2013

请帮助我..在此先感谢。

回答

2

他们在这里提到这个错误在卡桑德拉JIRA: https://issues.apache.org/jira/browse/CASSANDRA-4400

我有一个类似的错误与卡桑德拉1.2,和我通过与snappy 1.0.4.1更换活泼1.0.5库固定它。如果该链接不起作用,您应该能够从Cassandra的早期版本(如1.1.x)获取该链接。

基本上,从$CASSANDRA_HOME/lib目录中删除活泼,java.1.0.5.jar,并与活泼的Java-1.0.4.1.jar更换

2

我找到了答案在 http://mail-archives.apache.org/mod_mbox/cassandra-user/201312.mbox/%[email protected]%3E

写道由Erik

您可以添加这样的事情cassandra-env.sh:

JVM_OPTS = “$ JVM_OPTS -Dorg.xerial.snappy.tempdir = /路径/是/允许/可执行文件”

我创建在/ var/lib中/卡桑德拉/ tmp目录一个文件夹

,所以我说

JVM_OPTS = “$ JVM_OPTS -Dorg.xerial.snappy.tempdir =在/ var/lib中/卡桑德拉的/ tmp /”

希望这可以帮助某人