2012-06-26 36 views
0

我有两个节点cassandra环。在其中一台服务器上,我正在执行一些批量写入操作 - 扫描文件列表的文件夹并将列表写入本地Cassandra。那里有大约500,000个文件。我在每个突变中添加250个值。Cassandra批量数据写入两个节点环失败

问题:我在装载过程中得到m.p.h.a.e.HUnavailableException。此外,我注意到另一个节点上的奇怪的事情。负载显著上升:

写操作之前:

[email protected]:~$ 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 

后写操作

[email protected]:~$ 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.addInsertion("items", columnFamily, HFactory.createColumn(
     i.getAndIncrement(), xml, LongSerializer.get(), 
     StringSerializer.get())); 

被写入到一个大的“项目”行的数据接缝...

+0

我找到约批量加载一些柱入卡桑德拉http://www.datastax.com/dev/blog/bulk-loading 。这是我的情况唯一的解决方案吗? –

回答

1

如果你正在制作的东西作为一个大的行,不要”不要那样做;该行是分区和复制的单位,因此您需要(许多)更多的行,而不是环中的节点,以获得良好的负载分配。

UnavailableException可能意味着您正在重载集群。您可以限制写入操作 - 使用“nodetool tpstats”来查看它有多远 - 或者切换到Dalius链接的批量加载程序,该加载程序旨在处理这种情况。

+0

我已经更新了mutator实现。它将细节写入一大排......感谢jbellis –

0

请确保行分区的大小不应超过100Mb。 您可以使用cfstats检查相同。

对于Column Family下面的统计数据非常重要,值应该小于100Mb。如果超过限制,将导致压缩开销并且节点将脱机。

压实分区最大字节:[数值] 压实分区意味着字节:[数值]

相关问题