如何在地图中扫描hbase减少作业

时间:2017-05-31 01:01:22

标签: java scala hadoop apache-spark mapreduce

我需要运行每小时分析存储在hbase中的元素,这意味着对于每个元素,我需要获取前一小时的数据进行分析。唯一的问题是,在没有mapreduce的情况下使用for循环时,我需要花费1个多小时来扫描所有内容。我们存储的数据超过100,000个。

数据不是连续的,而是按时间顺序排列,每2分钟一次。有一个哈希来防止扫描/写热点,所以键看起来像这样:

hash_elementName_epochTimestamp,例如100_element_1234567890。

我尝试使用TableMapReduceUtil.initTableMapperJob方法编写mapreduce程序来运行我的扫描。但是,TableMapReduceUtil.initTableMapperJob方法需要一个扫描对象,我无法弄清楚如何扫描我需要的所有元素,而不需要制作100,000个单独的扫描对象,也不会扫描整个表格。

其他人说有一个spark-hbase connector library我可以用它来利用Spark并将所有内容存储在内存中以便快速查询。问题是这段代码是用Scala编写的,我不知道也不能花时间学习。

是否有一个使用Java的spark-hbase连接器?有没有办法利用TableMapReduceUtil.initTableMapperJob方法快速扫描Hbase,即使有100,000个非连续扫描范围?

编辑:有人建议我应该使用开始和结束时间过滤器。问题是我对每一个元素都不感兴趣。我只对某些元素感兴趣。当我通过for循环进行查询时,我传入了我感兴趣的元素。现在使用TableMapReduceUtil,我只能创建一个扫描对象。

0 个答案:

没有答案