构建在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. opengl 入门浅学(一)

    因为要做图形学的实验,又是要以OPENGL为基础,所以就稍微在网上查了一些资料. 我是带着目的去学习的,所以就没有打基础之类的学很深,浅尝. 今天试着搭简单框架,画出一个图形.大神请出门左转. #in ...

  2. [UE4]世界坐标和相对坐标

    一.世界坐标:相对于整个世界的坐标 二.相对坐标是相对于组件父级的坐标.如下图: 1.Mesh组件和CameraPositionArrow组件的相对坐标是相对于Root组件的坐标 2.Cube组件的相 ...

  3. Centos7下的systemctl命令与service和chkconfig

    博主使用的操作系统是最新的CentOS 7,所以可能和网上一些老的博文有一定出入,那是因为版本更新的原因. 这里写图片描述1 service service命令用于对系统服务进行管理,比如启动(sta ...

  4. T-SQL 类型转换

    use StudentManageDB go --定义变量并查询 declare @sumScore int select @sumScore=(CSharp+SQLServerDB) from Sc ...

  5. ACCESS常用数字类型的说明和取值范围

    下面是ACCESS常用数字类型的说明和取值范围列表明供参考 数字类型                 范围 Byte(字节)            介于 0 到 255 之间的整型数. Integer ...

  6. 禁用win7更新

    关闭自动更新服务Windows Update 第一种方法 ---------------------------------------------------------------- Win + ...

  7. ORACLE 通过连接查询更新 update select

    注意:  关键的地方是where 语句的加入. 在11G中, 如果不加11G , 或造成除匹配的行数更新为相应的值之后, 其余的会变成负数. 所以,执行前需要测试, 普通办法就是:  先查看需要更新的 ...

  8. 最精简的自定义.net 开发框架

    一. 通过自定义的HttpModule和HttpHandler,重写url,自定义路由规则,实现 Web API功能. 简单说 就是  请求路径 例如 service/method, 那么就指向当前应 ...

  9. CSS的4种定位方式比较

    CSS有四种定位(Positioning)方法:Static,Relative, Absolute和Fixed 元素flow, overlap 相对参照物: 能否用offset( top, left, ...

  10. flex布局 (引用阮一峰老师的flex布局-语法篇)

    一.Flex 布局是什么? Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为 Flex 布局. .box ...