我遇到这样的情况,我需要写入两个 hbase 表,例如表 1、表 2。每当表 1 上发生写入时,我需要对表 2 执行一些操作,例如增加表 2 中的计数器(比如触发)。为此,我需要在映射缩减程序的同一任务中访问(写入)两个表。我听说可以使用 MultiTableOutputFormat 来完成。但我找不到任何详细解释的好例子。请有人回答是否可以这样做。如果是这样我可以/应该怎么做。提前致谢。
请给我一个不应包含协处理器的答案。
最佳答案
要在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);
关于mapreduce - 写入HBASE中的多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11039668/