平台中HBase库数据量如何统计呢?

平台中HBase库数据量如何统计呢?

  • 1. 什么需求?
  • 2. 怎么做?
    • 2.1 弯路
    • 2.2 接坑
  • 3. HyperLogLog基数统计算法是什么?
  • 4. HLL验证
  • 5. 如何应用到需求中?

这是一两年前的任务单了,来得比较突然,就是需要知道一下目前平台中数据总量(存储量和条数),每日新增数据量,表中字段有值率。
哇,接到这个任务,感觉存储量直接看集群统计总容量就好,条数怎么整?
下面我就针对HBase库中的条数,每日新增条数,字段个数 来讲讲我们当年走过的弯路,填过的坑。

1. 什么需求?

统计每张HBase表的数据量,精确到字段级别,还有统计每日新增条数。
分析一下HBase的表,每张表有存储周期TTL,表有不同的入库类型,如果是全量表还好,每次直接统计,但是又有增量标识的表,此表示堆积的过程,需要统计历史条数,再在累加新增,于此同时还需要将TTL过后的数据除去,好复杂啊~

2. 怎么做?

2.1 弯路

看到这种需求,那肯定拿出Hadoop最有历史的MR来实现,然后我们一个兄弟吭哧吭哧设计了好久,还让其他兄弟帮他拿现场数据验证,发现现场表太多了,预估跑2-3天都不一定跑完历史数据,更别说新增,也别说去除TTL后的数据,者方案直接耗时1个月,写方案到验证,我能说简直无法使用,并且被一通批,那兄弟实在搞不定的情况下,转交到我手上了。

2.2 接坑

本博主刚看到上面坑爹的方案,感觉就不是什么好的,咱不说统计量合并,难道跑MR现场其他业务部跑了,让你这个统计任务占用的满满的?
我无意间看到Redis在优化他们的统计是,提到了HyperLogLog基数统计算法,我就到网上搜了把实现原理,并下载相关的实现代码验证了一把,确实效率高,并且准确率也高居然可以99.99以上,并且准确率可以由自己设置的参数控制。就暂定这个方案啦~

3. HyperLogLog基数统计算法是什么?

HyperLogLog(下文简称为 HLL)是 Redis 2.8.9 版本添加的数据结构,它用于高性能的基数(去重)统计功能,它的缺点就是存在极低的误差率。
。。待填充

4. HLL验证

下载下来HLL的java实现源码,写了个小demo验证了下
java实现的HLL代码链接

验证代码如下:

5. 如何应用到需求中?

你可能感兴趣的:(HBase,hbase)