我正在使用HBase表来存储事件,并且我想用响应事件的输出来更新请求事件。这两个值都存储在HBase表中的两个不同行中。
这是我遇到的困境。我想使用一个mapreduce作业,它将接收所有响应行,并用响应行的状态更新请求行。响应和请求都具有匹配的用户id,但行由相关id索引。rowkey的格式为(event_corrID_userID)。从现在到那时,关联ID可能已经更改,但用户ID将始终相同。
这就是我的全部情况。在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
}
}
}
有人知道我该怎么做吗?还是以分布式/易于运行的方式基于表中的其他行更新表的更好/更快的方法?
似乎要"联接"内部的一个表。你可以检查一下这个新功能。