我们计划将我们的环境从Java8迁移到OpenJDK10。在本地计算机上执行此操作时,我发现cassandra将不再为我启动,并出现以下错误:
我在网上找不到任何可靠的信息,说它绝对不受支持。
这篇来自4个月前的帖子暗示他们不支持Java10,但没有说这一点得到证实,而且更具推测性。另一位用户对此也发表了评论,称他们已经成功地在Java11上运行了它。
datastax上关于这个问题的最后一条评论说:“我们已经更新了ci矩阵,以包含Java10,除了前面提到的osgi测试问题之外,其他一切都正常工作。”我不知道从中可以得到什么,但这似乎意味着它现在正与Java10一起工作,因为这个问题被标记为已解决。
这张票,他们讨论了对Java11的支持。有一些评论甚至讨论了支持java10的必要性,但它们并没有给出一个确切的答案,即是否支持java10。
最后,本博客讨论了一种让Java11与cassandra一起工作的方法。不过,我注意到它使用的是Cassandra4.0。这个已经正式发布了吗?我注意到在他们的网站上,他们说发布日期待定,并说目前稳定的版本是3.11.3,没有提到它在他们的兼容性页面。
我目前通过datastax在windows上安装了cassandra,但是我也尝试过克隆当前的git存储库并从那里运行它,但是我得到了相同的错误消息(尽管在他们的github上他们似乎说它只经过Java8测试)。
他们难道不支持10吗?另外,如果有人知道他们是否计划很快发布4.0,如果这肯定会支持11(我假设是10?),那将是一个巨大的帮助。
4条答案
按热度按时间zaq34kh61#
到目前为止,cassandra3.x将只适用于java8。Cassandra4.0支持Java8和Java11,但在撰写本文时它还没有发布。
如果您想在本地系统(不推荐用于生产)中使用Java11运行cassandra。然后您可以执行以下步骤:
先决条件:Java11、ApacheAnt、python
下载cassandra中继分支代码:https://github.com/apache/cassandra
解压缩文件并在终端/命令提示符下打开文件夹。
使用-duse.jdk11=true参数构建cassandra:
导航到bin文件夹并运行cassandra:
检查nodetool状态
运行cqlsh
iyr7buue2#
Cassandra4.0明确支持Java8和Java11。事实上,他们甚至将配置文件拆分为:
支持这些特定版本的原因有两个方面。首先,Java8已经成为cassandra事实上的标准好几年了。用户希望它在未来仍能在Java8上工作。
考虑到java新的6个月发布周期,当ApacheCassandra4.0问世时,Java9和Java10将不再是“最新的”。另外,在构建过程中运行的测试对于使用哪个版本的java表现得很挑剔。因此,决定支持Java8和Java11 for 4.0,因为Java9和Java10的优先级似乎较低。
这并不是说Cassandra4.0不会在Java9或Java10上运行。事实上,cassandra-9608甚至还提交了一个补丁,应该可以覆盖它。但事实上,java8之所以被包括进来,是因为它在cassandra用户群中的长期使用。Java11将是4.0发布时最新的jdk/jre。如果您想确保集群运行良好,我会从这两个集群中选择一个。
但在4.0之前,Java8的最新补丁实际上是唯一的选择。
krugob8w3#
已发布的cassandra版本只支持Java8—对更高版本的支持将出现在尚未发布的Cassandra4.0中。你可以追踪Cassandra-9608的进展
8gsdolmq4#
使用cassandra 3.11.4,我们可以用java 11执行cassandra引擎,但也有一些问题:
如果出于任何原因,您仍在使用cms进行垃圾收集,那么是时候转移到g1了;这是在
jvm.options
文件。同样在jvm.options中,您需要禁用
ThreadPriorityPolicy
因为它被Java9否决了使用Java9引入的gc活动的统一日志记录,您将需要在中删除特定于gc的参数
jvm.options
. 其中一些参数是:-xloggc公司
-xx:+打印详细信息
-xx:+打印日期戳
-xx:+printheapatgc公司
-xx:+印刷发行
-xx:+PrintGCApplicationsTopedTime
-xx:+printpromotionfailure打印升级失败
nodetool
仍然需要Java8才能执行。我们已经安装了jvm,并使用了其他方法将Java11设置为默认值。这也是java\u home变量的值
我们有一个名为java8\u home的新变量,它指向那个版本
我们更新了nodetool脚本(在我们的例子中是在/usr/bin/nodetool中),以便在设置java变量时使用java8\u home
对于正在使用
offheap_buffers
为了memtable_allocation_type
(定义见cassandra.yaml
),我们不得不把它改成offheap_objects