Cassandra CQL3复合键不是由Hadoop还原器编写的 [英] Cassandra CQL3 composite key not written by Hadoop reducer

查看:133
本文介绍了Cassandra CQL3复合键不是由Hadoop还原器编写的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用Cassandra 1.2.8,并且有几个Hadoop MapReduce作业,从一些CQL3表读取行,并将结果写回另一个CQL3表。

I'm using Cassandra 1.2.8, and have several Hadoop MapReduce jobs, that read rows from some CQL3 tables and write result back to another CQL3 tables.

如果输出CQL3表包含复合键,则复合键字段的值不会由reducer写入 - 而是在cqlsh中执行select查询时,会看到这些字段的空值。

If output CQL3 tables contain composite key, values of the composite key fields are not written by reducer - instead I see empty values for those fields, while performing select query in cqlsh. If the primary key is not composite, everything works correctly.

输出CQL3表与复合键的示例:

Example of the output CQL3 table with composite key:

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_source SET events_number = events_number +?

My output query is: UPDATE events_by_type_with_source SET events_number = events_number + ?

我的Reducer函数看起来像这样:

My Reducer function looks like this:

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));

}

结果是: / p>

The result is:

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_type_id和period字段是空的,即使我把非空有效ASCII字符串在reducer中。

As you can see, event_type_id and period fields are empty, even though I put not-empty valid ASCII strings in the reducer.

任何想法如何解决这个问题?

Any idea how to fix this?

推荐答案

在1.2.2之前的已知问题Cassandra: https://issues.apache.org/jira / browse / CASSANDRA-5949

This is a known issue in pre-1.2.10 Cassandra: https://issues.apache.org/jira/browse/CASSANDRA-5949

根据以前的发布计划,我预计1.2.10将在2013年9月底前可用。似乎不存在于Cassandra 2.0中。

Based on previous release schedule, I would expect 1.2.10 to be available near the end of September 2013. This issue does not appear to exist in Cassandra 2.0.

这篇关于Cassandra CQL3复合键不是由Hadoop还原器编写的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆