【问题标题】:Write to multiple tables in HBASE写入 HBASE 中的多个表
【发布时间】:2012-06-17 20:58:35
【问题描述】:

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

请提供一个不应包含协处理器的答案。

【问题讨论】:

    标签: mapreduce hbase


    【解决方案1】:

    要在 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);
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多