2016-11-16 22 views
1

我得到這些錯誤:卡桑德拉突變過大,對於小插入

java.lang.IllegalArgumentException異常:16.000MiB的突變是用於16.000MiB

在Apache的卡桑德拉3的最大尺寸過大。X。我正在做4MB或8MB的blob插入,但沒有大於8MB的插入。我爲什麼要達到16MB的限制? Cassandra是否正在分批寫入(插入)並創建一個過大的「突變」? (如果是這樣,爲什麼會這麼做,因爲配置的限制爲8MB?)

上有突變的小文件 - 只是說,突變是插入或刪除。我怎樣才能防止這些錯誤?

+0

你能提供一個簡單的再現? –

+0

唉,這真的很複雜。我正在使用phantom-dsl從Scala Web服務寫入Cassandra。但基本上,我做的形式插入「插入到foo(A,B)值(AA,BB)」,其中A型字符串和BLOB類型B的。其中aa是一個32個字符的字符串,而bb是一個4MB + 16個字節的blob。我解僱了許多這些插入,並沒有做任何明確的批處理。我預計這應該導致不超過32個字節+ 4MB + 16個字節的突變。這比16MB的限制小得多。 – eswenson

+0

我會努力分解它。要麼你會發現應用程序中的某些內容沒有達到預期效果,或者最終得到一個可用於記錄bug的有用repro。 –

回答

3

可以增加提交日誌的大小爲64 MB的cassandra.yaml

commitlog_segment_size_in_mb:64

默認情況下,commitLog大小爲32 MB。

根據設計意圖,允許的最大段大小是配置的commit_log_segment_size_in_mb的50%。這樣Cassandra就避免了寫入具有大量空白空間的段。

您應該調查爲什麼寫的大小突然增加。如果沒有預期,即由於計劃改變它,然後它可能是與需要進一步檢查客戶端應用程序的問題。

+0

我不相信「寫大小突然增加」。這是一項新服務,我們一直在測試各種大小的寫入。我們將4MB blob插入到cassandra表中。爲什麼用4MB的blob,我們會達到16MB的限制嗎? – eswenson