首页 > 解决方案 > 在 Cassandra 中使用 sstabledump 时 /tmp 挂载为 noexec 时出现 java.lang.UnsatisfiedLinkError

问题描述

我收到以下错误

/opt/apache-cassandra-3.0.15/tools/bin/sstabledump mc-41-big-Data.db
ERROR 15:02:20 Failed to link the C library against JNA. Native methods will be unavailable.
java.lang.UnsatisfiedLinkError: /tmp/jna--694687132/jna5914196415835358399.tmp: /tmp/jna--694687132/jna5914196415835358399.tmp: failed to map segment from shared object: Operation not permitted
    at java.lang.ClassLoader$NativeLibrary.load(Native Method) ~[na:1.8.0_282]
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1934) ~[na:1.8.0_282]
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1817) ~[na:1.8.0_282]
    at java.lang.Runtime.load0(Runtime.java:810) ~[na:1.8.0_282]
    at java.lang.System.load(System.java:1088) ~[na:1.8.0_282]
    at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:761) ~[jna-4.0.0.jar:4.0.0 (b2)]
    at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:736) ~[jna-4.0.0.jar:4.0.0 (b2)]
    at com.sun.jna.Native.<clinit>(Native.java:131) ~[jna-4.0.0.jar:4.0.0 (b2)]
    at org.apache.cassandra.utils.NativeLibraryLinux.<clinit>(NativeLibraryLinux.java:53) ~[apache-cassandra-3.0.15.jar:3.0.15]
    at org.apache.cassandra.utils.NativeLibrary.<clinit>(NativeLibrary.java:86) [apache-cassandra-3.0.15.jar:3.0.15]
    at org.apache.cassandra.utils.UUIDGen.hash(UUIDGen.java:363) [apache-cassandra-3.0.15.jar:3.0.15]
    at org.apache.cassandra.utils.UUIDGen.makeNode(UUIDGen.java:342) [apache-cassandra-3.0.15.jar:3.0.15]
    at org.apache.cassandra.utils.UUIDGen.makeClockSeqAndNode(UUIDGen.java:291) [apache-cassandra-3.0.15.jar:3.0.15]
    at org.apache.cassandra.utils.UUIDGen.<clinit>(UUIDGen.java:42) [apache-cassandra-3.0.15.jar:3.0.15]
    at org.apache.cassandra.config.CFMetaData$Builder.build(CFMetaData.java:1399) [apache-cassandra-3.0.15.jar:3.0.15]
    at org.apache.cassandra.tools.SSTableExport.metadataFromSSTable(SSTableExport.java:122) [apache-cassandra-3.0.15.jar:3.0.15]
    at org.apache.cassandra.tools.SSTableExport.main(SSTableExport.java:180) [apache-cassandra-3.0.15.jar:3.0.15]
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.cassandra.utils.NativeLibraryLinux.getpid()J
    at org.apache.cassandra.utils.NativeLibraryLinux.getpid(Native Method)
    at org.apache.cassandra.utils.NativeLibraryLinux.callGetpid(NativeLibraryLinux.java:122)
    at org.apache.cassandra.utils.NativeLibrary.getProcessID(NativeLibrary.java:391)
    at org.apache.cassandra.utils.UUIDGen.hash(UUIDGen.java:363)
    at org.apache.cassandra.utils.UUIDGen.makeNode(UUIDGen.java:342)
    at org.apache.cassandra.utils.UUIDGen.makeClockSeqAndNode(UUIDGen.java:291)
    at org.apache.cassandra.utils.UUIDGen.<clinit>(UUIDGen.java:42)
    at org.apache.cassandra.config.CFMetaData$Builder.build(CFMetaData.java:1399)
    at org.apache.cassandra.tools.SSTableExport.metadataFromSSTable(SSTableExport.java:122)
    at org.apache.cassandra.tools.SSTableExport.main(SSTableExport.java:180)

jna.tmpdir=/data/cassandra/tmp根据我在 stacker 中找到的一些帖子添加了,但它仍然出现相同的错误。有什么建议吗?

标签: javacassandra

解决方案


在 bash 配置文件中创建一个条目>>>

 export JVM_OPTS="$JVM_OPTS -Djna.tmpdir=/var/lib/cassandra/tmp"
 

然后为立即生效,请执行以下 source 命令:

source ~/.bash_profile

还请在“var/lib/cassandra/”中创建一个具有用户访问/所有权的目录“tmp”。

上述解决方案对我有用。


推荐阅读