17076203字节的突变过大,最大大小为16777216

时间:2014-10-22 17:45:08

标签: cassandra datastax kairosdb

我有" commitlog_segment_size_in_mb:32"在cassandra设置中,但下面的错误表明最大大小是16777216,大约是16mb。我正在查看修正下面错误的正确设置吗?

根据http://mail-archives.apache.org/mod_mbox/cassandra-user/201406.mbox/%3C53A40144.2020808@gmail.com%3E

提供的建议,我指的是此设置

我正在使用2.1.0-2 for Cassandra。

我正在使用Kairosdb,写缓冲区最大大小为0.5Mb。

WARN  [SharedPool-Worker-1] 2014-10-22 17:31:03,163 AbstractTracingAwareExecutorService.java:167 - Uncaught exception on thread Thread[SharedPool-Worker-1,5,main]: {}
java.lang.IllegalArgumentException: Mutation of 17076203 bytes is too large for the maxiumum size of 16777216
        at org.apache.cassandra.db.commitlog.CommitLog.add(CommitLog.java:216) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.commitlog.CommitLog.add(CommitLog.java:203) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.Keyspace.apply(Keyspace.java:371) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.Keyspace.apply(Keyspace.java:351) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.Mutation.apply(Mutation.java:214) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.MutationVerbHandler.doVerb(MutationVerbHandler.java:54) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:62) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) ~[na:1.7.0_67]
        at org.apache.cassandra.concurrent.AbstractTracingAwareExecutorService$FutureTask.run(AbstractTracingAwareExecutorService.java:163) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:103) [apache-cassandra-2.1.0.jar:2.1.0]
        at java.lang.Thread.run(Thread.java:745) [na:1.7.0_67]

2 个答案:

答案 0 :(得分:9)

您正在查看.yaml中的正确参数。允许的最大写入大小C *是commit_log_segment_size_in_mb的一半,默认为32mb,因此默认的最大大小为16mb。

背景

commit_log_segment_size_in_mb表示提交日志归档或时间点备份的块大小。只有在commitlog_archiving.properties文件中配置了archive_command或restore_command时,这些才会处于活动状态。

答案 1 :(得分:3)

它的设置正确..这意味着Cassandra将丢弃此写入,因为它超过配置的提交日志段大小的50%。 因此,在集群中每个节点的Cassandra.yaml中设置参数commitlog_segment_size_in_mb:64,然后重新启动每个节点以使更改生效。

<强>原因: 根据设计意图,允许的最大段大小是配置的commit_log_segment_size_in_mb的50%。这是如此Cassandra避免编写具有大量空白空间的段。

详细说明;最多两个32MB的段可以容纳64MB,但是40MB只能容纳一次,留下更多的未使用空间。

来自datastax的参考链接:

  

https://support.datastax.com/hc/en-us/articles/207267063-Mutation-of-x-bytes-is-too-large-for-the-maxiumum-size-of-y-