Несколько выходов Hadoop с CQL3

Мне нужно вывести результаты задания MR в несколько семейств столбцов CQL3.

В своем редюсере я указываю CF с помощью MultipleOutputs, но все результаты записываются в один CF, определенный в операторе OutputCQL задания.

Определение работы:

...
job.setOutputFormatClass(CqlOutputFormat.class);
ConfigHelper.setOutputKeyspace(job.getConfiguration(), "keyspace1");
MultipleOutputs.addNamedOutput(job, "CF1", CqlOutputFormat.class, Map.class, List.class);
MultipleOutputs.addNamedOutput(job, "CF2", CqlOutputFormat.class, Map.class, List.class);
CqlConfigHelper.setOutputCql(job.getConfiguration(), "UPDATE keyspace1.CF1 SET value = ? ");
...

Настройка класса редуктора:

mos = new MultipleOutputs(context);

Метод сокращения (псевдокод):

keys = new LinkedHashMap<>();
keys.put("key", ByteBufferUtil.bytes("rowKey"));
keys.put("name", ByteBufferUtil.bytes("columnName"));

List<ByteBuffer> variables = new ArrayList<>();
variables.add(ByteBufferUtil.bytes("columnValue"));

mos.write("CF2", keys, variables);

Проблема в том, что мой редьюсер игнорирует CF, который я указываю в mos.write(), и вместо этого должен просто запускать outputCQL. Итак, в приведенном выше примере все записывается в CF1.

Я пытался использовать подготовленный оператор для вставки CF в outputCQL по строкам «UPDATE keyspace1.? SET value =?», но я не думаю, что возможно использовать заполнитель для CF, как это.

Есть ли способ перезаписать outputCQL внутри класса редуктора?


person beterthanlife    schedule 04.11.2013    source источник


Ответы (1)


Таким образом, простой ответ заключается в том, что вы не можете выводить результаты из задания mr на несколько CF. Однако необходимость сделать это на самом деле указывает на недостаток подхода, а не на отсутствующую функцию в Hadoop.

Вместо того, чтобы обрабатывать кучу записей и пытаться создать 2 разных набора результатов за один проход, лучшим подходом является итеративное получение желаемых наборов результатов. По сути, это означает наличие нескольких заданий, повторяющих результаты предыдущих заданий, пока не будут достигнуты желаемые результаты.

person beterthanlife    schedule 16.10.2014