我之后能够摆脱这个错误,但我不确定我做了什么是正确的。 1)
CREATE KEYSPACE myKeySpace WITH replication =
{'class': 'NetworkTopologyStrategy', 'dc1': '1', 'dc2': '2'}
AND durable_writes = true;
执行create table并在此之后选择table。这会在控制台中抛出“NoHostAvailable:”错误。
2)如果我将create语句更改为下面的一个,则select查询有效。
CREATE KEYSPACE myKeySpace WITH replication =
{'class': 'NetworkTopologyStrategy', 'datacenter1': '1', 'dc2': '2'}
AND durable_writes = true;
如果我有一个默认的datacenter1,它可以工作。我无法理解为什么它只在我给datacenter1时才有效。请帮忙。
答案 0 :(得分:8)
执行nodetool status
时会看到哪些数据中心?
您指定为密钥空间的复制因子(RF)的数据中心必须在cassandra-rackdc.properties
或cassandra-topology.properties
文件中预定义(取决于您配置的Snitch) )。
答案 1 :(得分:1)
当我尝试使用复制策略作为NetworkTopologyStrategy访问在键空间中创建的表时遇到了相同的问题。
我后来发现的原因是由于副本不可用,因为我在本地使用它。
如果我将键空间复制策略更改为SimpleStrategy,并将Replication_factor更改为1,则错误消失了。
希望这会有所帮助。
答案 2 :(得分:0)
您只能指定cassandra群集中存在/配置的数据中心。
运行nodetool状态,为您提供集群详细信息,例如数据中心名称,机架名称等。
在通过NetworkTopologyStrategy类复制创建键空间时,使用了此处的数据中心名称。
答案 3 :(得分:0)
第一步,您可以尝试:
'class':'SimpleStrategy'
要查看您的代码,请排除策略类!
在那之后,如果没有发现任何错误,您将研究策略类。
答案 4 :(得分:0)
您首先应根据必须使用的已定义数据中心名称,在属性文件“ cassandra-rackdc.properties”(使用此属性文件的Cassandra的最新版本)中检查已定义数据中心的名称或“ cassandra-topology.properties”创建键空间时该数据中心名称。您可以在创建可以查看默认数据中心名称的键空间之前检查nodetool的状态。