3

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

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

4

2 回答 2

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);
于 2014-05-08T05:52:47.840 回答
1

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

于 2012-06-20T04:32:41.163 回答