假设HBase某张表有1000个Region,里面存储着100万行数据,现在需要统计满足某些条件的行数,普通的做法是使用Filter(过滤条件),通过HBase API将满足过滤条件的行数据Scan至客户端之后进行汇总,这需要在HBase RegionServer与Client之间传送大量的数据,占用大量的网络带宽,并影响响应时间。
这是一种典型的“移动数据”的计算方案,即将所有数据传送到计算节点后进行计算,熟悉Hadoop MapReduce的人知道,MR使用的是“移动计算”,即将计算任务传送到存储数据的节点,由这些节点负责完成计算流程,仅仅只返回计算的结果,这些节点与客户端之间仅仅需要传送各自的结果数据即可,减少网络带宽的同时,很大程度提高响应时间。
对应统计行数的例子,如果我们能够将计算任务(过滤数据、汇总结果)传送至HBase中存储这些数据的Region中,由这些Region完成各自的计算任务(过滤数据、汇总结果),然后将各自的结果(每个Region中满足条件的行数)返回至客户端,由客户端对这些结果(1000个Region会返回1000个整数)进行求和,即可得出最后的满足条件的总行数。可以看出这种方式是一种理想的计数方式。