Cassandra是否支持Java 10?

时间:2018-09-14 15:04:07

标签: apache cassandra datastax java-10

我们正计划将环境从Java 8迁移到OpenJDK10。在我的本地计算机上这样做,我发现Cassandra将不再为我启动,并出现以下错误:

enter image description here

我找不到任何可靠的在线信息,说它绝对不受支持。

4个月前的

This post表明他们不支持Java 10,但没有说它得到证实,并且可以推断出更多。另一位用户对此也发表了评论,说他们已经设法使其在Java 11上运行。

关于this ticket的datastax的最终评论说:“我们已经更新了CI矩阵,使其包含Java 10,并且除上述OSGi测试问题外,其他所有东西都可以使用。”我不确定该如何解决,但似乎暗示它已在Java 10上运行,因为该票证被标记为已解决。

This ticket,他们讨论了对Java 11的支持。有几条评论讨论了甚至需要支持Java 10的必要性,但是他们并没有就是否支持Java 10给出确切的答案。

最后this blog讨论了一种使Java 11与cassandra一起使用的方法。但是我注意到这是使用Cassandra 4.0。这个正式发布了吗?我在他们的website上注意到他们说发布日期是tbd,并说当前的稳定版本是3.11.3,在他们的compatibility page中没有提及它。

我目前通过Datastax在Windows上安装了Cassandra,但是我也尝试了克隆当前的git仓库并从那里运行它,但是我收到了同样的错误消息(尽管他们确实在github上说确实已经过测试) Java 8)。

那么他们是否根本不支持10个?另外,如果有人知道他们是否计划很快发布4.0,并且如果该版本肯定支持11(我认为是10?),那将是巨大的帮助。

3 个答案:

答案 0 :(得分:13)

Cassandra 4.0对Java 8和Java 11都有明确的支持。实际上,它们甚至将配置文件分成以下几个部分:

$ pwd
/Users/aaron/local/apache-cassandra-4.0-SNAPSHOT/conf
$ ls -a jvm*
jvm-clients.options jvm11-clients.options   jvm8-clients.options
jvm-server.options  jvm11-server.options    jvm8-server.options

支持这些特定版本的原因有两个。首先,几年来Java 8已经成为Cassandra的实际标准。用户期望它将来仍可在Java 8上运行。

鉴于Java的新发布周期为6个月,因此Apache Cassandra 4.0发行后,Java 9和Java 10将不再是“当前”。另外,在构建过程中运行的测试表明,他们选择使用哪种Java版本。因此,决定要支持Java 8和11 for 4.0,因为Java 9和10的工作似乎没有那么重要了。

这并不是说Cassandra 4.0不会在Java 9或10上运行。实际上,CASSANDRA-9608甚至提交了一个补丁,该补丁应 它。但是事实仍然存在,因为Java 8已在Cassandra用户群中长期使用。 Java 11将在4.0发行时成为当前的JDK / JRE。如果您想确保您的集群能够正常运行,我会选择这两个集群之一。

但是直到4.0,Java 8的最新补丁才真正是唯一的选择。

答案 1 :(得分:0)

使用Cassandra 3.11.4,我们已经能够使用Java 11执行Cassandra引擎,但是有一些陷阱:

  • 如果出于任何原因您仍在使用CMS进行垃圾收集,那么现在是时候移至G1了;这是在jvm.options文件中设置的。
  • 在jvm.options中,您还需要禁用Java 9不推荐使用的ThreadPriorityPolicy
  • 使用Java 9引入的gc活动的统一日志记录,您将需要在jvm.options中删除gc特定参数。其中一些参数是:
    • -Xloggc
    • -XX:+ PrintGCDetails
    • -XX:+ PrintGCDateStamps
    • -XX:+ PrintHeapAtGC
    • -XX:+ PrintTenuringDistribution
    • -XX:+ PrintGCApplicationStoppedTime
    • -XX:+ PrintPromotionFailure
  • nodetool仍然需要Java 8才能执行。

    • 我们已经安装了JVM,并使用替代方法将Java 11设置为默认值。这也是JAVA_HOME变量的值
    • 我们有一个名为JAVA8_HOME的新变量,它指向该版本
    • 我们更新了nodetool脚本(在本例中为/ usr / bin / nodetool中),以在设置JAVA变量时使用JAVA8_HOME
  • 对于将offheap_buffers用于memtable_allocation_type(在cassandra.yaml中定义)的集群,我们必须将其更改为使用offheap_objects

答案 2 :(得分:0)

到目前为止,Cassandra 3.x仅适用于Java8。Cassandra 4.0支持Java 8和Java 11,但在编写此答案时尚未发布。

如果要使用Java 11在本地系统(不建议用于生产)中运行Cassandra,则可以执行以下步骤:

  

先决条件:Java 11,Apache Ant,Python

  1. 下载Cassandra中继分支代码:https://github.com/apache/cassandra

  2. 解压缩文件并在终端/命令提示符下打开文件夹。

  3. 使用-Duse.jdk11 = true参数构建cassandra:
ajit-soman@ajitsoman-X542BA:~/Downloads/cassandra-trunk$ ant -Duse.jdk11=true
Buildfile: /home/ajit-soman/Downloads/cassandra-trunk/build.xml
   [script] Warning: Nashorn engine is planned to be removed from a future JDK release
...
...
jar:
[mkdir] Created dir: /home/ajit-soman/Downloads/cassandra-trunk/build/classes/stress/META-INF
[mkdir] Created dir: /home/ajit-soman/Downloads/cassandra-trunk/build/tools/lib
  [jar] Building jar: /home/ajit-soman/Downloads/cassandra-trunk/build/tools/lib/stress.jar
[mkdir] Created dir: /home/ajit-soman/Downloads/cassandra-trunk/build/classes/fqltool/META-INF
  [jar] Building jar: /home/ajit-soman/Downloads/cassandra-trunk/build/tools/lib/fqltool.jar

BUILD SUCCESSFUL
Total time: 7 minutes 38 seconds
  1. 导航到bin文件夹并运行Cassandra:
ajit-soman@ajitsoman-X542BA:~/Downloads/cassandra-trunk/bin$ ./cassandra 
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
CompileCommand: dontinline
  1. 检查nodetool的状态
ajit-soman@ajitsoman-X542BA:~/Downloads/cassandra-trunk/bin$ ./nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load      Tokens  Owns (effective)  Host ID                               Rack 
UN  127.0.0.1  5.79 KiB  256     100.0%            68687cfd-a80b-45db-93cd-7bc2d212a64b  rack1
  1. 运行cqlsh
ajit-soman@ajitsoman-X542BA:~/Downloads/cassandra-trunk/bin$ ./cqlsh 
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 4.0-alpha2-SNAPSHOT | CQL spec 3.4.5 | Native protocol v4]
Use HELP for help.
cqlsh>