2013-10-23 201 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 /」

希望這可以幫助某人