构建在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. rnn实现三位数加法的训练

    #!/usr/bin/env python # coding=utf-8 from keras.models import Sequential from keras.layers import Ac ...

  2. Django的模板层简介

    Django的模板层 如果我们想要利用视图函数返回一个页面,一种比较简单的方式是利用HttpResponse()方法返回一个含有html内容的字符串: def current_datetime(req ...

  3. Zabbix配置参数优化

    概述:使用zabbix监控服务器已有一段时间,监控的服务器不到100台,发现刷新zabbix页面有卡顿的现象.而且经常报“Zabbix poller processes more than 75% b ...

  4. nodejs使用案例-mysql操作

    1.package.json: { "scripts": { "start": "node app.js" }, "devDepe ...

  5. 1449 - The user specified as a definer ('test'@'%') does not exist

    最近在做一个项目,由于服务器切换,所以需要将原有服务器的mysql数据表以及存储过程导入到另一个服务器的mysql数据库中.导入完成之后以为一切是那么的简单,却没有想到总还是出现了一些莫名其妙的问题. ...

  6. SPSS中文版安装

    我这里安装的是64位的 双击安装包 选择您的安装目录 在这里等几分钟 重要!安装完毕后将图中选项勾去掉! 这个时候输入一下授权码 9DNCAF2O3QVDV7FBIO696OO6GWLNXZPPRYT ...

  7. [SHOI2012]信用卡凸包(计算几何)

    /* 考验观察法?? 可以发现最终答案等于所有作为圆心的点求出凸包的周长加上一个圆的周长 向量旋转 (x1, y1) 相较于 (x2, y2) 旋转角c 答案是 (dtx * cosc - dty * ...

  8. 洛谷 P1823 音乐会的等待

    题目描述 N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没有人比A或B高,那么他们是可以互相看得见的. ...

  9. Hive快捷查询:不启用Mapreduce job启用Fetch task

    启用MapReduce Job是会消耗系统开销的.对于这个问题,从Hive0.10.0版本开始,对于简单的不需要聚合的类似SELECT <col> from <table> L ...

  10. CentOS 7安装Oracle 12c

    1.root身份安装依赖包: yum -y install binutils compat-libcap1 compat-libstdc++-33 compat-libstdc++-33*.i686 ...