0

我正在尝试 Cassandra Definitive 指南第 12 章中给出的示例。该语句给出了错误,我无法找出它的替代方法:

ConfigHelper.setThriftContact(job.getConfiguration(), "localhost",  9160);

还,

IColumn column = columns.get(columnName.getBytes());
String value = new String(column.value());

column.value()给出编译错误。任何解决方案?

4

1 回答 1

1

Cassandra Definitive Guide 这本书在这一点上是一个糟糕的资源,因为它已经过时了。从那时起,Cassandra 发生了很大变化,Hadoop 也是如此,因此 Cassandra-Hadoop 集成章节特别不可靠。

这是一个完整的工作 Cassandra 配置:

ConfigHelper.setRangeBatchSize(getConf(), 99);
final Job job = new Job(getConf(), "average");
final Configuration conf = job.getConfiguration();
ConfigHelper.setInputRpcPort(conf, "9160");
ConfigHelper.setInputInitialAddress(conf, cassHost);
ConfigHelper.setInputPartitioner(conf, "org.apache.cassandra.dht.Murmur3Partitioner");
ConfigHelper.setInputColumnFamily(conf, conf.get(keyspace), conf.get(inputCF));
//get all records
SlicePredicate predicate = new SlicePredicate().setSlice_range(new SliceRange(ByteBufferUtil.bytes(""), ByteBufferUtil.bytes(""), false, Integer.MAX_VALUE));
ConfigHelper.setInputSlicePredicate(conf, predicate);

ConfigHelper.setOutputInitialAddress(conf, cassHost);
ConfigHelper.setOutputRpcPort(conf, "9160");
ConfigHelper.setOutputPartitioner(conf, "org.apache.cassandra.dht.Murmur3Partitioner");
ConfigHelper.setOutputColumnFamily(conf, conf.get(keyspace), conf.get(outputCF));

您的线路的问题:

String value = new String(column.value());

正在尝试将其传递给String构造函数。在旧版本的 Cassandra 中column.value()返回byte[],但它现在返回一个ByteBuffer. 如果底层数据实际上是一个字符串,您可以使用 Cassandra 对其ByteBufferUtil.string()进行解码。所以你的新行看起来像这样:

String value = ByteBufferUtil.string(column.value());
于 2013-01-29T14:48:51.253 回答