2012-06-14 52 views
3

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

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

回答

1

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

3

写入到多个表中的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);