0

Cassandra Definitive ガイド、Ch 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 book は、かなり古くなっているため、現時点では不十分なリソースです。それ以来、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 に答える