构建在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. centos6.5制作OpenStack云平台Windows7镜像

    # yum install virt-manager libvirt qemu-img virt-viewer -y # vi /etc/libvirt/qemu.conf # service lib ...

  2. STM32 f407 温湿度采集报警

    软件 keil5 实现 1.使用stm32f407中的DS18B20传感器采集空气温度 2.使用stm32f407中的DHT11传感器采集空气的温度和湿度 3.显示到stm32f407的LCD液晶显示 ...

  3. 事件之Touch 事件的分发和消费机制

    Android 中与 Touch 事件相关的方法包括:dispatchTouchEvent(MotionEvent ev).onInterceptTouchEvent(MotionEvent ev). ...

  4. Jmeter(十八)Logic Controllers 之 Random Controller and Random order Controller

    Random Controller就比较简单了,完全随机!毫无章法. 毫无任何规律的运行. 还有一个Random order Controller,随机顺序控制器就像一个简单的控制器,它将最多执行一次 ...

  5. [UE4]蓝图中的基本数据类型

    uint8:无符号整数(非负整数),u:unsigned 字符串 蓝图Utilities下有很多引擎自带的各种类型的对象的常用方法. 字符串与整数之间的转换(例如将字符串“23”转换成数字23) 如果 ...

  6. java的几种引用

    强引用:无论内存是否足够,不会回收. 软引用:内存不足时,回收该引用关联的对象. 弱引用:垃圾回收时,无论内存是否足够,都会回收. 虚引用:任何时候都可能被垃圾回收器回收. 在Java中,虽然不需要程 ...

  7. vue todolist 封装localstorage

    //封装操作localstorage本地存储的方法 模块化的文件 // nodejs 基础 var storage={ set(key,value){ localStorage.setItem(key ...

  8. 程序集生成失败 -- 引用的程序集“ThoughtWorks.QRCode”没有强名称,为没有源码的程序集强签名

    如果你写的程序程序集是带签名的,应用了没有签名的程序集,编译就会报下面的错误 引用的程序集“**”没有强名称 进入sdk提示符界面,依次输入如下指令 sn -k ThoughtWorks.QRCode ...

  9. Markdown画各种图表

    并不是所有编辑器都支持,比如博客园这个就不支持... 流程图 st=>start: 开始 op=>operation: 首先按个按钮 op2=>operation: 那你从头开始吧 ...

  10. for循环.html

    <script> for (var i = 1; i < 5 ; i++) { alert(i); } 公式需要记住,并多加练习,加深记忆,注意编写格式 for (var i = 1 ...