Hadoop 从REDUCER向多个表写入输出

Hadoop 从REDUCER向多个表写入输出,hadoop,mapreduce,hbase,Hadoop,Mapreduce,Hbase,我可以从reducer向HBase中的多个表写入输出吗?我浏览了不同的博客文章,但我找不到方法,甚至使用了MultiTableOutputFormat 我提到这一点: 但无法找出上下文的API签名。编写调用 减速器代码: public class MyReducer extends TableReducer<Text, Result, Put> { private static final Logger logger = Logger.getLogger( MyReduce

我可以从reducer向HBase中的多个表写入输出吗?我浏览了不同的博客文章,但我找不到方法,甚至使用了
MultiTableOutputFormat

我提到这一点:

但无法找出
上下文的API签名。编写
调用

减速器代码:

public class MyReducer extends TableReducer<Text, Result, Put> {

    private static final Logger logger = Logger.getLogger( MyReducer.class );

    @SuppressWarnings( "deprecation" )
    @Override
    protected void reduce( Text key, Iterable<Result> data, Context context ) throws IOException, InterruptedException {
        logger.info( "Working on ---> " + key.toString() );
        for ( Result res : data ) {
            Put put = new Put( res.getRow() );
            KeyValue[] raw = res.raw();
            for ( KeyValue kv : raw ) {
                put.add( kv );
            }

            context.write( obj, put );
            **// I dont know how to give table name here.**

        }
    }
}
公共类MyReducer扩展了TableReducer{
私有静态最终记录器Logger=Logger.getLogger(MyReducer.class);
@抑制警告(“弃用”)
@凌驾
受保护的void reduce(文本键、Iterable数据、上下文上下文)引发IOException、InterruptedException{
logger.info(“处理-->”+key.toString());
对于(结果:数据){
Put Put=新Put(res.getRow());
KeyValue[]raw=res.raw();
用于(关键值kv:原始){
增加(千伏);
}
context.write(obj,put);
**//我不知道这里怎么给桌子起名字**
}
}
}

要识别表名,应将表名作为键传递给
上下文。write(key,put)
方法:

ImmutableBytesWritable key = new ImmutableBytesWritable(Bytes.toBytes("tableName"));
context.write(key, put);
但是,如果您想通过MapReduce作业一次加载大量数据,那么使用
MultiTableHFileOutputFormat
可能会很有趣。此输出格式为您需要的每个HBase表创建HFiles,然后您可以使用
LoadIncrementalHFiles
工具轻松加载这些文件:

hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /tmp/multiTableJobResult hbaseTable
您可以在文章中阅读有关
MultiTableHFileOutputFormat
的更多信息:

是的,没错(+1)我们必须通过上述方法将表作为键传递。如果你是通过mapper写作,那么下面提到的就是方法rowKey是从lineBytes Put Put=new Put(rowKey)生成的hbase rowKey;//创建KeyValue对象put.add(kv);上下文。写(“动作”,放);//写入操作表