Windows 7 HUnavailableException:可能没有足够的副本来处理一致性级别

Windows 7 HUnavailableException:可能没有足够的副本来处理一致性级别,windows-7,cassandra,Windows 7,Cassandra,我在我的机器(windows 7)上使用Cassandra 1.2.4 我在我的机器上的DC1中有3个节点。我只使用一个DC(我的机器)。我确实保持了复制因子=2和“HConsistencyLevel.ONE”。但是,当其中一个节点关闭时,我尝试读取或写入DB时,会出现错误-“可能没有足够的副本来处理一致性级别”。 我的印象是,当我们将一致性级别保持为“一”时,即使有一个节点处于运行状态,写入/读取操作也应该不会出错。但我得到了这个错误。有人能纠正我在这里做错了什么吗。我确实在谷歌上搜索过,但没

我在我的机器(windows 7)上使用Cassandra 1.2.4

我在我的机器上的DC1中有3个节点。我只使用一个DC(我的机器)。我确实保持了复制因子=2和“HConsistencyLevel.ONE”。但是,当其中一个节点关闭时,我尝试读取或写入DB时,会出现错误-“可能没有足够的副本来处理一致性级别”。 我的印象是,当我们将一致性级别保持为“一”时,即使有一个节点处于运行状态,写入/读取操作也应该不会出错。但我得到了这个错误。有人能纠正我在这里做错了什么吗。我确实在谷歌上搜索过,但没有得到太多关于这个错误的帮助,尽管这个错误是非常相关的。我希望在节点发生故障时进行读/写操作。下面是我的代码

String keySpaceName="kspace";
String clusterName="Test Cluster";
String columFamilyName="ktable";
String host="127.0.0.1:9160,127.0.0.2:9161,127.0.0.3:9162";
int replicationFactor=2;

CassandraHostConfigurator cassandraHostConfigurator = new   
CassandraHostConfigurator(host);
Cluster cluster = HFactory.getOrCreateCluster(clusterName,cassandraHostConfigurator);
KeyspaceDefinition keyspaceDef = cluster.describeKeyspace(keySpaceName);

ConfigurableConsistencyLevel configurableConsistencyLevel = new 
ConfigurableConsistencyLevel();
Map<String, HConsistencyLevel> clmap = new HashMap<String, HConsistencyLevel>();

// Define CL.ONE for ColumnFamily "ktable"
clmap.put(columFamilyName, HConsistencyLevel.ONE);
configurableConsistencyLevel.setReadCfConsistencyLevels(clmap);
configurableConsistencyLevel.setWriteCfConsistencyLevels(clmap);

if(keyspaceDef==null)   
{
KeyspaceDefinition newKeyspace = HFactory.createKeyspaceDefinition(
keySpaceName, ThriftKsDef.DEF_STRATEGY_CLASS,replicationFactor, null);
cluster.addKeyspace(newKeyspace, true);
}
Keyspace keyspace = HFactory.createKeyspace(keySpaceName, cluster,  
configurableConsistencyLevel);

StringSerializer ss = StringSerializer.get();
ColumnFamilyTemplate<String, String> cft = new ThriftColumnFamilyTemplate<String,  
String>(keyspace, columFamilyName, ss, ss);
ColumnFamilyUpdater<String, String> updater = cft.createUpdater("xkey");
UUID uid = new UUID();
updater.setValue("id",Long.toString(uid.getClockSeqAndNode()),ss);
updater.setValue("name", "Catherine", ss);
updater.setValue("state", "GA", ss);
cft.update(updater);
String keySpaceName=“kspace”;
字符串clusterName=“测试集群”;
字符串columFamilyName=“ktable”;
字符串host=“127.0.0.1:9160127.0.0.2:9161127.0.0.3:9162”;
int复制因子=2;
CassandraHostConfigurator CassandraHostConfigurator=新建
CassandraHostConfigurator(主机);
Cluster Cluster=HFactory.getOrCreateCluster(clusterName,cassandraHostConfigurator);
KeyspaceDefinition keyspaceDef=cluster.describeKeyspace(keySpaceName);
ConfigurableConsistencyLevel ConfigurableConsistencyLevel=新建
可配置一致性水平();
Map clmap=newhashmap();
//为ColumnFamily“ktable”定义CL.1
clmap.put(columFamilyName,HConsistencyLevel.ONE);
可配置一致性水平。设置读取一致性水平(clmap);
configurableConsistencyLevel.SetWriteCfconsistencyLevel(clmap);
if(keyspaceDef==null)
{
KeyspaceDefinition newKeyspace=HFactory.createKeyspaceDefinition(
keySpaceName,ThriftKsDef.DEF_STRATEGY_类,replicationFactor,null);
addKeyspace(newKeyspace,true);
}
Keyspace Keyspace=HFactory.createKeyspace(keySpaceName,cluster,
配置一致性水平);
StringSerializer ss=StringSerializer.get();
ColumnFamilyTemplate cft=新的ThriftColumnFamilyTemplate(键空间、ColumnFamilyName、ss、ss);
ColumnFamilyUpdater=cft.createUpdater(“xkey”);
UUID uid=新UUID();
setValue(“id”,Long.toString(uid.getClockSekandNode()),ss);
setValue(“name”,“Catherine”,ss);
setValue(“state”、“GA”、ss);
cft.update(更新程序);

尝试将复制因子更改为群集中可用的节点数…它可以从此类故障中生存下来…在我的示例中,RF=5时,5节点群集可以在2节点故障下生存,RF=4时,5节点群集可以在1节点故障下生存,RF=3时,5节点群集只能在1节点故障下生存


我不确定这种方法是否有效,但应始终有效(即RF=节点数)。非常感谢专家的任何建议…

将复制系数更改为1,即设置的节点数。我在练习这些示例时确实遇到了相同的错误。

能否粘贴“show schema;”中的模式输出在卡桑德拉?是否可能在脚本使用复制因子1运行之前创建了密钥空间?@Richard-感谢您的回复。在代码执行之前,我创建了复制因子为“2”的键空间。使用placement_strategy='SimpleStrategy'和strategy_options={replication_factor:2}创建键空间kspace,持久性_writes=true;我的问题是——即使在节点发生故障的情况下,我如何才能成功地将数据写入/读取到cassandra。任何帮助都将不胜感激。你好,Kiran。如果您对我的问题有任何建议,我们将不胜感激。@Kiran-这方面运气好吗?我遇到了完全相同的问题=/