我需要运行每小时分析存储在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,我只能创建一个扫描对象。