更新和删除hbase中的map/reduce

bnlyeluc  于 2021-06-09  发布在  Hbase
关注(0)|答案(1)|浏览(435)

我有一个表,它包含大约10亿条记录。我想更改这些记录的密钥,即获取一个记录以某种方式更改其密钥,删除获取的内容,保存新记录!比如说,我的密钥是[time accountid],我想把它改成[account time],我想用不同的密钥获取实体create new,用[time account]删除实体,用[account time]保存新实体
完成这项任务的最佳方法是什么?
我正在考虑m/r,但如何删除具有m/r的实体?

62o28rlo

62o28rlo1#

您需要一个mapreduce,它将为表的每一行生成一个put和一个delete。这里只需要一个Map器,因为您不需要对数据进行聚合,所以跳过reducer:

TableMapReduceUtil.initTableReducerJob(
    table,      // output table
    null,             // reducer class
    job);

您的Map程序必须同时生成put和delete,因此要使用的输出值类是突变(https://hbase.apache.org/0.94/apidocs/org/apache/hadoop/hbase/client/mutation.html):

TableMapReduceUtil.initTableMapperJob(
    table,        // input table
    scan,               // Scan instance to control CF and attribute selection
    MyMapper.class,     // mapper class
    ImmutableBytesWritable.class,         // mapper output key
    Mutation.class,  // mapper output value
    job);

那么您的Map器将如下所示:

Delete delete = ...
context.write(oldKey, delete);
Put put = ...
context.write(newKey, put);

相关问题