卡桑德拉和赫克托问题

时间:2012-06-06 12:04:43

标签: cassandra cluster-computing hector

我在一个节点上设置了Cassandra并用数据充斥它。然后我配置了第二个节点,它的初始令牌,种子等,并在其上启动了Cassandra。 现在,当我在1节点集群上运行我的Hector代码时,它为我提供了所有数据。但是当我在2节点集群上运行相同的代码时,我获得的数据更少(列数和行数更少)。我不明白我做错了什么。 我甚至尝试使用CassandraHostConfigurator添加一串主机,但我仍然无法获取整个数据。 我也试过运行nodetool修复但仍面临同样的问题

请帮帮我

2 个答案:

答案 0 :(得分:1)

当您将节点添加到群集中时,您应该使用该节点启动该节点 auto_bootstrap: true cassandra.yaml 中,以便群集中的其他节点(在您的情况下是唯一的节点)将流式传输数据新节点(根据令牌)

编辑对于Casssandra-1.0以后没有选项作为bootstrap,在这种情况下我们必须启动第二个节点并计算新的令牌它将开始流式传输数据.once streaming is finished run {{1 }}。有关详细信息,请参阅Adding nodes to cluster

如果没有这样做,第二个节点将不会根据令牌拥有它应该保留的数据。当你尝试从Cassandra中读取数据时,它可能会根据令牌在新添加的节点上查找数据,但由于没有数据,因此无法获得正确的结果。

答案 1 :(得分:0)

  • 请检查所有防火墙,iptables配置是否接受节点与另一个
  • 进行通信

将节点添加到响铃后,使用nodetool ring查看数据加载示例我的集群有3个节点结果将类似:

  

192.168.23.84 datacenter1 rack1 Up Normal 37.52 GB 33.33%
  192.168.23.85 datacenter1 rack1 Up Normal 37.5 GB 33.33%
  192.168.23.86 datacenter1 rack1 Up正常37.5 GB 33.33%

如果它类似,当你使用hector时,使用此代码检查hector对哪个服务器的请求:

MutationResult result = mutator.execute();
logger.info(" host:" + result.getHostUsed().getHost());

尝试写很多时间重新检查目标主机是否包含所有主机。

我使用此CassandraHostConfigurator在使用Hector时向群集添加许多主机 例如:

CassandraHostConfigurator cassandraHostConfigurator = new CassandraHostConfigurator(
                "192.168.23.84:9160,192.168.23.85:9160,192.168.23.86:9160");
cluster = HFactory.getOrCreateCluster("testcluster", cassandraHostConfigurator);