Составной ключ Cassandra CQL3 не написан редуктором Hadoop
Я использую Cassandra 1.2.8 и имею несколько заданий Hadoop MapReduce, которые читают строки из некоторых таблиц CQL3 и записывают результат обратно в другие таблицы CQL3.
Если выходные таблицы CQL3 содержат составной ключ, значения полей составного ключа не записываются редуктором - вместо этого я вижу пустые значения для этих полей при выполнении запроса выбора в 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 +?
Моя функция редуктора выглядит так:
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 являются пустыми, хотя я поместил непустые допустимые строки ASCII в редуктор.
Есть идеи, как это исправить?
1 ответ
Это известная проблема в Кассандре до 1.2.10: https://issues.apache.org/jira/browse/CASSANDRA-5949
Исходя из предыдущего графика выпуска, я ожидаю, что версия 1.2.10 будет доступна ближе к концу сентября 2013 года. Эта проблема, по-видимому, отсутствует в Cassandra 2.0.