mapreduce - HBase Mapreduce 在多个扫描对象上

标签 mapreduce hbase

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

HBase 将包含我们的事件数据。键为 eventId + 时间。我们想要对日期范围内的几种事件类型 (4-5) 进行分析。事件类型总数约为1000个。

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

public static void initTableMapperJob(字符串表, 扫描扫描, 类映射器, 类输出KeyClass, 类输出值类, org.apache.hadoop.mapreduce.Job 作业) 抛出 IOException

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

谢谢

最佳答案

TableMapReduceUtil.initTableMapperJob 将您的作业配置为使用 TableInputFormat,正如您所注意到的,它需要一次 Scan

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

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

关于mapreduce - HBase Mapreduce 在多个扫描对象上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4821455/

相关文章:

hadoop - 如何使 Hadoop Distcp 复制自定义文件夹列表?

hadoop - Hadoop Fair/Capacity Scheduler 可以用在 MR1 上吗?

hadoop - 从Avro读取并写入Mapper中的多个HBase

java - 从 hbase 行中检索时间戳

java - Mapreduce - 排序作业?

mongodb - 什么时候需要 map reduce 进行数据库查询?

java - 如何在 Ubuntu 上保留两个 Hadoop 版本?

java - 数据核、HBase、JDO : "A property named javax.jdo.PersistenceManagerFactoryClass must be specified"

hadoop - HBase读取高负载

azure - HDInsight : HBase or Azure Table Storage?