【问题标题】:Unable to access Cassandra NoSQL DB after installation安装后无法访问 Cassandra NoSQL DB
【发布时间】:2022-03-23 15:11:54
【问题描述】:

我在 My Ubuntu 20.04 中安装了 Cassandra 稳定版。 Java JDK 11 是我的默认版本。 当我运行以下代码时,出现以下错误。

(base) vijee@vijee-Lenovo-IdeaPad-S510p:~$ sudo nodetool status
ERROR 13:18:40,031 Cannot initialize un-mmaper.  (Are you using a non-Oracle JVM?)  Compacted data files will not be removed promptly.  Consider using an Oracle JVM or using standard disk access mode
java.lang.NoSuchMethodError: 'sun.misc.Cleaner sun.nio.ch.DirectBuffer.cleaner()'
    at org.apache.cassandra.io.util.FileUtils.<clinit>(FileUtils.java:75) ~[apache-cassandra-3.11.9.jar:3.11.9]
    at org.apache.cassandra.utils.FBUtilities.getToolsOutputDirectory(FBUtilities.java:880) ~[apache-cassandra-3.11.9.jar:3.11.9]
    at org.apache.cassandra.tools.NodeTool.printHistory(NodeTool.java:216) ~[apache-cassandra-3.11.9.jar:3.11.9]
    at org.apache.cassandra.tools.NodeTool.execute(NodeTool.java:184) ~[apache-cassandra-3.11.9.jar:3.11.9]
    at org.apache.cassandra.tools.NodeTool.main(NodeTool.java:56) ~[apache-cassandra-3.11.9.jar:3.11.9]
error: null
-- StackTrace --
java.lang.NullPointerException
    at org.apache.cassandra.config.DatabaseDescriptor.getDiskFailurePolicy(DatabaseDescriptor.java:1975)
    at org.apache.cassandra.utils.JVMStabilityInspector.inspectThrowable(JVMStabilityInspector.java:102)
    at org.apache.cassandra.utils.JVMStabilityInspector.inspectThrowable(JVMStabilityInspector.java:60)
    at org.apache.cassandra.io.util.FileUtils.<clinit>(FileUtils.java:81)
    at org.apache.cassandra.utils.FBUtilities.getToolsOutputDirectory(FBUtilities.java:880)
    at org.apache.cassandra.tools.NodeTool.printHistory(NodeTool.java:216)
    at org.apache.cassandra.tools.NodeTool.execute(NodeTool.java:184)
    at org.apache.cassandra.tools.NodeTool.main(NodeTool.java:56)

我的系统中有以下 Java 版本可用。

 (base) vijee@vijee-Lenovo-IdeaPad-S510p:~/Downloads/youtubevideos$ sudo update-alternatives --config java
There are 2 choices for alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      manual mode
* 2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode

我知道 Cassandra 将仅支持 JDK 8。在一些博客中,他们说我们可以将 Java 8 分配为 Cassandra 的 JAVA_HOME。我应该在哪里为 Cassandra 更改 JAVA_HOME? 我已经在 .bashrc 中将 JAVA_HOME 设置为 JDK 8 以安装 Hadoop。

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH="$PATH:$JAVA_HOME/bin"
export PATH="/home/vijee/anaconda3/bin:$PATH"

export HADOOP_HOME=/home/vijee/hadoop-2.7.7
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH="$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin"
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"

在博客中,每个人都给出了不同的解决方案?我对此很困惑。

  1. 我应该做哪些更改才能访问 Cassandra?或
  2. 我可以安装 Cassandra 4(测试版)吗?

【问题讨论】:

    标签: cassandra cassandra-3.0


    【解决方案1】:

    我在 Ubuntu 20.04 中使用 Debian 安装 Cassandra 3.11 时遇到了同样的问题。这是我的环境路径设置:

    我通过sudo update-alternatives 将我的默认JVM 设置为Java 8 解决了这个问题。然后我执行sudo systemctl restart cassandra之后就可以连接成功了。

    如果您检查 cassandra-env.sh 的内容,看起来它指向的是 java -version 返回的 JVM 版本。因此,如果它返回版本 11,您的 Cassandra 将无法运行。

    【讨论】:

    • 我更改了 java 版本,然后我重新启动了 Cassandra,然后它正在运行,过了一会儿当我检查状态时,它变成了 Active: active (exited)。它不再运行了。
    【解决方案2】:

    ubuntu18 安装指南guide

    操作系统:ubuntu18

    通过apt安装Cassandra 3.11后,再执行

    nodetool status
    

    错误 14:58:47,350 无法初始化 un-mmaper。 (您使用的是非 Oracle JVM 吗?)压缩的数据文件不会被立即删除。考虑使用 Oracle JVM 或使用标准磁盘访问模式 java.lang.NoSuchMethodError: 'sun.misc.Cleaner sun.nio.ch.DirectBuffer.cleaner()' 在 org.apache.cassandra.io.util.FileUtils.(FileUtils.java:75) 在 org.apache.cassandra.utils.FBUtilities.getToolsOutputDirectory(FBUtilities.java:880) 在 org.apache.cassandra.tools.NodeTool.printHistory(NodeTool.java:216) 在 org.apache.cassandra.tools.NodeTool.execute(NodeTool.java:184) 在 org.apache.cassandra.tools.NodeTool.main(NodeTool.java:56) 错误:空 - 堆栈跟踪 - java.lang.NullPointerException 在 org.apache.cassandra.config.DatabaseDescriptor.getDiskFailurePolicy(DatabaseDescriptor.java:2001) 在 org.apache.cassandra.utils.JVMStabilityInspector.inspectThrowable(JVMStabilityInspector.java:102) 在 org.apache.cassandra.utils.JVMStabilityInspector.inspectThrowable(JVMStabilityInspector.java:60) 在 org.apache.cassandra.io.util.FileUtils.(FileUtils.java:81) 在 org.apache.cassandra.utils.FBUtilities.getToolsOutputDirectory(FBUtilities.java:880) 在 org.apache.cassandra.tools.NodeTool.printHistory(NodeTool.java:216) 在 org.apache.cassandra.tools.NodeTool.execute(NodeTool.java:184) 在 org.apache.cassandra.tools.NodeTool.main(NodeTool.java:56)

    修复步骤

    sudo apt install openjdk-8-jdk
    sudo update-alternatives --config java
    

    输入选择编号 喜欢 2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 手动模式

    java -version
    

    openjdk 版本“1.8.0_312”...

    sudo systemctl restart cassandra
    nodetool status
    

    【讨论】:

      【解决方案3】:

      假设 Cassandra 已经在运行,检查两个文件:

      CASSANDRA_HOME/bin/nodetool
      CASSANDRA_HOME/conf/cassandra-env.sh
      

      nodetool 中查看程序流程。我认为它会检查JAVA_HOME 是否在之前cassandra-env.sh 中提取变量。

      您当然可以尝试 Cassandra 4,它应该可以很好地与 Java 11 配合使用。请注意它处于测试阶段。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-03
        • 1970-01-01
        • 1970-01-01
        • 2014-05-03
        • 2021-02-04
        • 1970-01-01
        • 1970-01-01
        • 2017-05-13
        相关资源
        最近更新 更多