之前有幸在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. iftop与dstat-一次网站故障分析经历

    一次网站分析与解决的经历,最后结果虽然很简单但是过程比较曲折.记录一下: 今天访问网站首页十分缓慢,页面半天都加载不出来.于是上服务器看看情况,通过top看到load和cpu以及磁盘io都很低,只能祭 ...

  2. 双11遇上ZBrushCore,如此优惠还等什么!

    对不起!让大家久等了,ZBrush简体中文版ZBrushCore这次是真的来了,恰逢双11,老板说了,钱不是问题,你们开心就好,特别是热爱3D的单身狗们!你们那么热爱这个行业,1099元/套终身授权使 ...

  3. github

    学习github的不错的资源 http://gitref.org/zh/index.html https://wuyuans.com/2012/05/github-simple-tutorial/#t ...

  4. BOM浏览器对象模型

    访问和操作浏览器窗口的模型称为浏览器对象模型BOM(Browser Object Model). BOM整体对象图. 核心是window对象: 以下有特殊双重身份: window对象既是ECMAScr ...

  5. Qt5.7.0配置选项(configure非常详细的参数)

    configure是一个命令行工具,用于配置Qt编译到指定平台.configure必须运行于Qt源码根目录.当运行configure时,编译源码使用的是所选工具链中的make工具. 一.源码目录.编译 ...

  6. Struts2 Interceptor学习

    Interceptor的设计思想,其实是Spring里面的AOP思想,尽管Struts2又有自己的Interceptor但是,在实际开发中,用的较少,SSH整合之后你可以采用AOP事务处理进行拦截,更 ...

  7. Java通过ODBC链接数据库并遍历结果的一个问题

    上一篇文章谈到怎么连接Oracle数据库,其实通过ODBC也差不多,只是driver要换成JdbcOdbcDriver.配置文件如下: driver=sun.jdbc.odbc.JdbcOdbcDri ...

  8. tensorflow学习笔记四:mnist实例--用简单的神经网络来训练和测试

    刚开始学习tf时,我们从简单的地方开始.卷积神经网络(CNN)是由简单的神经网络(NN)发展而来的,因此,我们的第一个例子,就从神经网络开始. 神经网络没有卷积功能,只有简单的三层:输入层,隐藏层和输 ...

  9. EventToCommand

    EventToCommand 在WPF中,并不是所有控件都有Command,例如TextBox,那么当文本改变,我们需要处理一些逻辑,这些逻辑在ViewModel 中,没有Command如何绑定呢?这 ...

  10. 常见排序java实现

    public class Sort { public static void main(String[] args) { int[] data = {49,38,65,97,76,13,27,49}; ...