构建在HDFS之上的分布式,面向列的存储系统,使用zookeeper做协同服务,在需要实时读写和随机访问超大规模数据集的时候使用
缺点:非关系型,不支持SQL,数据类型单一(字符串,无类型),之支持单行事物
优点:大(上亿行,百万列),面向列/列簇的存储和控制权限,稀疏存储(对于NULL列不占空间),无模式,多版本
 
Hbase将数据(storeFile-Hfile二进制流形式)存储在HDFS的数据块儿上,Hbase HRegin server集群中所有region的数据在服务器启动时都被打开的,并且在内存中初始化了一些memstore,加快了响应。
Hadoop的block中的数据文件默认关闭,在需要时才打开,处理完就关闭,增加了响应时间
 
为什么实时,LSM-Tree + HTable(region分区) + Cache
客户端提交请求,可以获得(-ROOT- .META.)信息缓存在客户端本地,减少查找成本,根据这个信息定位到要查询数据所在的HRegion server服务器,在服务器上定位到与请求对应的region(看下region是否缓存在memstore(按key排序的树形结构缓冲区),有则直接返回,没有则读持久化的storefile(也是按key排序的属性文件,并且为范围查找和block查询优化过))上查找要匹配的数据。
磁盘读取按块读取,如果在Blockcache中查到则返回,否则去storefile文件中读取一个Block,没有就将该数据Block放到HRegion server的blockcache中,接着读下一个。直到读完。这里的blockcache有lru清理
 
这个文章对于理解很有帮助,转一些内容,谢谢作者分享

HBase的逻辑数据模型:

HBase的物理数据模型(实际存储的数据模型):

物理上按照rowkey字典序(10,100,11)排列,所以key设计要充分利用这个有序特性,将经常一起存取的行存储在一起,需要整型自然序要用0进行昨填充,行的一次读写是原子的
访问Hbase行只有三种方式:
1. 通过单个rowkey
2. 通过rowkey的range全表扫描
访问控制,磁盘和内存的使用统计都是在列簇层面进行的,可以控制一些应用只能浏览,一些应用可以创建等
Cell 是由 {row key,column(=< family> + < label>),version} 唯一确定的单元
Table在行方向上分割为多个HRegion,每个region分散在不同的region server中
每个HRegion由多个store(columns family)组成,每个store由memstore和多个storefile组成。
这里就可以理解,首先从行的层面,rowkey关系到region的分割, 从列簇层面,每个列簇又影响HRgion下面Store的分配
table(n个rowkey) -》 按照rowkey拆分成多个HRegion -》 按照分布策略分散到不同的HRegion server -》 每个HRegion内按照列簇分多个store -》每个store按照LSM Tree结构分为memstore/storefile
 
 
HMaster:管理region到region server的分配/region server负载均衡/发现失效的regionserver并重新分配region/hdfs上垃圾文件回收/处理schema更新请求
HRegionServer:维护HMaster分配给他的region/处理对这些region的io请求/负责HRegion太大的切分
Client:访问HBASE,HMaster仅维护table和region的元数据信息,而table的元数据信息在zookeeper上也有,寻址访问zookeeper和region server,数据读写访问region server所以client访问hbase上的数据不需要master参与
HRegion:table在行方向上分割为多个Region,Region是HBase中存储和负载均衡的最小单元
  1. < 表名,startRowkey,创建时间>
  2. 由目录表(-ROOT-和.META.)记录该region的endRowkey
Store:每个region由一个或多个store组成,每个列簇建一个store(相当于把一起访问的数据放在一个store里)
基于LSM结构的存储方式:
Memstore:内存中,保存修改的数据KV,当达到一定大小就被flush到文件,生成一个快照
Storefile:底层持久化文件,以HFile保存数据
 
HLog(hadoop sequence file): 用来记录操作内容的日志,只有日志写入成功,才会通知客户端操作成功。每个HRegionServer中都有一个HLog对象,HLog是一个实现Write Ahead Log的类并且所有region共享一个Hlog实例,数据按照到达顺序写入,在每一次用户操作写入MemStore的同时,也会写一份数据到HLog文件中,HLog文件定期(当文件已持久化到StoreFile中的数据)会滚出新的,并且删除旧的文件。当HRegionServer意外终止 后,HMaster会通过Zookeeper感知到,HMaster首先会处理遗留的Hlog文件,将其中不同Region的Log数据进行拆分,分别放到相应Region的目录下,然后再将失效的Region重新分配,领取到这些Region的Regionserver在Load Region的过程中,会发现历史HLog需要处理,因此Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复
Zookeeper负责协调,通知各个组件:选主/存储Region寻址入口/监控Region server上下线并通知HMaster/存储HBase的schema和table元数据
 

HBASE小结--待续使用的更多相关文章

  1. 使用hbase小结

    背景 hbase中一张表的rowkey定义为时间戳+字符串 需求 根据时间戳和列簇中某列的值为"abc",导出一天内的数据到excel中. 使用FilterList FilterL ...

  2. 三星450R5J windows8.1系统重装小结

    本人一台三星450R5J,到今年也差不多五六年了.虽然颜值很高,但是用久了真的不行,毕竟是属于商务型笔记本,这里我就不晒配置了. ​ 比较一下四五年前的三星与现在使用的华硕,三星看起来更鲜. ​ ​准 ...

  3. CSS常见选择器

    一.元素选择器 p,html,h1, h2 1.多个元素一起设置同一种风格, 则用逗号“,”隔开(选择器分组) 2.通配符选择,  *{Color:red}  表示文档中所有元素都为红色 二.类选择器 ...

  4. Hbase脚本小结

    脚本使用小结: 1.开启集群,start-hbase.sh 2.关闭集群,stop-hbase.sh 3.开启/关闭所有的regionserver.zookeeper,hbase-daemons.sh ...

  5. Hbase客户端API基础小结笔记(未完)

    客户端API:基础 HBase的主要客户端接口是由org.apache.hadoop.hbase.client包中的HTable类提供的,通过这个类,用户可以完成向HBase存储和检索数据,以及删除无 ...

  6. Window中调试HBase问题小结

    1.好久没用log4j了,转到logback好多年了,hbase程序运行时,报缺少log4j配置,那么,就转去logback吧(以下的XXX表示版本号). 原先lib包里面有log4j-XXX.jar ...

  7. Hbase 命令小结

    1.创建test,如果存在先删除 hbase(main)::> disable 'test' row(s) in 1.4250 seconds hbase(main)::> drop 't ...

  8. 2.hbase原理(未完待续)

    hbase简介相关概念hmsterhregionserver表regionhstorememstorestorefilehfileblockcacheWALminorcompactmajorcompa ...

  9. hbase优化小结

    目录: 1,背景 2,GC 3,hbase cache 4,compaction 5,其他 1,背景 项目组中,hbase主要用来备份mysql数据库中的表.主要通过接入mysql binlog,经s ...

随机推荐

  1. 【ZZ】详解哈希表的查找

    详解哈希表的查找 https://mp.weixin.qq.com/s/j2j9gS62L-mmOH4p89OTKQ 详解哈希表的查找 2018-03-01 算法与数据结构 来自:静默虚空 http: ...

  2. hierarchical_mutex函数问题(C++ Concurrent in Action)

    C++ Concurrent in Action(英文版)书上(No.52-No.53)写的hierarchical_mutex函数,只适合结合std::lock_guard使用,直接使用如果不考虑顺 ...

  3. Scrapy学习篇(七)之Item Pipeline

    在之前的Scrapy学习篇(四)之数据的存储的章节中,我们其实已经使用了Item Pipeline,那一章节主要的目的是形成一个笼统的认识,知道scrapy能干些什么,但是,为了形成一个更加全面的体系 ...

  4. 跨域CORS原理及调用具体示例

    原文: https://www.cnblogs.com/keyi/p/6726089.html 上篇博客介绍了JSONP原理,其不足,就是只能使用GET提交,若传输的数据量大,这个JSONP方式就歇菜 ...

  5. [UE4]Visiblity、Render Opacity

    Visiblity 1.Visible 默认是visible,可见,并且可响应事件(如点击事件) 2.Collapsed 不可见.不响应事件.不占用容器空间 3.Hidden 不可见,不响应事件,但占 ...

  6. 关于AJAX与form表单提交数据的格式

    一 form表单传输文件的格式: 只有三种: multipart/form-data 一般用于传输文件,图片文件或者其他的. 那么其中我们默认的是application/x-www-form-urle ...

  7. Linux架构分布式集群之基础篇

    部署linux环境,安装jdk 1.安装rar命令行 wget http://www.rarlab.com/rar/rarlinux-x64-4.2.0.tar.gz由于在此目录下解压rar后linu ...

  8. python学习之----BuildSoup和正则表达式

    在抓取网页的时候,BeautifulSoup 和正则表达式总是配合使用的.其实,大多数支 持字符串参数的函数(比如,find(id="aTagIdHere"))都可以用正则表达式实 ...

  9. MVC Html辅助方法DropDownList的简单使用、连接MYSQL数据库用自定义model类接收

    附上启发链接:https://www.cnblogs.com/CreateMyself/p/5424894.html [HttpGet] public ActionResult Edit(int id ...

  10. 原生javascript AJAX 三级联动

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...