我在看下面的场景。我每天都会收到一份数据文件。我以文件yyyymmdd格式将其添加到hbase中。所以在一段时间内我有很多数据库,例如。
tempdb-20121220
tempdb-20121221
tempdb-20121222
tempdb-20121223
tempdb-20121224
tempdb-20121225
现在我要做的是为一个特定的日期范围获取匹配该范围的表的列表,这样我就可以创建索引。我使用的是hbase-0.90.6
就我的研究而言,tablemapreduceutil.inittablemapperjob只需要1个表名。
TableMapReduceUtil.initTableMapperJob(
tableName, // input HBase table name
scan, // Scan instance to control CF and attribute selection
HBaseIndexerMapper.class, // mapper
null, // mapper output key
null, // mapper output value
job
);
我已经能够得到表的列表并在循环中运行它,但是我的想法是我可以循环所有的表,扫描它(或者其他一些东西),这样最终我就可以得到合并/合并的结果,以便进行索引。
实现这一目标的任何方向都将是伟大和有益的。
2条答案
按热度按时间yzuktlbb1#
好的,请检查一下
HBase 0.94.6
来源(看起来他们最接近你)。在那里,您将找到multitableinputformat类(按照链接查看javadoc,包括示例),它满足您的需要。就在几天前,我有经验将这个类添加到HBase 0.94.2
(实际上CDH 4.2.1
)基于项目。成功了。这似乎正是你所需要的,并在非常有效的方式。这里唯一的问题是您将有一个Map程序处理所有数据。为了区分你可能需要拿的table
TableSplit
从0.94.6类,重命名它有点不同,并端口,以不破坏您的环境。请检查tablemapreduceutil中的差异-您需要手动配置扫描,以便输入格式能够理解它们的配置。也可以考虑简单地转移到
HBase 0.94.6
-更简单的方法是我没能理解它。我花了大约12个工作小时来了解这里的问题/调查解决方案/了解我的cdh 4.2.1问题/移植所有内容。对我来说,好消息是cloudera打算在cdh4.3.0中提高到0.94.6。更新1:
CDH 4.3.0
它包括hbase 0.94.6和所有必需的基础结构。update2:我转向了另一种解决方案-自定义输入格式,它结合了几个按键混合行的hbase表。碰巧非常有用,特别是有适当的钥匙设计。在一个Map器中可以得到整个聚合。我正在考虑在github上发布这个代码。
qjp7pelc2#
List<scans>
也是一种方式。我也同意multipletableinputformat:通过这种方式,我们用hbase名称空间表解决了我们的多租户需求。对于mapper中的ex:dev1:tablex(dev1接收的数据)uat1:tablex(uat1使用的数据),我们希望比较这两个名称空间表以继续。
在内部,它使用了多个表inputformat,如tablemapreduceutil.java中所示