写入HBASE中的多个表

San*_*eep 3 hbase mapreduce

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

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

小智 5

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

TableMapReduceUtil.initTableReducerJob("tableName", MyReducer.class, job);
Run Code Online (Sandbox Code Playgroud)

而不是这样写:

job.setOutputFormatClass(MultiTableOutputFormat.class);
job.setMapperClass(MyMapper.class);
job.setReducerClass(MyReducer.class);
job.setNumReduceTasks(2);
TableMapReduceUtil.addDependencyJars(job);
TableMapReduceUtil.addDependencyJars(job.getConfiguration());
Run Code Online (Sandbox Code Playgroud)

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

context.write(new ImmutableBytesWritable(Bytes.toBytes("tableName1")),put1);
context.write(new ImmutableBytesWritable(Bytes.toBytes("tableName2")),put2);
Run Code Online (Sandbox Code Playgroud)