2015-03-30 2 views
1

J'essaie de créer une base de données cassandra en utilisant un cluster à un seul nœud (peu importe la valeur) Facteur Je continue d'obtenir cette erreur:Cluster mono-noeud Cassandra-Hector HUnavailableException:: Il ne peut pas y avoir suffisamment de réplicas présents pour gérer le niveau de cohérence

me.prettyprint.hector.api.exceptions.HUnavailableException:: Il se peut qu'il n'y ait pas assez de réplicas présents pour gérer le niveau de cohérence.

Voici mon code:

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; 
} 

Toutes les suggestions sur ce que dois-je faire ou sur ce que la valeur du facteur de réplication doit être? Après l'exécution, 'utilisez l'espace de clés "myKeyspace;' et « décrire; », la sortie est:

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

pouvez-vous exécuter cqlsh et inclure la sortie de 'describe keyspace" myKeyspace "'. Aussi s'il s'agit d'une nouvelle application, je recommande fortement d'utiliser cql over thrift –

+0

J'ai posté les résultats de la sortie ci-dessus –

Répondre

1

votre keyspace est configuré avec un RF de 3

Options: [replication_factor:3]

Sur un cluster 1 nœud, aucun quorum ne peut jamais être atteint, car il nécessite au moins 2. Modifiez votre rf à 1 ou utilisez un niveau de cohérence de 1.