我在我的機器上使用Cassandra 1.2.4(Windows 7)。HUnavailableException:可能沒有足夠的副本來處理一致性級別
我的DC1中有3個節點,在我的機器上。我只使用一個DC(我的機器)。我確實保留了複製因子= 2和「HConsistencyLevel.ONE」。但是,如果其中一個節點關閉,並且我試圖讀取或寫入數據庫,則會出現錯誤 - 「可能沒有足夠的副本來處理一致性級別」。 我的印象是,當我們將一致性級別保持爲「ONE」並且即使一個節點啓動時,寫入/讀取也應該沒有錯誤地發生。但是我得到這個錯誤。有人能糾正我,因爲我在這裏做錯了。我在谷歌搜索,但沒有得到有關這個錯誤很多的幫助,雖然這個錯誤是非常相關的。我希望在發生節點故障時進行讀/寫操作。以下是我的代碼。
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);
您可以粘貼'show schema;'的模式輸出嗎?在cassandra-cli?在您的腳本運行復制因子1之前是否可以創建密鑰空間? – Richard 2013-05-03 10:07:35
@理查德 - 感謝您的回覆。我在代碼執行前創建了具有複製因子「2」的密鑰空間。 使用placement_strategy ='SimpleStrategy'創建密鑰空間kspace 和strategy_options = {replication_factor:2} and durable_writes = true; 我的問題是 - 即使在節點故障的情況下,我怎樣才能成功地將數據寫入/讀取到cassandra。任何幫助將不勝感激。 關心, 基蘭。 – Kiran 2013-05-03 23:36:52
對我的問題的任何建議將不勝感激。 – Kiran 2013-05-08 21:41:45