在我的一个项目中,我要求通过删除不再与银行关联的客户的行来保管HBASE表。
我收到一个包含customerid的文本文件(也是HBASE表中的行键)。文本文件中的每一行都包含唯一的客户ID,用于从表中删除客户详细信息。
我认为我不能使用TableMapReduceUtil.initTableMapperJob来启动仅映射作业,因为mapclass期望输入来自表本身而不是HDFS上的文本文件。
答案 0 :(得分:0)
您可以使用NLineInputFormat
和TableOutputFormat
来编写地图缩减作业。
使用Tableoutputformat
,您可以在映射器中执行context.write(key, new Delete(key.toString().getBytes()))
。
答案 1 :(得分:0)
Map reduce可以用作Hbase的输入(源)和输出(接收器)。在您的情况下,您需要编写自己的map reduce来从输入中读取数据,然后使用API提供的reducer
TableMapReduceUtil.initTableReducerJob("targetTable",null,job);
job.setNumReduceTasks(0);
第二个参数为null,因为您使用的是API提供的reducer。您只需要处理行键并删除作为映射器输出,并且reducer将其拾取并执行其工作。您可以找到基本用法here。不是您的确切解决方案,而是mapreduce和hbase使用背后的概念