【问题标题】:Cassandra nodetool java.lang.NullPointerExceptionCassandra nodetool java.lang.NullPointerException
【发布时间】:2018-06-20 00:13:49
【问题描述】:

当我运行命令$ nodetool help 时,出现以下错误;

java.lang.NullPointerException
  at org.apache.cassandra.config.DatabaseDescriptor.getDiskFailurePolicy(DatabaseDescriptor.java:1877)
  at org.apache.cassandra.utils.JVMStabilityInspector.inspectThrowable(JVMStabilityInspector.java:62)
  at org.apache.cassandra.io.util.FileUtils.<clinit>(FileUtils.java:79)
  at org.apache.cassandra.utils.FBUtilities.getToolsOutputDirectory(FBUtilities.java:807)
  at org.apache.cassandra.tools.NodeTool.printHistory(NodeTool.java:199)
  at org.apache.cassandra.tools.NodeTool.main(NodeTool.java:167)

如果有人有任何提示,请告诉我。

【问题讨论】:

  • 如果您至少可以指定您正在使用的 Cassandra 版本会有所帮助
  • 您是否使用与您正在运行的 C* 一起提供的相同版本的 nodetool?
  • 没关系。我在本地运行命令。我有人 ssh 进入集群并且它工作了
  • @PayalZilaro 请在下面添加您的答案,这样就不会显示为未决问题。

标签: cassandra nullpointerexception nodetool


【解决方案1】:

我遇到了同样的错误。

我建议你也使用 java 7 或 8(未测试 7),而不是 java 9 或 10。

$ java -version # java 8

java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

$ java --version # java 9

java 9.0.4
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)

$ nodetool # java 9

error: null
-- StackTrace --
java.lang.NullPointerException
    at org.apache.cassandra.config.DatabaseDescriptor.getDiskFailurePolicy(DatabaseDescriptor.java:1881)
    at org.apache.cassandra.utils.JVMStabilityInspector.inspectThrowable(JVMStabilityInspector.java:82)
    at org.apache.cassandra.io.util.FileUtils.<clinit>(FileUtils.java:79)
    at org.apache.cassandra.utils.FBUtilities.getToolsOutputDirectory(FBUtilities.java:788)
    at org.apache.cassandra.tools.NodeTool.printHistory(NodeTool.java:200)
    at org.apache.cassandra.tools.NodeTool.main(NodeTool.java:168)

我假设 cassandra 代码尝试在某处解析 java 版本并且不处理最新的 java 版本

【讨论】:

    【解决方案2】:

    我可以在 Ubuntu 18.4 上通过降级默认的 java 版本来解决它:

    sudo update-alternatives --config 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
    

    现在只需选择 java 版本 8。您可以尝试使用 java -version 是否一切正常。

    【讨论】:

      【解决方案3】:

      我遇到了同样的错误,但您可以通过明确指定配置来解决它:

      JAVA_HOME="/opt/java/my-java"
      PATH="$JAVA_HOME/bin:$PATH"
      
      # run the node tool
      CASSANDRA_CONF=/path/tocassandra/conf.d \
        JAVA_TOOL_OPTIONS= \
        JAVA_HOME=/opt/java/my-java \
        ./bin/nodetool status
      

      HTH

      【讨论】:

      • 太棒了!我还想补充一点,从 Ubuntu Bionic 上的 Cassandra 3.11.4 开始,覆盖 JVM 的正确脚本将是“/usr/share/cassandra/cassandra.in.sh”。谢谢老哥!
      • 您使用的 java 版本是什么?尝试使用 java 13 并得到相同的错误。 Cassandra 4.x 将添加 java 11 兼容性,但目前无法使用 nodetool。
      • 我用的是adaptopenjdk-openj9。我认为目前只支持热点虚拟机。您可以尝试其中一种(Oracle openjdk。采用openjdk-hotspot、Amazon Corretto 等)。
      【解决方案4】:

      如果你想运行帮助命令然后移动到Cassandra的bin目录,然后运行以下命令-

      ./nodetool help
      

      【讨论】:

        猜你喜欢
        • 2017-05-19
        • 2015-06-03
        • 2016-10-07
        • 1970-01-01
        • 1970-01-01
        • 2016-02-02
        • 2023-04-10
        • 2014-08-24
        • 1970-01-01
        相关资源
        最近更新 更多