Cassandra 文档

版本

您正在查看预发布版本的文档。

Java 支持

表 1 详细说明了用于编译和运行 Apache Cassandra 的 Java 版本的支持矩阵。构建版本位于纵轴,运行版本位于横轴。

Java 支持矩阵

Java 11(运行)

Java 17(运行)

Java 11(构建)

支持

实验性支持

Java 17(构建)

不支持

CI 中的实验性

使用 Java 17 构建的 Apache 5.0 源代码无法使用 Java 11 运行。所有二进制发行版均使用 Java 11 构建。

使用 Java 11 构建

首先,安装 Java 11。例如,要在 RedHat Linux 上安装 Java 11,请运行以下命令

$ sudo yum install java-11-openjdk

设置环境变量 JAVA_HOMEPATH

$ export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
$ export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

从 Git 下载并安装 Apache Cassandra 5.0 源代码以及依赖项。

$ git clone https://github.com/apache/cassandra.git

如果 Cassandra 正在运行,请使用以下命令停止 Cassandra。

$ ./nodetool stopdaemon

从包含 build.xml 构建脚本的 cassandra 目录构建源代码。Apache Ant 使用 JAVA_HOME 环境变量中设置的 Java 版本。

$ cd ~/cassandra
$ ant

Apache Cassandra 5.0 使用 Java 11 构建。在 bash 脚本中设置 CASSANDRA_HOME 的环境变量。并将 CASSANDRA_HOME/bin 添加到 PATH 变量中。

$ export CASSANDRA_HOME=~/cassandra
$ export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$CASSANDRA_HOME/bin

要使用 Java 11 或 Java 17 运行 Apache Cassandra 5.0,请在 CASSANDRA_HOME/bin 目录中运行 Cassandra 应用程序,该目录位于 PATH 环境变量中。

$ cassandra

Cassandra 启动时,将输出用于运行 Cassandra 的 Java 版本。例如,如果使用 Java 11,则运行输出应包含类似于以下输出片段的内容

INFO  [main] 2019-07-31 21:18:16,862 CassandraDaemon.java:480 - Hostname: ip-172-30-3-
146.ec2.internal:7000:7001
INFO  [main] 2019-07-31 21:18:16,862 CassandraDaemon.java:487 - JVM vendor/version: OpenJDK
64-Bit Server VM/11.0.3
INFO  [main] 2019-07-31 21:18:16,863 CassandraDaemon.java:488 - Heap size:
1004.000MiB/1004.000MiB

以下输出表示单个节点 Cassandra 5.0 集群已启动。

INFO  [main] 2019-07-31 21:18:19,687 InboundConnectionInitiator.java:130 - Listening on
address: (127.0.0.1:7000), nic: lo, encryption: enabled (openssl)
...
...
INFO  [main] 2019-07-31 21:18:19,850 StorageService.java:512 - Unable to gossip with any
peers but continuing anyway since node is in its own seed list
INFO  [main] 2019-07-31 21:18:19,864 StorageService.java:695 - Loading persisted ring state
INFO  [main] 2019-07-31 21:18:19,865 StorageService.java:814 - Starting up server gossip
INFO  [main] 2019-07-31 21:18:20,088 BufferPool.java:216 - Global buffer pool is enabled,
when pool is exhausted (max is 251.000MiB) it will allocate on heap
INFO  [main] 2019-07-31 21:18:20,110 StorageService.java:875 - This node will not auto
bootstrap because it is configured to be a seed node.
...
...
INFO  [main] 2019-07-31 21:18:20,809 StorageService.java:1507 - JOINING: Finish joining ring
INFO  [main] 2019-07-31 21:18:20,921 StorageService.java:2508 - Node 127.0.0.1:7000 state
jump to NORMAL

使用 Java 17 构建

如果使用 Java 17 构建 Apache Cassandra 5.0,则必须先安装 Java 17 并设置环境变量。例如,要在 RedHat Linux 上下载并安装 Java 17,请运行以下命令。

$ yum install java-17-openjdk

设置环境变量 JAVA_HOMEPATH

$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
$ export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

构建输出现在应包含以下内容。

[echo] Non default JDK version used: 17
...
...
_build_java:
    [echo] Compiling for Java 17
...
...
build:

_main-jar:
         [copy] Copying 1 file to /home/ec2-user/cassandra/build/classes/main/META-INF
     [jar] Building jar: /home/ec2-user/cassandra/build/apache-cassandra-5.0-SNAPSHOT.jar
...
...
_build-test:
   [javac] Compiling 739 source files to /home/ec2-user/cassandra/build/test/classes
    [copy] Copying 25 files to /home/ec2-user/cassandra/build/test/classes
...
...
jar:
   [mkdir] Created dir: /home/ec2-user/cassandra/build/classes/stress/META-INF
   [mkdir] Created dir: /home/ec2-user/cassandra/build/tools/lib
     [jar] Building jar: /home/ec2-user/cassandra/build/tools/lib/stress.jar
   [mkdir] Created dir: /home/ec2-user/cassandra/build/classes/fqltool/META-INF
     [jar] Building jar: /home/ec2-user/cassandra/build/tools/lib/fqltool.jar

BUILD SUCCESSFUL
Total time: 1 minute 3 seconds

常见问题

使用 Java 17 构建的 Apache Cassandra 5.0 源代码只能使用 Java 17 运行。如果使用 Java 11 运行使用 Java 17 构建的代码,则会输出以下错误消息。

$ echo $JAVA_HOME
/usr/lib/jvm/java-11-openjdk
$ cassandra
...
...
Error: LinkageError occurred while loading main class org.apache.cassandra.service.CassandraDaemon
	java.lang.UnsupportedClassVersionError: org/apache/cassandra/service/CassandraDaemon has been compiled by a more
recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file
versions up to 55.0
...