Cassandra数据模型经常需要更新多个列族以支持单个“写入”(即更新双向索引的两侧)。当作业配置只允许指定单个输出列族时,如何使用Hadoop执行此操作?
答案 0 :(得分:3)
这可以通过使用以下网址修补Cassandra 1.1来实现:
https://issues.apache.org/jira/browse/CASSANDRA-4208
完成此操作后,您将拨打ConfigHelper.setOutputColumnFamily()
,而不是ConfigHelper.setKeyspace()
。然后,您可以使用MultipleOutputs API在作业配置中指定输出CF,如下所示:
MultipleOutputs.addNamedOutput(job, "ColumnFamily1", ColumnFamilyOutputFormat.class, ByteBuffer.class, List.class);
MultipleOutputs.addNamedOutput(job, "ColumnFamily2", ColumnFamilyOutputFormat.class, ByteBuffer.class, List.class);
当您准备输出时,只需引用指定的CF作为输出名称:
output.write("ColumnFamily1", key, Collections.singletonList(mutation));
其中output
是对reducer中的MultipleOutputs实例的引用。