首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多个扫描对象上的HBase Mapreduce

多个扫描对象上的HBase Mapreduce
EN

Stack Overflow用户
提问于 2011-01-28 04:26:25
回答 3查看 4.8K关注 0票数 3

我只是想为我们正在做的一些数据分析工作评估一下HBase。

HBase将包含我们的事件数据。关键字是eventId + time。我们希望对日期范围内的几个事件类型(4-5)运行分析。事件类型总数约为1000个。

在hbase表上运行mapreduce作业的问题是initTableMapperJob (如下所示)只接受一个扫描对象。出于性能原因,我们只想扫描给定日期范围内4-5个事件类型的数据,而不是1000个事件类型。如果我们使用下面的方法,那么我猜我们没有这个选择,因为它只需要一个扫描对象。

公共静态无效initTableMapperJob(字符串表,扫描扫描,类映射器,类outputKeyClass,类outputValueClass,org.apache.hadoop.mapreduce.Job作业)抛出IOException

是否可以在扫描对象列表上运行mapreduce?有什么解决方法吗?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-01 06:06:24

TableMapReduceUtil.initTableMapperJob将您的作业配置为使用TableInputFormat,正如您所提到的,它只占用一个Scan

这听起来像是想要扫描一个表的多个段。为此,您必须创建自己的InputFormat,就像MultiSegmentTableInputFormat一样。扩展TableInputFormatBase并覆盖getSplits方法,以便它为表的每个开始/停止行段调用一次super.getSplits。(最简单的方法是每次都使用TableInputFormatBase.scan.setStartRow() )。将返回的InputSplit实例聚合到单个列表中。

然后自己配置作业以使用您的自定义MultiSegmentTableInputFormat

票数 9
EN

Stack Overflow用户

发布于 2011-01-29 01:56:20

您要查找的是类:

org/apache/hadoop/hbase/filter/FilterList.java

每次扫描都可以使用一个过滤器。过滤器可能非常复杂。FilterList允许您指定多个单个筛选器,然后在所有组件筛选器之间执行and或or。您可以使用它在行上构建任意布尔查询。

票数 0
EN

Stack Overflow用户

发布于 2013-04-02 03:59:19

我已经尝试了Dave L的方法,它工作得很好。

要配置地图作业,可以使用函数

代码语言:javascript
运行
复制
  TableMapReduceUtil.initTableMapperJob(byte[] table, Scan scan,
  Class<? extends TableMapper> mapper,
  Class<? extends WritableComparable> outputKeyClass,
  Class<? extends Writable> outputValueClass, Job job,
  boolean addDependencyJars, Class<? extends InputFormat> inputFormatClass)

其中inputFormatClass指的是Dave L的评论中提到的MultiSegmentTableInputFormat。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4821455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档