写入HBASE中的多个表

时间:2012-06-14 19:01:59

标签: mapreduce hbase

我有一个情况,我需要写两个hbase表,例如table1,table 2.每当在表1上发生写操作时,我需要对表2进行一些操作,比如在表2中增加一个计数器(喜欢触发)。为此,我需要访问(写入)map-reduce程序的同一任务中的两个表。我听说可以使用MultiTableOutputFormat完成。但我找不到任何详细解释的好例子。有人可以回答是否有可能这样做。如果是这样,我该怎么做?提前谢谢。

请给我一个不应包括协处理器的答案。

2 个答案:

答案 0 :(得分:4)

要在map-reduce作业中写入多个表,您必须在作业配置中指定。你是对的,这可以使用MultiTableOutputFormat来完成。 通常对于单个表使用如下:

TableMapReduceUtil.initTableReducerJob("tableName", MyReducer.class, job);

而不是写:

job.setOutputFormatClass(MultiTableOutputFormat.class);
job.setMapperClass(MyMapper.class);
job.setReducerClass(MyReducer.class);
job.setNumReduceTasks(2);
TableMapReduceUtil.addDependencyJars(job);
TableMapReduceUtil.addDependencyJars(job.getConfiguration());

现在在表中写入数据时写为:

context.write(new ImmutableBytesWritable(Bytes.toBytes("tableName1")),put1);
context.write(new ImmutableBytesWritable(Bytes.toBytes("tableName2")),put2);

答案 1 :(得分:1)

为此您可以使用HBase Observer,您必须创建一个观察者并且必须在您的服务器上部署(仅适用于HBase版本> 0.92),它将自动触发到另一个表。
我认为HBase Observer有类似Aspects的概念 有关详细信息 -
https://blogs.apache.org/hbase/entry/coprocessor_introduction