2

行キーが String、列名が Long、列値が DynamicComposite であるデータ モデルを実装しようとしています。Hector を使用すると、ストアド プロシージャの例は次のようになります。

// create the value
DynamicComposite colVal = new DynamicComposite(); 
colVal.add(0, "someString");
colVal.setComparatorByPosition(0, "org.apache.cassandra.db.marshal.UTF8Type");
colVal.setSerializerByPosition(0, StringSerializer.get());

// create the column
HColumnImpl<Long, DynamicComposite> newCol = new
    HColumnImpl<Long, DynamicComposite>(longSerializer, 
        dynamicCompositeSerializer);

newCol.setName(longValue);
newCol.setValue(colVal);
newCol.setClock(keySpace.createClock());

// insert the new column
Mutator<String> mutator = HFactory.createMutator(keySpace,stringSerializer);
mutator.addInsertion("rowKey","columnFamilyName",newCol);
mutator.execute();

ここで、データを取得しようとすると:

// create the query
SliceQuery<String,Long,DynamicComposite> sq =
    HFactory.createSliceQuery(keySpace, stringSerializer, longSerializer, 
        dynamicCompositeSerializer);

// set the query
sq.setColumnFamily("columnFamilyName");
sq.setKey("rowKey");
sq.setColumnNames(longValue);

// execute the query
QueryResult<ColumnSlice<Long, DynamicComposite>> qr = sq.execute();

// get the data
qr.get().getColumnByName(longValue).getValue();

または、単純なさようならを取得しようとするとき:

// get the data    
dynamicSerializer.fromByteBuffer(qr.get().
    getColumnByName(longValue).getValueBytes());

私は例外に遭遇します:

Exception in thread "main" java.lang.NullPointerException
    at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:191)
    at com.google.common.collect.ImmutableClassToInstanceMap.getInstance(ImmutableClassToInstanceMap.java:147)
    at me.prettyprint.hector.api.beans.AbstractComposite.serializerForComparator(AbstractComposite.java:321)
    at me.prettyprint.hector.api.beans.AbstractComposite.getSerializer(AbstractComposite.java:344)
    at me.prettyprint.hector.api.beans.AbstractComposite.deserialize(AbstractComposite.java:713)
    at me.prettyprint.hector.api.beans.DynamicComposite.fromByteBuffer(DynamicComposite.java:25)
    at me.prettyprint.cassandra.serializers.DynamicCompositeSerializer.fromByteBuffer(DynamicCompositeSerializer.java:35)

私が読んだすべてのチュートリアルから理解している限り、列の値として DynamicComposite を使用できるはずです。したがって、私は尋ねたいと思います:私は何を間違っていますか?例外から、どこかに何かを設定するのを忘れているようです。

4

1 に答える 1

2

ラドバン、

おそらく、Hector バージョンと組み合わせて使用​​される Guava ライブラリの互換性の問題が原因です。

参照: https://github.com/hector-client/hector/pull/591

私はHector-core-1.1-1.jarを使用しています.Guava-14.0.jarと組み合わせて、あなたと同じエラーが発生します. しかし、Guava-12.0.1.jar で使用すると、問題なく動作します。

于 2013-03-22T14:38:07.843 に答える