构建在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. undefined reference to `__isnan'

    sjs@sjs-virtual-machine:~/work/Onvif$ arm-hisiv100nptl-linux-gcc *.c -lpthread -static -o ../../nfsm ...

  2. jQuery 事件的命名空间简单了解

    原文地址:http://www.jb51.net/article/43626.htm   用 jQuery 绑定和解绑事件监听器都是非常简单的,怎样精确地解绑其中一个监听器?我们需要了解一下事件的命名 ...

  3. mysql查询中取差集的问题

    有个场景 现在有个打卡的记录表(daka),记录了用户每天的打卡信息,同时还有个运动打卡表(sport_daka),如果用户有运动打卡则在运动打卡表里面记录. 现在要统计用户的每天的打开信息,包括运动 ...

  4. The type android.support.v4.view.ScrollingView cannot be resolved. It is indirectly referenced from

    前几天另一个项目使用RecyclerView控件,引用类库然后继承一切都很顺序 详细:http://www.cnblogs.com/freexiaoyu/p/5022602.html 今天打算将另一个 ...

  5. java jdk版本切换

    首先看链接: 1. 这个链接清晰,但不一定能成功,但也不一定:https://blog.csdn.net/spt_dream/article/details/70673836 2. 其次这个链接比较完 ...

  6. psql: could not connect to server: No such file or directory&&PGHOST

    由于环境变量 PGHOST配置不当引起的 postgres@pgdb-> psql psql: could not connect to server: No such file or dire ...

  7. Android--普通注册页面实现(无功能)

    reg.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmln ...

  8. MySQL/InnoDB中,对于锁的认识

    MySQL/InnoDB的加锁,一直是一个面试中常问的话题.例如,数据库如果有高并发请求,如何保证数据完整性?产生死锁问题如何排查并解决?我在工作过程中,也会经常用到,乐观锁,排它锁,等.于是今天就对 ...

  9. spring boot 自定义视图路径

    boot 自定义访问视图路径 . 配置文件 目录结构 启动类: html页面 访问: 覆盖boot默认路径引用. 如果没有重新配置,则在pom引用模板. 修改配置文件. 注意一定要编译工程

  10. nodejs基础学习1

    ES6常用新语法 ES6新语法 什么是ES6? 由于JavaScript是上个世纪90年代,由Brendan Eich在用了10天左右的时间发明的:虽然语言的设计者很牛逼,但是也扛不住"时间 ...