之前有幸在MOOC学院抽中小象学院hadoop体验课。 
这是小象学院hadoop2.X概述第八章的笔记 
主要介绍HBase,一个分布式数据库的应用案例。

案例概况:

1)时间序列数据库(OpenTSDB) 
用HBase储存时间序列数据,每时每刻都在解决,数据库为开源 
2)HBase爬虫调度库 
垂直搜索爬虫 
大规模爬虫(全网爬虫) 
这里界定URL爬虫调度 
3)HBase文档库 
储存文档数据库,偏重于储存 
4)银行人民币查询系统

不在博客园上阅读时才会看到的,这篇博文归http://www.cnblogs.com/weibaar 所有

仅保证在博客园博客上的排版干净利索还有代码块与图片正确显示,他站请保留作者信息尊重版权啊

HBase在实际问题中的应用:

当数据需要随机读写应用,或者高并发操作(大数据多次操作),或者当数据结构简单,但是量大(非关系型需要大量应用join操作) 
HBase对关系型查询,如join等比较难操作 
关键要设计Rowkey,可加快查询 
常用语言有Java, thrift引用其他语言操作

在rowkey设计里要避免rowkey热点,要充分利用rowkey有序特点,并可以把需求字段组合成rowkey

时间序列数据库

OpenTSDB属于分布式、可伸缩的时间序列数据库 
可以在秒级数据进行采集,并支持永久存储与容量规划,另外可以从不同的metrics进行存储、索引 
普通mysql容量不够,维度支持不够 
该数据库的经验(应该会有遗漏。。) 
1)更多的列,更多的数据,扫描更快(在列上扫描比行上扫描快) 
2)要让每一行的数据相对独立。把行按照一定的规律进行切分(譬如认为10秒是一行数据,时间戳) 
3)要在每一个KeyValue里储存更多的数据 
4)不要把同步的储存到server里面(如HTable/HTablePool等),多用asynchbase的护理高并发数据库 
5)key尽量等长 
6)不要在一个Region里储存过多?

储存时间序列的方法

每一行保存一个metric & time 以及值,这样可以按不同维度储存 
把metric id放在时间前面做组合的key,能够更快扫描相应的维度,而且可以节省储存空间(把metrics编号,而不是直接用其名字做metrics)

还可以把行变宽,使行储存更多数据(+0,+1,+2),但是这个不会节省任何空间,只是展示上有所变化而已 
但是行不能无限度变宽。 
另外,为了防止网络中断错行,建议按照时间戳分行,而不是时间+1、+2、+3这样按列数断行 
有相应的PDF,网上搜就可以了。。

总结

加宽行可以增加扫描速度,组合使用rowkey,但这些并不能节省空间 
只有合并列、缩短column family名字才能一定程度上缩短空间


垂度爬虫调度库

多个组(如图片组新闻组等)同时进行爬虫处理,并储存到调度库里,HBase定期读取即可

特点

爬虫软件需要根据实时性、优先级等存储调度需要爬取的url 
且爬虫需要为不同组维护url列表 
基本上是队列特征,先插入的URL要优先爬取。但是也要有可以自定义优先级的功能。而且由于数据量差异大(图片很大),也要合理分配资源。 
如垂直业务同时调度、站点抓取速度限速处理、还有时间戳调度处理。

调度库

为不同频道储存host特点及host url列表。 
在url里按照hostid与优先级排序 
这里符合之前OpenTSDB的特性,不要直接用名字做rowkey,而是用ID(来自host name表)排序 
这样就可以有间隔的扫描线程来执行URL

总结:

要充分运用rowkey进行有序排序 
要把rowkey融入有用的字段hostid+PID+URLID 
不要直接用字符串作为rowkey,而是编码以后(整数)进行扫描,节省空间(因为每个列都要储存rowkey 
而且整数化以后就规整化了


文档库

文档库与调度库原理比较相似 
文档库,可以存储网页分析以后更加精细化的数据

特点:

数据格式不一样,需要实时读取和写入(还有更新),数据之间存储会有关联(如BLOG的评论和正文之间是有关联的)

不在博客园上阅读时才会看到的,这篇博文归http://www.cnblogs.com/weibaar 所有

仅保证在博客园博客上的排版干净利索还有代码块与图片正确显示,他站请保留作者信息尊重版权啊

技术特点

拆分基础数据和动态数据(两个column family) 
基础的基本不会变(网页标题啊内容啊创建时间啊) 
动态数据可以实时变化(浏览量啊等等) 
这里不再是一个server应对不同组,而是多个server应对多个组,以应对不同组的不同数据精细化要求 
关联


不在博客园上阅读时才会看到的,这篇博文归http://www.cnblogs.com/weibaar 所有

仅保证在博客园博客上的排版干净利索还有代码块与图片正确显示,他站请保留作者信息尊重版权啊

银行人民币查询系统

特点:

规模极大,且设备分散(如ATM啊点钞机啊等等),采集系统要求要及时且不能有遗漏 
可按照人民币冠字号来看,做HASH值或逆转(因为冠字号可能是连续的,有些连号钞票会储存在一起,无法有效切分数据储存,有时候会造成访问热点,因此需要更改冠字号来做rowkey) 
要求 
及时可靠,能够快速检索及存储,且扩展性要好

因为涉及到多设备采集输入,所以可以用Flume+HBase解决问题 
选择HBase的原因是应用非常简单,只是简单查询而已,用HBase就够了 
可以参考Cloudera开源的日志收集系统

总结

HBase常常需要与其他系统结合使用 
要尽量避免产生访问热点(尤其要避免直接采用时间作为rowkey),要把连续号打散

Hadoop-HBASE案例分析-Hadoop学习笔记<二>的更多相关文章

  1. 《SQL必知必会》学习笔记二)

    <SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...

  2. Django学习笔记二

    Django学习笔记二 模型类,字段,选项,查询,关联,聚合函数,管理器, 一 字段属性和选项 1.1 模型类属性命名限制 1)不能是python的保留关键字. 2)不允许使用连续的下划线,这是由dj ...

  3. ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  4. python3.4学习笔记(二) 类型判断,异常处理,终止程序

    python3.4学习笔记(二) 类型判断,异常处理,终止程序,实例代码: #idle中按F5可以运行代码 #引入外部模块 import xxx #random模块,randint(开始数,结束数) ...

  5. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  6. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  7. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  8. JMX学习笔记(二)-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

  9. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  10. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

随机推荐

  1. .NET 响应式自动缩略图服务器

    做互联网网站,总是会涉及到缩略图问题,之前一直是在上传图片时生成不同尺寸的缩略图,一直感觉又费力又不好管理,之后就写子 ThumbnailServer 用于部署一个图片服务器,在使用图片时才将图片转为 ...

  2. 帆软报表FineReport中数据连接之Tomcat配置JNDI连接

    1. 问题描述 在帆软报表FineReport中,通过JNDI方式定义数据连接,首先在Tomcat服务器配置好JNDI,然后在设计器中直接调用JNDI的名字,即可成功使用JNDI连接,连接步骤如下: ...

  3. 电脑控制Android设备的软件——Total Control

    最早开始搞Android开发时,为了调试方便,想找一个Android下的远程控制软件,支持在电脑端远程控制和同步显示Android设备.先后试了360手机助手.Mobizen.Vysor和Mirror ...

  4. 一个页面从输入URL到页面加载显示完成,这个过程都发生了什么?

    对于网址栏的URL不同的操作方式有不同的加载资源.获取数据的方式,下面的详细过程针对"在地址栏输入URL,按enter(回车)键加载资源"此种操作方式做解析,其它的方式的过程大同小 ...

  5. UDP

    我们通过以下代码来连了解以下UPD 首先我们先创建Server类 package cn.a.qwe; import java.net.DatagramPacket; import java.net.D ...

  6. POJ2455Secret Milking Machine[最大流 无向图 二分答案]

    Secret Milking Machine Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11865   Accepted ...

  7. codevs 2594 解药还是毒药

    2594 解药还是毒药 http://codevs.cn/problem/2594/ 题目描述 Description Smart研制出对付各种症状的解药,可是他一个不小心,每种药都小小地配错了一点原 ...

  8. jQuery动画效果animate和scrollTop结合使用实例

    CSS属性值是逐渐改变的,这样就可以创建动画效果.只有数字值可创建动画(比如 "margin:30px").字符串值无法创建动画(比如 "background-color ...

  9. Web 开发中很实用的10个效果

    在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多,但是一时半会又想不起来在哪,所以养成知识整理的习惯是很有必要的.这篇文章给大家推荐10个在 Web 开发中很有用的效果,记 ...

  10. web 前端常用组件【06】Upload 控件

    因为有万恶的IE存在,所以当Web项目初始化并进入开发阶段时. 如果是项目经理,需要知道客户将会用什么浏览器来访问系统. 明确知道限定浏览器的情况下,你才能从容的让手下的封装必要的前端组件. 本篇文章 ...