【问题标题】:Does Cassandra support Java 10?Cassandra 是否支持 Java 10?
【发布时间】:2019-02-19 10:11:58
【问题描述】:

我们计划将我们的环境从 Java 8 迁移到 OpenJDK 10。在我的本地计算机上执行此操作后,我发现 Cassandra 将不再为我启动,并出现以下错误:

我在网上找不到任何可靠的信息表明它绝对不受支持。

This post 从 4 个月前开始暗示他们不支持 Java 10,但没有说已确认,而是更多推断。另一位用户也对此发表了评论,称他们已设法使其在 Java 11 上运行。

datastax 上this ticket 的最终评论说:“我们已经更新了 CI 矩阵以包含 Java 10,并且除了上述 OSGi 测试问题外,一切正常。”我不确定要从中删除什么,但这似乎暗示它现在正在使用 Java 10,因为票证被标记为已解决。

This ticket,他们讨论了对 Java 11 的支持。有一些 cmets 讨论甚至需要支持 Java 10,但他们并没有真正给出是否会支持的明确答案。

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

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

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

【问题讨论】:

    标签: cassandra java-10


    【解决方案1】:

    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 版本很挑剔。因此,我们决定在 4.0 中支持 Java 8 和 11,因为 Java 9 和 10 的工作似乎是次要的。

    这并不是说 Cassandra 4.0 不会在 Java 9 或 10 上运行。事实上,CASSANDRA-9608 甚至提交了一个 应该 覆盖它的补丁。但事实上,Java 8 被包含在内是因为它在 Cassandra 用户群中的长期使用。 Java 11 将是 4.0 版本时的当前 JDK/JRE。如果您想确保您的集群运行良好,我会选择这两个中的一个。

    但在 4.0 之前,Java 8 的最新补丁确实是唯一的选择。

    【讨论】:

    • 好的,谢谢您的回复!你知道他们计划什么时候发布 4.0 吗?
    • @user3275​​784 目前 4.0 分支上的代码冻结,社区目前专注于 QA。没有将发布日期设置为关注质量而不是快速发布。我的一个非常粗略的猜测是 2019 年第二季度,但现在很难说。如果您对更新感兴趣,您应该关注用户列表:cassandra.apache.org/community
    【解决方案2】:

    使用 Cassandra 3.11.4,我们已经能够使用 Java 11 执行 Cassandra 引擎,但存在一些问题:

    • 如果出于任何原因您仍在使用 CMS 进行垃圾收集,那么是时候转移到 G1 了;这是在jvm.options 文件中设置的。
    • 同样在 jvm.options 中,您需要禁用 ThreadPriorityPolicy,因为它已被 Java 9 弃用
    • 使用 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

    【讨论】:

    • 另外,我注释掉了所有与日志相关的选项,例如 -XX:+UseGCLogFileRotation!
    【解决方案3】:

    已发布的 Cassandra 版本仅支持 Java 8 - 对更高版本的支持将在尚未发布的 Cassandra 4.0 中提供。您可以在CASSANDRA-9608中跟踪进度

    【讨论】:

      【解决方案4】:

      截至目前,Cassandra 3.x 仅适用于 Java 8。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. 检查节点工具状态
      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> 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-13
        • 1970-01-01
        • 1970-01-01
        • 2016-08-27
        • 1970-01-01
        • 1970-01-01
        • 2020-07-30
        • 2019-01-23
        相关资源
        最近更新 更多