HBase基础(一):架构和组件

1、基本概念

HBase是一个开源的非关系型分布式数据库(NoSQL),参考了谷歌的BIgTable建模,实现的编程语音为Java。是Apache软件基金会的Hadoop项目的一部分,运行于HDFS文件系统上,所以可以容错地存储海量稀疏的数据

  • HBase的特性:
    • 高可靠
    • 高并发读写
    • 面向列
      行存储 VS 列存储
      行存储:优点是,写入一次性完成,保持数据完整性;缺点是,数据读取过程中产生冗余数据,若有少量数据可以忽略;
      列存储:优点是,读取过程不会产生冗余数据,特别适合对数据完整性要求不高的大数据领域; 缺点是,写入效率差,保证数据完整性方面差
    • 可伸缩
    • 易构建
  • Hbase优势:
    • 海量数据存储
    • 快速随机访问
    • 大量写操作的应用
  • Hbase应用场景:
    • 互联网搜索引擎数据存储
    • 海量数据写入
    • 消息中心
    • 内容服务系统(schema-free)
    • 大表负责&多维护索引
    • 大批量数据读取

2、Data Modeling

image.png

RowKey:是Byte array,是表中每条记录的“主键”,方便快速查找,Rowkey的设计非常重要;
Column Family:列簇,拥有一个名称(String),包含一个或者多个相关列
Column : 属于某一个Columnfamily,familyName:columnName,每条记录可动态添加


image.png

Version Number:类型为Long,默认值是系统时间戳,可由用户自定义,每个rowkey唯一
Value(Cell):Byte array


image.png

三维有序 {rowkey => {family => {qualifier => {version => value}}}}
默认都是按字典顺序,即字母顺序排列(如下,bar在foo前);
a:cf1:bar:1368394583:7
a:cf1:foo:1368394261:hello
image.png

3、体系架构

image.png

image.png

Client :
1、整个HBase集群的访问入口;
2、使用HBase RPC机制与HMaster和HRegionServer进行通信;
3、与HMaster通信进行管理类操作;
4、与HRegionServer通信进行数据读写类操作;
5、包含访问HBase的接口,并维护cache来加快对HBase的访问

Zookeeper:
1、保证任何时候,集群中只有一个HMaster;
2、存储所有HRegion的寻址入口;
3、HMaster和HRegionServers启动时会向ZooKeeper注册;
4、实时监控HRegion Server的上线和下线信息,并实时通知给HMaster;
5、存储HBase的schema和table元数据。
6、容错:Zookeeper是一个可靠的服务,一般配置3或者5个Zookeeper实例。

HMaster:主要负责Table和Region的管理工作
1、HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master在运行;
2、管理用户对table的增删改查操作;
3、管理HRegionServer的负载均衡,调整Region分布;
4、Region Split后,负责新Region的分配;
5、在HRegionServer停机后,负责失效HRegionServer上Region迁移工作;
6、Client访问hbase上数据的过程并不需要HMaster参与(寻址访问Zookeeper和HRegionServer,数据读写访问HRegionServer),HMaster仅仅维护着table和Region的元数据信息,负载很低;
7、容错:Zookeeper重新选择一个新的的Master
—无HMaster过程中,数据读取依旧照常进行;
—无HMaster过程中,region切分,负载均衡等无法进行

RegionServer:
1、维护HRegion,处理对这些HRegion的IO请求,向HDFS文件系统中读写数据;
2、负责切分在运行过程中变得过大的HRegion;
3、HRegionServer内部管理了一系列的HRegion对象,每个HRegion对应了table中的一个region,HRegion中由多个HStore组成。每个HStore对应了Table中的一个column family(列簇),每个HStore 是一个集中的存储单元,因此最好将具备共同IO特性的column放在一个column family中,这样最高效;
4、HStore存储是HBase存储的核心,由两部分组成,一部分是MemStore,一部分是StoreFile;MemStore是Sorted Memory Buffer,用户写入的数据首先会放入MemStore中,当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile)
5、Regionserver容错:定时向Zookeeper汇报心跳,如果一段时间内未出现心跳,Master将该RegionServer上的Region重新分配到其他RegionServer上,失效服务器上“预写”日志由主服务器进行分割并派送给新的RegionServer。

注:split分为切分(regionserver负责)和分配(master负责)两个过程

4、物理模型

region,Hbase上的分区概念,不同rewkey存储在不同的region上


image.png

image.png

当region被分为两个新的region时,master会将这两个region分配到不同的regionServer上


image.png
image.png

image.png

image.png

5、在HDFS上目录结构

image.png

WALs:预写日志,用来记录日志;RegionServer在往表中写入数据时,会先往WALs下的Hlog写一份,然后再往内存写(和mysql的binlog类似),避免内存丢失数据,可以从日志文件中恢复
data:是真正存储数据的
下面第一层是namespace(nstest)


image.png

第二层是table(tb1),第三层是region,第四层是列簇Column Family,第五层是StoreFile


image.png

image.png

image.png

6、在HDFS上数据存储

HBase中的所有数据文件都存储在HDFS上,主要有两种文件类型
1、Hfile : HBase中<key,value>存储格式,是Hadoop的二进制格式文件,StoreFile就是对HFile做了轻量级包装,进行数据的存储;
当用户写入时候,先写入memstore,当memstore满了以后会flush成一个storefile(就是Hdfs上的Hfile);
用户也可以手动flush,将内存中的数据直接溢写到磁盘上,手动干预
2、Hlog File : HBase中WAL(Write Ahead Log预写日志)的存储格式,物理上是Hadoop的squence File序列化文件
WAL类似Mysql中的binlog,用来做灾难恢复。Hlog记录数据的所有变更,一旦数据修改,就可以从log中进行恢复。每个HRegionServer维护一个HLog;这样不同region(来自不同表table)的日志会混在一起,这样做的目的是不断追加单个文件,相对于同时写多个文件而言,可以减少磁盘寻址次数,因此可以提高对table的写性能;但是,因此带来的缺点是,如果一台HRegionServer下线,为了恢复其上的region,需要将HRegionServer上的log进行拆分,然后分发到其他HRegionServer上进行恢复

HBase中默认有张系统表('hbase:namespace',下图),存储hbase中所有namespace的信息;还有张'hbase:meta'表:记录元数据,它的rowkey存储的是hbase中所有表的region 的位置信息


image.png

image.png

image.png
image.png

7、在Zookeeper上数据存储:

除了HDFS存储信息,HBase还在Zookeeper中存储信息,其中的znode信息:
– /hbase/root-region-server ,Root region的位置(系统'hbase:meta'元数据表的region信息)
– /hbase/table/-ROOT-,根元数据信息
– /hbase/table/.META.,元数据信息
– /hbase/master,当选的Mater
– /hbase/backup-masters,备选的Master
– /hbase/rs ,Region Server的信息
– /hbase/unassigned,未分配的Region

image.png

8、Hbase读写数据流程:

Hbase读取数据流程:
1、首先,Client先访问zookeeper,获取系统'hbase:meta'元数据表的region信息和HRegionServer信息(确定'hbase:meta'元数据表的位置),从而获取到'hbase:meta'元数据表
2、其次,根据namespace、tablename、rowkey,在'hbase:meta'元数据表查找对应的的Region信息和HRegionserver信息
3、最后,根据已经获取到的regionserver 和 region信息,去regionserver节点上查找数据,先从memstore读取,如果没有,再到storeFile上读取(为了读取的效率)
从这个过程可以看出,真正的读写并不依赖于master,在读写的过程中如果master节点出现宕机,短暂性的是不会出现太大的问题

Hbase写入数据流程:
1、当客户端发起一个Put请求时,首先它从hbase:meta表中查出该Put数据最终需要去的HRegionServer;然后客户端将Put请求发送给相应的HRegionServer,在HRegionServer中它首先会将该Put操作写入WAL日志;
2、写完WAL日志文件后,HRegionServer根据Put中的TableName和RowKey找到对应的HRegion,并根据Column Family找到对应的HStore,并将Put写入到该HStore的MemStore中,此时写成功,并返回通知客户端。


image.png

9、Regionserver的内存:Memstore & BlockCache

HBase上Regionserver的内存分为两个部分,一部分作为Memstore,主要用来写;另外一部分作为BlockCache,主要用来读。
写请求会先写入Memstore,Regionserver会给每个region提供一个Memstore,当Memstore满128M(可配置)后,会启动flush刷新到磁盘。当Memstore的总大小超过限制时(heapsizehbase.regionserver.global.memstore.upperLimit0.9)——一个Regionserver有多个Region,多个region中memstore的总大小——,会强行启动flush进程,从最大的Memstore开始flush,直到低于限制;
读请求先到Memstore中查数据,查不到就到BlockCache中查,再查不到就会到磁盘上磁盘上读,并把读的结果放入BlockCache。由于BlockCache采用的是LRU策略(Least recently used,最近最少使用),因此BlockCache达到上限(headsizehfile.block.cache.size0.85)后,会启动淘汰机制,淘汰掉最老的一批数据
在注重读响应时间的应用场景下,可以将BlockCache设置大些,Memstore设置小些,以加大缓存的命中率

image.png

image.png

10、Hbase的Compaction和Split:

image.png

Compaction过程:
Client写入 -》 存入MemStore,一直到MemStore满 -》Flush成一个StoreFile,直至增长到一定阈值 -》触发Compaction合并操作 -》 多个StoreFile合并成一个StoreFile,同时进行版本合并和删除 -》 当StoreFiles Compaction后,逐步形成越来越大的StoreFile -》当个StoreFile大小超过一定阈值后,触发Split操作,把当前Region Split成2个Region,Region会下线,新Split出的2个子Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上。
HBase只是增加数据,所有的更新和删除操作,都是在Compaction阶段做的,所以用户写操作只需要进入到内存即可立即返回,从而保证I/O高性能;

Compaction:会从一个region的一个store中选择一些Hfile文件进行合并;
—》合并原理:先从这些待合并的数据文件中读出KeyValues,再按照由小到大排列后写入一个新的文件中,之后,这个新生成的文件就会取代之前合并的所有文件对外提供服务;
—》合并类型:Minor Compaction & Major Compaction
Minor Compaction:是指选取一些小的、相邻的StoreFile将他们合并成一个更大的StoreFile,在这个过程中不会处理已经Delete或Expired的Cell。一次Minor Compation的结果是更少并且更大的StoreFile;这个过程实际上是个多路归并的过程,因为HFile的每个文件都是经过归类的,所以合并速度很快,只受到磁盘IO性能的影响;
Major Compaction:是指将所有的StoreFile合并成一个StoreFile,这个过程还会清理三类无意义数据,被删除的数据,TTL过期数据、版本号超过设定版本号的数据;major合并能扫描所有的键/值对,顺序重写全部的数据,重写数据的过程中会略过做了删除标记的数据,多余断言删除此时生效,例如,对于那些超过版本号限制的数据以及生存时间到期的数据,在重写数据时就不再写入磁盘了;所以Major Compaction时间会持续比较长,整个过程会消耗大量系统资源,对上层业务有比较大的影响,因此线上业务都会关闭自动触发Major Compactio功能,改为手动在业务低峰期触发;
minor compaction,轻量级,将符合条件的最早生成的几个storefile合并成一个大的sotrefile文件,它不会删除被标记为“删除”的数据和已过期的数据,并且执行过一次minor合并操作后,还会有多个storefile文件;
major compaction,重要级,把所有的storefile合并成一个单一的storefile文件,在文件合并期间系统会删除标记为“删除”标记的数据和已过期失效的数据,同时会block(阻塞)所有客户端对该操作所属region的请求直到合并完毕,最后删除已合并的storefile文件
—》Compaction本质:使用短时间的IO消耗以及带宽消耗换取后续查询的低延迟;
—》conpact的速度远远跟不上Hfile生产的速度,这样就会使Hfile的数量越来越多,导致读性能急剧下降,为了避免这种情况,在HFile的数量过多的时候,会限制写请求的速度
—》Split和Major Compaction可以手动或者自动触发;

Split:当一个Region太大时,将其分裂成两个Region

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容

  • 1. HBase介绍,Hbase是什么? HBase -- Hadoop Database ,是一个高可靠、高性能...
    奉先阅读 3,724评论 1 36
  • 参考:https://www.jianshu.com/p/569106a3008f 最近在逐步跟进Hbase的相关...
    博弈史密斯阅读 843评论 1 1
  • 最近在逐步跟进Hbase的相关工作,由于之前对Hbase并不怎么了解,因此系统地学习了下Hbase,为了加深对Hb...
    飞鸿无痕阅读 50,161评论 19 271
  • 本文首先简单介绍了HBase,然后重点讲述了HBase的高并发和实时处理数据 、HBase数据模型、HBase物理...
    达微阅读 2,720评论 1 13
  • 比特科技: 存储、数据库、大数据技术 » HBase原理和设计 http://www.bitstech.net/...
    葡萄喃喃呓语阅读 723评论 0 11