Java 支持
表 1 详细说明了用于编译和运行 Apache Cassandra 的 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_HOME
和 PATH
。
$ 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_HOME
和 PATH
。
$ 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
...