【发布时间】:2011-10-24 02:16:03
【问题描述】:
我是 Apache-Cassandra 0.8.2 的新手。我正在尝试插入一些数据,但收到此异常。
线程“主”中的异常 UnavailableException() 在 org.apache.cassandra.thrift.Cassandra$insert_result.read(Cassandra.java:14902) 在 org.apache.cassandra.thrift.Cassandra$Client.recv_insert(Cassandra.java:858) 在 org.apache.cassandra.thrift.Cassandra$Client.insert(Cassandra.java:830) 在 TestCassandra.main(TestCassandra.java:166)我的代码是:
公共类TestCassandra { 公共静态无效 createKeySpace(Cassandra.Client 客户端,字符串 ksname) 抛出 TException、InvalidRequestException、UnavailableException、UnsupportedEncodingException、NotFoundException、TimedOutException、SchemaDisagreementException { KsDef ksdef = 新的 KsDef(); ksdef.name = ksname; ksdef.strategy_class= "网络拓扑策略"; 列表 l = new ArrayList(); ksdef.cf_defs = l; client.system_add_keyspace(ksdef); System.out.println("KeySpace 创建"); } 公共静态无效 createColumnFamily(Cassandra.Client 客户端,字符串 ksname,字符串 cfname) 抛出 TException、InvalidRequestException、UnavailableException、UnsupportedEncodingException、NotFoundException、TimedOutException、SchemaDisagreementException { CfDef cfd = 新 CfDef(ksname, cfname); client.system_add_column_family(cfd); System.out.println("列族创建"); } 公共静态无效主要(字符串 [] 参数) 抛出 TException、InvalidRequestException、UnavailableException、UnsupportedEncodingException、NotFoundException、TimedOutException、SchemaDisagreementException { TTransport tr = new TFramedTransport(new TSocket("localhost", 9160)); TProtocol proto = new TBinaryProtocol(tr); Cassandra.Client 客户端 = 新 Cassandra.Client(proto); tr.open(); 字符串 keySpace = "Keyspace1"; 字符串 columnFamily = "用户"; //删除键空间 client.system_drop_keyspace(keySpace); //创建键空间 KsDef ksdef = 新的 KsDef(); ksdef.name = keySpace; ksdef.strategy_class= "网络拓扑策略"; 列表 l = new ArrayList(); ksdef.cf_defs = l; client.system_add_keyspace(ksdef); System.out.println("KeySpace 创建"); //createKeySpace(client,keySpace); client.set_keyspace(keySpace); //创建列族 CfDef cfd = new CfDef(keySpace, columnFamily); client.system_add_column_family(cfd); System.out.println("列族创建"); //createColumnFamily(client,keySpace,columnFamily); ColumnParent parent = new ColumnParent(columnFamily); 列描述 = new Column(); description.setName("描述".getBytes()); description.setValue("我是个好人".getBytes()); description.setTimestamp(System.currentTimeMillis()); ConsistencyLevel 一致性级别 = ConsistencyLevel.ONE; ByteBuffer rowid = ByteBuffer.wrap("0".getBytes()); //第166行 client.insert(rowid,父级,描述,一致性级别); System.out.println("记录插入..."); tr.flush(); tr.close(); } }谁能帮我解释一下为什么会这样?
【问题讨论】:
-
您的堆栈跟踪表明问题出在第 166 行。您的代码 sn-p 没有行号。因此,您需要告诉我们第 166 行是什么,因为我确信您的代码 sn -p 不是整个文件。
-
哦!对不起。异常出现在代码 client.insert(rowid, parent, description, contrastLevel);
-
建议:使用Hector客户端,不要直接玩Thrift API。你的代码会更干净,更不容易出错。
-
顺便说一句,
UnavailableException表示Not all the replicas required could be created and/or read.