在Cassandra环上均匀地重新洗牌数据

时间:2016-03-16 11:48:49

标签: cassandra datastax cassandra-2.1

我有Apache Cassandra 2.1.12的三节点环。我在2节点环时插入了一些数据,然后在环中添加了一个172.16.5.54节点。我在我的戒指中使用vnode。问题是数据不均匀分布,因为所有权似乎均匀分布。那么,如何重新分配数据aross the ring。我尝试了nodetool repairnodetool cleanup,但仍然没有运气。

此外,此加载和自己的列在nodetool status输出中表示什么。 此外,如果我从这个三节点中导出数据,则从文件中的一个节点导入数据。因此,CPU利用率高达100%,最终两个节点中其余节点的数据均匀分布,但导入运行节点则不然。为什么会这样?

Datacenter: datacenter1
    =======================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address       Load       Tokens  Owns (effective)  Host ID                               Rack
    UN  172.16.5.54   1.47 MB    256     67.4%             40d07f44-eef8-46bf-9813-4155ba753370  rack1
    UN  172.16.4.196  165.65 MB  256     68.3%             6315bbad-e306-4332-803c-6f2d5b658586  rack1
    UN  172.16.3.172  64.69 MB   256     64.4%             26e773ea-f478-49f6-92a5-1d07ae6c0f69  rack1

2 个答案:

答案 0 :(得分:1)

输出中的列针对cassandra 2.1.x in this doc进行了解释。负载是cassandra数据目录中的文件系统数据量。您的3个节点似乎不平衡,这可能意味着您的分区密钥在单个节点上集群(172.16.4.196),有时称为热点。

Owns列是“每个数据中心节点拥有的数据占复制因子的百分比”。所以我可以推断出您的RF = 2,因为每个节点拥有大约2/3的数据。

答案 1 :(得分:-1)

您需要修复表的分区键。

Cassandra将基于分区键的数据分发到节点(使用散列分区范围)。 所以,出于某种原因,你有很多分区键值的数据,而且几乎没有其余的分区键值。