我只是想针对我们正在做的一些数据分析工作来评估 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/