我有两个节点cassandra环。在其中一台服务器上,我正在执行一些批量写入操作 - 扫描文件列表的文件夹并将列表写入本地Cassandra。那里有大约500,000个文件。我在每个突变中输入250个值。
问题:我在加载过程中遇到 m.p.h.a.e.HUnavailableException 。而且我注意到另一个节点上的奇怪事情。负载显着增加:
写入操作前:
me@10.1.18.55:~$ nodetool -h localhost ring
Address DC Rack Status State Load Owns Token
85070591730234615865843651857942052864
10.1.18.51 datacenter1 rack1 Up Normal 221.3 KB 50.00% 0
10.1.18.55 datacenter1 rack1 Up Normal 185.65 KB 50.00% 85070591730234615865843651857942052864
写操作后
me@10.1.18.55:~$ nodetool -h localhost ring
Note: Ownership information does not include topology, please specify a keyspace.
Address DC Rack Status State Load Owns Token
85070591730234615865843651857942052864
10.1.18.51 datacenter1 rack1 Up Normal 124.44 MB 50.00% 0
10.1.18.55 datacenter1 rack1 Up Normal 303.39 KB 50.00% 85070591730234615865843651857942052864
是否以某种方式使我的负载崩溃?
Cassandra版本1.1.0,一致性类型Quorum。
这是mutator实现位:
mutator.addInsertion("items", columnFamily, HFactory.createColumn(
i.getAndIncrement(), xml, LongSerializer.get(),
StringSerializer.get()));
要将数据接缝写入一个大的“项目”行......
答案 0 :(得分:1)
如果您将事物建模为One Big Row,请不要这样做;该行是分区和复制的单位,因此您需要(多)行,而不是环中的节点,以获得良好的负载分配。
UnavailableException可能意味着您正在重载群集。你可以限制你的写入 - 使用“nodetool tpstats”看看它背后有多远 - 或者切换到Dalius链接的批量加载器,这是为了应对这种情况。
答案 1 :(得分:0)
请确保行分区的大小不超过100Mb。 您可以使用cfstats进行相同的检查。
对于Column Family,统计数据很重要,值应小于100Mb。如果超过限制,则会导致压缩开销,节点将脱机。
压缩分区最大字节数:[value] 压缩分区意味着字节:[value]