在我的一个项目中,我需要通过删除不再与银行关联的客户的行来维护一个HBASE表。
我得到一个包含customerid(也是HBASE表中的行键)的文本文件。文本文件中的每一行都包含唯一的客户id,用于从表中删除客户详细信息。
我不认为我可以使用TableMapReduceUtil。initTableMapperJob启动一个map-only job,因为mapclass期望输入来自表本身,而不是HDFS上的文本文件。
您可以使用NLineInputFormat
和TableOutputFormat
来编写您的map reduce作业。
使用Tableoutputformat
,您可以在映射器中添加context.write(key, new Delete(key.toString().getBytes()))
。
Map reduce可以作为Hbase的输入(源)和输出(汇)。在您的示例中,您需要编写自己的map reduce来从输入中读取数据,然后使用API
提供的reducer。TableMapReduceUtil.initTableReducerJob("targetTable",null,job);
job.setNumReduceTasks(0);
第二个参数为null,因为您正在使用API提供的reducer。您只需要将行键和delete作为映射器输出,然后reducer将其拾取并执行任务。你可以在这里找到它的基本用法。不是您的确切解决方案,而是mapreduce和hbase使用背后的概念