Cassandra 文件

版本

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

Java 支援

用于编译和运行 Apache Cassandra 的 Java 版本支持矩阵详见表 1。构建版本沿垂直轴,运行版本沿水平轴。

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,请在 PATH 环境变量中的 CASSANDRA_HOME/bin 目录中运行 Cassandra 应用程序。

$ cassandra

用於執行 Cassandra 的 Java 版本會在 Cassandra 開始執行時輸出。例如,如果使用 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
...