Dav*_*man 13
HBase中的数据聚合与"实时分析"需求相交叉.虽然HBase不是为这种类型的功能而构建的,但是它有很多需要.因此,将开发这样做的方式的数量.
1):在Hive中将HBase表注册为外部表并进行聚合.数据将通过HBase API访问,但效率并不高.使用Hbase配置Hive, 这是关于如何完成它的讨论.这是HBase数据分组的最有效方式.它确实意味着运行MR工作,但HHive,而不是HBase.
2)您可以使用位于HDFS中的HFiles中的HBase数据编写自己的MR作业.这将是最有效的方式,但并不简单,您处理的数据会有些陈旧.它是最有效的,因为数据不会通过HBase API传输 - 而是以顺序方式从HDFS直接访问.
3)下一版HBase将包含协处理器,可以在特定区域内进行聚合.您可以假设它们是RDBMS字中的一种存储过程.
4)在内存中,将在未来的HBase版本中计划将在一个节点中进行区域化的区域间MR作业.它将使协处理器能够进行更先进的分析处理.
快速随机读取=预先存储在HBase中的数据! 使用Hbase是什么...
1.存储大量数据的地方.
2.你可以从中进行超快速读取的地方.
3. SQL不会给你带来任何好处的地方(使用java).
虽然您可以在返回聚合结果之前从HBase读取数据并在Java数据结构中执行各种聚合,但最好将计算留给mapreduce.从您的问题来看,似乎您希望计算的源数据位于HBase中.如果是这种情况,您要使用的路由将HBase作为mapreduce作业的源数据.对其进行计算并返回聚合数据.但话又说回来,为什么你会从Hbase读取运行mapreduce工作?刚刚离开的数据坐在他们HDFS /蜂巢表和运行MapReduce作业THEN的数据加载到HBase的表"事先准备",这样就可以做到超快速从中随机读取.