gpt4 book ai didi

java - Apache-Cassandra 0.8.2 中的 UnavailableException()

转载 作者:搜寻专家 更新时间:2023-10-31 19:49:20 24 4
gpt4 key购买 nike

我是 Apache-Cassandra 0.8.2 的新手。我正在尝试插入一些数据但出现此异常。

Exception in thread "main" UnavailableException()    at org.apache.cassandra.thrift.Cassandra$insert_result.read(Cassandra.java:14902)    at org.apache.cassandra.thrift.Cassandra$Client.recv_insert(Cassandra.java:858)    at org.apache.cassandra.thrift.Cassandra$Client.insert(Cassandra.java:830)    at TestCassandra.main(TestCassandra.java:166)

我的代码是:

public class TestCassandra {    public static void createKeySpace( Cassandra.Client client,String ksname)        throws TException, InvalidRequestException, UnavailableException, UnsupportedEncodingException, NotFoundException, TimedOutException, SchemaDisagreementException {        KsDef ksdef = new KsDef();        ksdef.name = ksname;        ksdef.strategy_class = "NetworkTopologyStrategy";            List l = new ArrayList();                ksdef.cf_defs =l;           client.system_add_keyspace(ksdef);         System.out.println("KeySpace Created");    }    public static void createColumnFamily(Cassandra.Client client,String ksname,String cfname)        throws TException, InvalidRequestException, UnavailableException, UnsupportedEncodingException, NotFoundException, TimedOutException, SchemaDisagreementException {        CfDef cfd = new CfDef(ksname, cfname);        client.system_add_column_family(cfd);        System.out.println("ColumnFamily Created");    }    public static void main(String[] args)            throws TException, InvalidRequestException, UnavailableException, UnsupportedEncodingException, NotFoundException, TimedOutException, SchemaDisagreementException {        TTransport tr = new TFramedTransport(new TSocket("localhost", 9160));        TProtocol proto = new TBinaryProtocol(tr);        Cassandra.Client client = new Cassandra.Client(proto);        tr.open();       String keySpace = "Keyspace1";       String columnFamily = "Users";       //Drop the Keyspace        client.system_drop_keyspace(keySpace);       //Creating keyspace       KsDef ksdef = new KsDef();       ksdef.name = keySpace;       ksdef.strategy_class = "NetworkTopologyStrategy";           List l = new ArrayList();               ksdef.cf_defs =l;       client.system_add_keyspace(ksdef);        System.out.println("KeySpace Created");       //createKeySpace(client,keySpace);       client.set_keyspace(keySpace);       //Creating column Family       CfDef cfd = new CfDef(keySpace, columnFamily);       client.system_add_column_family(cfd);       System.out.println("ColumnFamily Created");       //createColumnFamily(client,keySpace,columnFamily);       ColumnParent parent = new ColumnParent(columnFamily);       Column description = new Column();       description.setName("description".getBytes());       description.setValue("I’m a nice guy".getBytes());       description.setTimestamp(System.currentTimeMillis());       ConsistencyLevel consistencyLevel = ConsistencyLevel.ONE;       ByteBuffer rowid = ByteBuffer.wrap("0".getBytes());//Line No. 166       client.insert(rowid, parent, description, consistencyLevel);       System.out.println("Record Inserted...");       tr.flush();              tr.close();    }}

谁能帮我看看为什么会这样?

最佳答案

UnavailableException 的原因是在您的 createKeySpace 方法中,您从未为您的键空间定义指定 replication_factor , KsDef

2 Strategy 类,NetworkTopologyStrategySimpleStrategy 需要设置复制因子。在 Cassandra 0.8 及更高版本中,KsDef 中不再有 replication_factor 字段,因此您必须自己添加它,就像这样(我已经更新了您的代码,但没有已测试。此外,我已将您的 strategy_class 更改为 SimpleStrategy):

KsDef ksdef = new KsDef();
ksdef.name = ksname;
ksdef.strategy_class = SimpleStrategy.class.getName();

//Set replication factor
if (ksdef.strategy_options == null) {
ksdef.strategy_options = new LinkedHashMap<String, String>();
}

//Set replication factor, the value MUST be an integer
ksdef.strategy_options.put("replication_factor", "1");

//Cassandra must now create the Keyspace based on our KsDef
client.system_add_keyspace(ksdef);

对于 NetworkTopologyStrategy,您需要为您创建的每个数据中心指定复制因子(参见说明 here)。

更多信息,查看我的Interfacing with Apache Cassandra 0.8 in Java博客。

关于java - Apache-Cassandra 0.8.2 中的 UnavailableException(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7011403/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com