在mapreduce期间查找HBase表中另一行中具有特定列值的行

时间:2013-08-05 16:29:57

标签: hadoop mapreduce hbase

我正在使用HBase表来存储事件,我想用其响应事件的输出更新请求事件。这两个值都存储在两个不同行的HBase表中。

这是我遇到的困境。我想使用mapreduce作业,它将接收所有响应行,并使用响应行的状态更新请求行。响应和请求都具有匹配的用户ID,但行由相关ID索引。 rowkey的格式是(event_corrID_userID)。相关ID可能在现在和之后发生了变化,但userID将始终相同。

这是我的整个情况。如何在mapreduce期间在表格内(在其他行中)进行搜索?这是我到目前为止所做的:

public class MapReducer {
    public static void main(String[] args){
        Configuration config = HBaseConfiguration.create();
        try{
            String startRow = "response_";
            String endRow = "responsf_";
            Job job = new Job(config, "TestAuditingResponse");
            job.setJarByClass(MapReducer.class);
            Scan scan = new Scan(Bytes.toBytes(startRow), Bytes.toBytes(endRow));
            scan.setCaching(500);
            scan.setCacheBlocks(false);

            TableMapReduceUtil.initTableMapperJob(
                    "test",
                    scan,
                    mapper.class,
                    null,
                    null,
                    job);
            TableMapReduceUtil.initTableReducerJob(
                    "test",
                    null,
                    job);
            job.setNumReduceTasks(0);

            boolean b = job.waitForCompletion(true);
            if(!b){
                throw new IOException("ERROR WITH JOB");
            }
        } catch(IOException e){
            e.printStackTrace();
        } catch(ClassNotFoundException e){
            e.printStackTrace();
        } catch(InterruptedException e){
            e.printStackTrace();
        }
    }
    public static class mapper extends TableMapper<ImmutableBytesWritable, Put> {
        public void map(ImmutableBytesWritable row, Result value, Context context) throws IOException, InterruptedException {
            //TODO find row to put new value into
        }
    }

}

有谁知道我怎么做到这一点?或者更好/更快的方式基于分布式/易于运行的方式基于表中的其他行更新表?

1 个答案:

答案 0 :(得分:0)

似乎你要'加入'内在的一张桌子。你可以查看new feature