2015-03-30 3 views
1

Я пытаюсь создать базу данных cassandra с использованием кластера с одним узлом (я думаю), но независимо от того, какое значение я задал для репликации фактор, я все время получаю эту ошибку:Cassandra-Hector Single-Node Cluster HUnavailableException:: Может быть недостаточно реплик для обработки уровня согласованности

me.prettyprint.hector.api.exceptions.HUnavailableException:: Не может быть достаточного количества реплик для управления уровнем согласованности.

Вот мой код:

public static String[]getSerializedClusterMap(){ 
    Cluster cluster=HFactory.getOrCreateCluster("TestCluster", "localhost:9160"); 
// Keyspace keyspace=HFactory.createKeyspace("KMeans", cluster); 

    KeyspaceDefinition keyspaceDefinition=cluster.describeKeyspace("myKeyspace"); 

    if (cluster.describeKeyspace("myKeyspace")==null){ 
     ColumnFamilyDefinition columnFamilyDefinition=HFactory.createColumnFamilyDefinition("myKeyspace","clusters",ComparatorType.BYTESTYPE); 
     KeyspaceDefinition keyspaceDefinition1=HFactory.createKeyspaceDefinition("myKeyspace",ThriftKsDef.DEF_STRATEGY_CLASS,1,Arrays.asList(columnFamilyDefinition)); 
     cluster.addKeyspace(keyspaceDefinition1,true); 

    } 

    Keyspace keyspace=HFactory.createKeyspace("myKeyspace", cluster); 

    Mutator<String>mutator=HFactory.createMutator(keyspace, me.prettyprint.cassandra.serializers.StringSerializer.get()); 
    String[]serializedMap=new String[2],clusters={"cluster-0","cluster-1"}; 
    try{ 
     me.prettyprint.hector.api.query.ColumnQuery<String,String,String> columnQuery=HFactory.createStringColumnQuery(keyspace); 
     for(int i=0;i<clusters.length;i++){ 
      columnQuery.setColumnFamily("user").setKey("cluster").setName(clusters[i]); 
      QueryResult<HColumn<String,String>>result=columnQuery.execute(); 
      serializedMap[i]=result.get().getValue(); 
     } 
    }catch (HectorException ex){ 
     ex.printStackTrace(); 
    } 
    return serializedMap; 
} 

Любые предложения о том, что я должен делать, или о том, что значение коэффициента репликации должно быть?

После запуска «use keyspace» myKeyspace; ' и «описывают;», выход:

Keyspace: myKeyspace: 
    Replication Strategy: org.apache.cassandra.locator.SimpleStrategy 
    Durable Writes: true 
    Options: [replication_factor:3] 
    Column Families: 
    ColumnFamily: user 
     Key Validation Class: org.apache.cassandra.db.marshal.BytesType 
     Default column value validator: org.apache.cassandra.db.marshal.BytesType 
     Cells sorted by: org.apache.cassandra.db.marshal.BytesType 
     GC grace seconds: 864000 
     Compaction min/max thresholds: 4/32 
     Read repair chance: 1.0 
     DC Local Read repair chance: 0.0 
     Populate IO Cache on flush: false 
     Replicate on write: true 
     Caching: KEYS_ONLY 
     Bloom Filter FP chance: default 
     Built indexes: [] 
     Compaction Strategy: org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy 
     Compression Options: 
     sstable_compression: org.apache.cassandra.io.compress.SnappyCompressor 
+0

Вы можете запустить cqlsh и включить вывод 'describe keyspace 'myKeyspace.' Также если это новое приложение, я бы очень рекомендовал использовать cql over бережливость –

+0

я опубликовал результаты вывода выше –

ответ

1

вашего пространство ключи сконфигурирован с РФ 3

Options: [replication_factor:3]

На кластере 1 узла, не кворум никогда не может быть достигнут, поскольку он требует, по крайней мере, 2. Измените свой rf на 1 или используйте уровень согласованности ONE.

Смежные вопросы