cassandra cql3复合密钥不是由hadoop编写的

cczfrluj  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(383)

我使用的是cassandra1.2.8,有几个hadoopmapreduce作业,从一些cql3表中读取行,并将结果写回另一个cql3表。
如果输出cql3表包含复合键,则复合键字段的值不是由reducer编写的,而是在cqlsh中执行select查询时看到这些字段的空值。如果主键不是复合键,则一切正常。
具有复合键的输出cql3表的示例:

CREATE TABLE events_by_type_with_source (
    event_type_id ASCII,
    period ASCII,
    date TIMESTAMP,
    source_name ASCII,
    events_number COUNTER,
    PRIMARY KEY((event_type_id, period), date, source_name)
);

我的输出查询是:update events\ by\ type\ with\ u source set events\ u number=events\ u number+?
我的减速机函数如下所示:

public void reduce(BytesWritable key, Iterable<BytesWritable> values, Context context) {
     ...
    private final Map<String, ByteBuffer> keys = new HashMap<>();
    ...
    keys.put(COLUMN_EVENT_TYPE_ID, eventTypeIdByteBuffer);
    keys.put(COLUMN_SOURCE_NAME, sourceNameByteBuffer);
    keys.put(COLUMN_DATE, dateByteBuffer);
    keys.put(COLUMN_PERIOD, periodByteBuffer);
    ...
    context.write(keys, Arrays.asList(countByteBuffer));

}
结果是:

cqlsh:keyspace1> select * from dd_events_by_type_with_source ;

 event_type_id | period | date                     | source_name | events_number
---------------+--------+--------------------------+-------------+---------------
               |        | 2013-08-01 00:00:00+0000 |           A |            24
               |        | 2013-08-26 00:00:00+0000 |           A |            24
               |        | 2013-08-27 00:00:00+0000 |           A |            24
               |        | 2013-08-27 08:00:00+0000 |           A |            24

如您所见,event\u type\u id和period字段是空的,即使我在reducer中没有空的有效ascii字符串。
你知道怎么解决吗?

5jdjgkvh

5jdjgkvh1#

这是1.2.10之前版本cassandra中的一个已知问题:https://issues.apache.org/jira/browse/cassandra-5949
根据之前的发布计划,我预计1.2.10将于2013年9月底发布。这个问题在Cassandra2.0中似乎不存在。

相关问题