转载自:http://www.cnblogs.com/panfeng412/archive/2011/11/19/2254921.html

1. 数据统计的需求

互联网上对于数据的统计,一个重要的应用就是对网站站点数据的统计,例如CNZZ站长统计、百度统计、Google Analytics、量子恒道统计等等。

网站站点统计工具无外乎有以下一些功能:

1)网站流量统计:包括PV、UV、IP等指标,这些统计指标可以以趋势图的形式展示出来,如最近一周、最近一个月等。

2)IP来源信息统计:记录各个来源IP下的访问PV数。

3)访问来源分析:记录访客是从哪些途径到达本网站的。

4)搜索引擎及搜索关键词分析:对于各个指定搜索引擎带来访问PV的变化及趋势进行分析;对不同时段内访客搜索关键词的流量趋势进行统计。

5)访问地区分析:统计不同时间段内各地区的PV浏览量、UV访客数的变化趋势。

6)最近访客流水:实时显示网站当前的被访问情况,包括访问时间、IP地址、来源网址、访问网址和来源地区等。

从统计的角度来看,这些业务功能的需求可以概括为:

1)各项统计指标的计算,如PV、UV、IP等,可以归结为的对一条一条数据求SUM、AVG等操作。

2)统计需求越来越要求实时性,访问来源随时随地发生,来源途径多样化。对于这类需求,不需要统计计算,而是要经过预处理后快速向用户展示其关心的数据。

3)可以将数据统计分为两部分来理解:一部分是对于实时数据的统计,动态展示站点的访问数据更新情况;另一部分是对于历史数据的统计,如用于各项报表分析。

2. HBase的实现思路

HBase是一个分布式的存储系统,可以很容易在廉价PC上搭建其大规模存储系统,用于存储海量数据,这使得HBase适合于作为站点数据统计工具的存储系统。

1)对于实时数据的统计,HBase能够提供较低延迟的读写访问,承受高并发的访问请求;而对于历史数据的统计,HBase则可以被视为一个巨大的Key-Value存储系统,用于存储各个网站上历史的访问信息,用于做离线的数据分析与报表生成。

2)对于像PV、UV、IP这样需要求累加计算的操作(求SUM/AVG),由于要对HBase表中相关记录进行扫描求和计算,所以如果被统计站点的数据量很大的话,使用HBase来做可能会保证不了很快的响应速度。也就是说,从前端发出一个查询请求到最终结果的响应,时间会比较长(超过1秒或更长)。对于这个问题,将在第3节进行讨论。

3)对于像站点访客流水信息这样的实时数据展示,则比较适合于使用HBase来做,只要我们设计了合理的key,那么在根据key取单条访问记录时响应速度会很快。

下面是一个使用HBase作为存储系统的结构示意图:

其中,HBase服务端就是指HBase集群,应用程序分别通过入库端与查询端对HBase进行写操作与读操作。

从HBase应用角度来看,可以分为两个不同的方向:

1)第一种方向,将HBase视为一个可靠可用的容量巨大的Key-Value存储系统,使用HBase的作用很简单,就是将其作为一个黑匣子来使用,按照之前设计好的表结构来存储具有稀疏结构的数据。基于这种思路,如果HBase无法完全满足业务的需求,就在应用程序层次做一些设计或者优化工作,以最终满足业务的需求。

2)第二种方向,由于HBase是开源的,所以可以对HBase本身机制进行完善与扩展,最终形成一个能够满足业务需要的稳定可用的HBase版本。

3. 问题的解决思路

针对第2节中提到的在使用HBase进行累加计算的操作(求SUM/AVG)时的问题,下面给出几种解决问题的思路与方法。

基于第一种方向:

1)HBase服务端进行聚合计算,这样应用程序的查询端不必请求HBase响应大量数据进行传输,而只是在服务端计算后的结果,因此能够满足实时响应的需求。

基于第二种方向:

1)在HBase表设计时,加入一个空列专门用于统计所用,这样可以减少从HBase服务端到查询端的数据传输量。

2)应用程序端计算:

a) 入库端:在HBase表设计时,加入一个专门用于存储PV/UV这样累加结果的表,每次新来一条数据时,首先查询HBase表中上次记录下来的PV/UV数,然后判断是否加1后,再重新写回HBase表中相应key下。通过这种方式,查询端就可以直接通过HBase的一次get操作得到PV/UV。

b) 查询端:在查询端加入PV/UV的缓存,下一次查询请求来的时候,在已缓存PV/UV值的基础上,加上扫描HBase表中新增行的记录数(缓存更新的时间周期足够短的话,新增数会比较小,对HBase的查询响应会很快)。

HBase在数据统计应用中的使用心得的更多相关文章

  1. shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计

    shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...

  2. 通过Sqoop实现Mysql / Oracle 与HDFS / Hbase互导数据

    通过Sqoop实现Mysql / Oracle 与HDFS / Hbase互导数据\ 下文将重点说明通过Sqoop实现Mysql与HDFS互导数据,Mysql与Hbase,Oracle与Hbase的互 ...

  3. awk 常用选项及数组的用法和模拟生产环境数据统计

    awk 常用选项总结 在 awk 中使用外部的环境变量 (-v) awk -v num2="$num1" -v var1="$var" 'BEGIN{print ...

  4. 大数据学习day34---spark14------1 redis的事务(pipeline)测试 ,2. 利用redis的pipeline实现数据统计的exactlyonce ,3 SparkStreaming中数据写入Hbase实现ExactlyOnce, 4.Spark StandAlone的执行模式,5 spark on yarn

    1 redis的事务(pipeline)测试 Redis本身对数据进行操作,单条命令是原子性的,但事务不保证原子性,且没有回滚.事务中任何命令执行失败,其余的命令仍会被执行,将Redis的多个操作放到 ...

  5. Asp.net管理信息系统中数据统计功能的实现

    数据统计是每个系统中必备的功能,在给领导汇报统计数据,工作中需要的进展数据时非常有用. 在我看来,一个统计的模块应该实现以下功能: 能够将常用的查询的统计结果显示出来: 显示的结果可以是表格形式,也可 ...

  6. 大数据学习day33----spark13-----1.两种方式管理偏移量并将偏移量写入redis 2. MySQL事务的测试 3.利用MySQL事务实现数据统计的ExactlyOnce(sql语句中出现相同key时如何进行累加(此处时出现相同的单词))4 将数据写入kafka

    1.两种方式管理偏移量并将偏移量写入redis (1)第一种:rdd的形式 一般是使用这种直连的方式,但其缺点是没法调用一些更加高级的api,如窗口操作.如果想更加精确的控制偏移量,就使用这种方式 代 ...

  7. 数据分页处理系列之二:HBase表数据分页处理

      HBase是Hadoop大数据生态技术圈中的一项关键技术,是一种用于分布式存储大数据的列式数据库,关于HBase更加详细的介绍和技术细节,朋友们可以在网络上进行搜寻,笔者本人在接下来的日子里也会写 ...

  8. HBase表数据分页处理

    HBase表数据分页处理 HBase是Hadoop大数据生态技术圈中的一项关键技术,是一种用于分布式存储大数据的列式数据库,关于HBase更加详细的介绍和技术细节,朋友们可以在网络上进行搜寻,笔者本人 ...

  9. 本文将介绍“数据计算”环节中常用的三种分布式计算组件——Hadoop、Storm以及Spark。

    本文将介绍“数据计算”环节中常用的三种分布式计算组件——Hadoop.Storm以及Spark. 当前的高性能PC机.中型机等机器在处理海量数据时,其计算能力.内存容量等指标都远远无法达到要求.在大数 ...

随机推荐

  1. ARGOX 力象 OS-214Plus 条码打印机 B/S 打印

    官网demo下载地址: http://www.argox.com.cn/servicedev/5/c 页面中嵌入activeX控件: <object id="ArgoxPrinter& ...

  2. 蓝桥杯 第三届C/C++预赛真题(4) 奇怪的比赛(递归)

    某电视台举办了低碳生活大奖赛.题目的计分规则相当奇怪: 每位选手需要回答10个问题(其编号为1到10),越后面越有难度.答对的,当前分数翻倍:答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错 ...

  3. TArray数组

    TArray<int32> arr; arr.Init(,); ; index < arr.Num(); index++) { FString str = FString(" ...

  4. Http服务器实现文件上传与下载(一)

    一.引言 大家都知道web编程的协议就是http协议,称为超文本传输协议.在J2EE中我们可以很快的实现一个Web工程,但在C++中就不是非常的迅速,原因无非就是底层的socket网络编写需要自己完成 ...

  5. 因为td设置relative导致td的border问题

    在ff下因为td设置relative导致td的border问题:其实是个老问题了~碰到了拿出来记录下 td 中添加如下样式 background-clip: padding-box

  6. HDU 1695 GCD (欧拉函数,容斥原理)

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  7. Oracle数据库的归档模式(archivelog mode)

    Oracle数据库可以运行在2种模式下: 归档模式(archivelog) 归档模式可以提高Oracle数据库的可恢复性,生产数据库都应该运行在此模式下,归档模式应该和相应的备份策略相结合,只有归档模 ...

  8. js function,prototype,sub.

    Ojbect 和Function 与普通函数和实例对象 1.实例对象的proto 指向构造函数的原型对象 2.实例对象的proto 指向Ojbect的原型 3.所有函数的proto 都指向Functi ...

  9. windows7上使用docker容器

    1.安装 下载DockerToolbox,并安装. 下载地址:https://dn-dao-github-irror.daocloud.io/docker/toolbox/releases/downl ...

  10. kubestack 源码分析

    简介:KubeStack is an OpenStack network provider for kubernetes.KubeStack is devided into two functions ...