图一在这里插入图片描述
图一:hbase的平面架构图

角色划分
	client:
		包含访问HBase的接口并维护cache来加快对HBase的访问
	
	zookeeper:保证任何时候,集群中只有一个活跃master
		存贮所有Region的寻址入口。
		实时监控Region server的上线和下线信息。并实时通知Master
		存储HBase的schema和table元数据

	HMaster:为Region server分配region
		负责Region server的负载均衡
		发现失效的Region server并重新分配其上的region
		管理用户对table的增删改操作

	
	HReginionServer:
		Region server维护region,处理对这些region的IO请求
	    Region server负责切分在运行过程中变得过大的region

	HLog:
			预写日志,当我们对hbase中的数据做出处理,会优先写入预写日志,再对表中的数据做出真正的处理,同时异步向HDFS中写入,以防断电等事故导致的数据丢失
		
		HReginionServer里面的组件
			HRegion:
			HReginionServer里面的区域,可以理解为表,一张表可以拆分为多个HRegion
			
			Store:
			列族。
			
			MemStore:
			内存。对数据的操作会先写到内存,再溢写到下面的StoreFile/HDfFle
			
			StoreFile/HDfFle:
			一个region由多个store组成,一个store对应一个CF(列族)
			store包括位于内存中的memstore和位于磁盘的storefile写操作先写入memstore,当memstore中的数据达到某个阈值,hregionserver会启动flashcache进程写入storefile,每次写入形成单独的一个storefile
			当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、major compaction),在合并过程中会进行版本合并和删除工作(majar),形成更大的storefile
			当一个region所有storefile的大小和数量超过一定阈值后,会把当前的region分割为两个,并由hmaster分配到相应的regionserver服务器,实现负载均衡
			客户端检索数据,先在memstore找,找不到去blockcache,找不到再找storefile

HBASE的读写流程:

1、客户端client发送请求给zookeeper,请求回HBASE集群里面所有表的元数据存放在哪个个HReginionServer上
2、客户端client通过zookeeper的返回信息,发送请求给存放所有表元数据的HReginionServer,找到我们要访问的表的元数据
3、客户端client通过存放所有表元数据的HReginionServer的返回信息,找到我们想要做出处理的表存放在哪个HReginionServer做出请求处理
	读流程:
		3.1、客户端cliet先找到找到与命令对应的HRegion(表)
		3.2、再找到找到与命令对应的Store(列族)
		3.3、首先会进入MemStore(内存)去寻找有没有我们搜索的东西
		3.4、在MemStore里没找到,会去blockcache(读缓存。图是网上找的,里面没有画出来这个)里面找
		3.5、blockcache里面也没找到,再去StoreFile/HDfFle上找
		3.6、同时会将在blockcache里面存放一份数据,下次再次查找,就不用进StoreFile/HDfFle找,避免了IO的触发,提高效率
	写流程:
		3.1、客户端cliet先找到找到与命令对应的HRegion(表)
		3.2、再找到找到与命令对应的Store(列族)
		3.3、再往HLog(预写日志)里面写入操作
		3.4、HLog写入成功后会往MemStore(内存)里面写入
		3.5、当MemStore写满了后会溢写到StoreFile/HDfFle

blockcache里面的内存非常珍贵,所以才用LRU的方式进行清除最近最少使用的数据

图二为立体图,先理解透彻平面图再理解立体图,加深对hbase的理解
在这里插入图片描述

打字不易,且看且点赞

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐