【发布时间】:2015-08-17 01:21:41
【问题描述】:
在我的一个项目中,我需要通过删除不再与银行关联的客户的行来维护 HBASE 表。
我得到一个包含 customerid 的文本文件(也是 HBASE 表中的行键)。文本文件中的每一行都包含唯一的客户 ID,用于从表中删除客户详细信息。
我认为我不能使用 TableMapReduceUtil.initTableMapperJob 来启动仅地图作业,因为地图类会期望输入来自表本身而不是 HDFS 上的文本文件。
【问题讨论】:
在我的一个项目中,我需要通过删除不再与银行关联的客户的行来维护 HBASE 表。
我得到一个包含 customerid 的文本文件(也是 HBASE 表中的行键)。文本文件中的每一行都包含唯一的客户 ID,用于从表中删除客户详细信息。
我认为我不能使用 TableMapReduceUtil.initTableMapperJob 来启动仅地图作业,因为地图类会期望输入来自表本身而不是 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);
第二个参数为空,因为你使用的是API提供的reducer。您只需要处理行键并删除作为映射器的输出,reducer 会拾取它并执行他的工作。您可以找到基本用法here。不是您的确切解决方案,而是 mapreduce 和 hbase 使用背后的概念
【讨论】: