hadoop - Cassandra CQL3 复合 key 不是由 Hadoop reducer 编写的

标签 hadoop cassandra cql3

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

如果输出 CQL3 表包含复合键,复合键字段的值不是由 reducer 写入的 - 相反,我在 cqlsh 中执行选择查询时看到这些字段的空值。如果主键不是复合键,则一切正常。

具有复合键的输出 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_source SET events_number = events_number + ?

我的 Reducer 函数如下所示:

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

知道如何解决这个问题吗?

最佳答案

这是 1.2.10 之前的 Cassandra 中的一个已知问题:https://issues.apache.org/jira/browse/CASSANDRA-5949

根据之前的发布时间表,我预计 1.2.10 将在 2013 年 9 月底左右推出。这个问题在 Cassandra 2.0 中似乎不存在。

关于hadoop - Cassandra CQL3 复合 key 不是由 Hadoop reducer 编写的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18566882/

相关文章:

cassandra - cassandra 升级是否需要运行 nodetool upgradesstables 用于集群保存 TTLed 数据

cassandra - Nodetool repair -pr -full 与 Nodetool repair -pr

cassandra - CQL : Bad Request: Missing CLUSTERING ORDER for column

hadoop - Hive外部表定界符在创建后损坏

sql - 选择哪个数据库来记录用户事件

hadoop - 在Hive中将语句显示为子查询

hadoop - 如何在 Pig 中过滤时间戳

nosql - Cassandra内部keyspace "system"的使用

cassandra - 使用 Cassandra 和 CQL3,如何在单个请求中插入整个宽行?

cassandra - Thrift 和 CQL 3 列/行之间的区别