Javaのサポート
Apache Cassandraのコンパイルおよび実行に使用するJavaバージョンのサポートマトリックスを表1に示します。ビルドバージョンは縦軸、実行バージョンは横軸に沿っています。
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
依存関係とともに、Apache Cassandra 5.0ソースコードをGitからダウンロードしてインストールします。
$ 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の起動時に、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 17でビルドされたコードをJava 11で実行すると、次のエラーメッセージが出力されます。
$ 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
...