HBase在数据统计应用中的使用心得
转载自: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在数据统计应用中的使用心得的更多相关文章
- shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计
shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...
- 通过Sqoop实现Mysql / Oracle 与HDFS / Hbase互导数据
通过Sqoop实现Mysql / Oracle 与HDFS / Hbase互导数据\ 下文将重点说明通过Sqoop实现Mysql与HDFS互导数据,Mysql与Hbase,Oracle与Hbase的互 ...
- awk 常用选项及数组的用法和模拟生产环境数据统计
awk 常用选项总结 在 awk 中使用外部的环境变量 (-v) awk -v num2="$num1" -v var1="$var" 'BEGIN{print ...
- 大数据学习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的多个操作放到 ...
- Asp.net管理信息系统中数据统计功能的实现
数据统计是每个系统中必备的功能,在给领导汇报统计数据,工作中需要的进展数据时非常有用. 在我看来,一个统计的模块应该实现以下功能: 能够将常用的查询的统计结果显示出来: 显示的结果可以是表格形式,也可 ...
- 大数据学习day33----spark13-----1.两种方式管理偏移量并将偏移量写入redis 2. MySQL事务的测试 3.利用MySQL事务实现数据统计的ExactlyOnce(sql语句中出现相同key时如何进行累加(此处时出现相同的单词))4 将数据写入kafka
1.两种方式管理偏移量并将偏移量写入redis (1)第一种:rdd的形式 一般是使用这种直连的方式,但其缺点是没法调用一些更加高级的api,如窗口操作.如果想更加精确的控制偏移量,就使用这种方式 代 ...
- 数据分页处理系列之二:HBase表数据分页处理
HBase是Hadoop大数据生态技术圈中的一项关键技术,是一种用于分布式存储大数据的列式数据库,关于HBase更加详细的介绍和技术细节,朋友们可以在网络上进行搜寻,笔者本人在接下来的日子里也会写 ...
- HBase表数据分页处理
HBase表数据分页处理 HBase是Hadoop大数据生态技术圈中的一项关键技术,是一种用于分布式存储大数据的列式数据库,关于HBase更加详细的介绍和技术细节,朋友们可以在网络上进行搜寻,笔者本人 ...
- 本文将介绍“数据计算”环节中常用的三种分布式计算组件——Hadoop、Storm以及Spark。
本文将介绍“数据计算”环节中常用的三种分布式计算组件——Hadoop.Storm以及Spark. 当前的高性能PC机.中型机等机器在处理海量数据时,其计算能力.内存容量等指标都远远无法达到要求.在大数 ...
随机推荐
- ubuntu 终端$换行
编辑~/.bashrc文件 sudo gedit ~/.bashrc 红色部分为添加的 \n if [ "$color_prompt" = yes ]; then PS1= ...
- scheme 中的宏使用
#lang scheme ( define-syntax my-when ( syntax-rules () [ ( _ pred body ... ) ( if ...
- 【转】MySQL常用命令总结
http://blog.csdn.net/qq_33850438/article/details/52144686 MySQL常用的基本操作,以下都是MySQL 5.0下测试通过首先说明下,记住在每个 ...
- C# 多线程学习(五)线程同步和冲突解决
from:https://blog.csdn.net/codedoctor/article/details/74358257 首先先说一个线程不同步的例子吧,以下为售票员的模拟售票,多个售票员出售10 ...
- 自己搭建v,p,n过程
安装dockeryum install -y docker把docker设置为服务systemctl enable docker.service启动dockersystemctl start dock ...
- CAS SSO单点登录框架介绍
1.了解单点登录 SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: 1) User(多个) 2) Web 应用( ...
- Ubuntu右键添加:open in terminal
1.安装软件nautilus-open-terminal sudo apt-get install nautilus-open-terminal 2.重新加载文件管理器 nautilus -q 重新打 ...
- spring boot打包会有.war.original文件的原因 (笔记)
今天使用spring boot 2.1.1.RELEASE版本搭建项目,虽然可以直接打包成可运行的jar包,但是由于公司准备采用docker容器来管理项目,所以需要把jar包变成war包,并且war包 ...
- 洛谷OJ P2846 LJJ的数学课
题目链接:传送门 题目大意:略 题目思路:线段树or树状数组 我们可以将区间值做一些调整.a*3+b*2+c=a+(a+b)+(a+b+c) 也就是利用前缀和建树.然后单点更新也就转换成了区间更新.修 ...
- mysql连接远程数据库的用法
mysql -u root -p 等这些常用的参数外,你知道多少?来测试一下吧 一,mysql命令行参数 Usage: mysql [OPTIONS] [database] //命令方式 -?, ...