繁体   English   中英

多个扫描对象上的HBase Mapreduce

[英]HBase Mapreduce on multiple scan objects

我正在尝试评估HBase我们正在做的一些数据分析。

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

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

public static void initTableMapperJob(String table,Scan scan,Class mapper,Class outputKeyClass,Class outputValueClass,org.apache.hadoop.mapreduce.Job job)抛出IOException

是否可以在扫描对象列表上运行mapreduce? 任何解决方法?

谢谢

TableMapReduceUtil.initTableMapperJob将您的作业配置为使用TableInputFormat ,正如您所记录的那样, TableInputFormat需要一次Scan

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

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

我尝试过Dave L'的方法而且效果很好。

要配置地图作业,您可以使用该功能

  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。

你正在寻找班级:

组织/阿帕奇/的Hadoop / HBase的/过滤/ FilterList.java

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM