1)Client向HregionServer发送写请求;
2)HregionServer将数据写到HLog(write ahead log)。为了数据的持久化和恢复;
3)HregionServer将数据写到内存(MemStore);
4)反馈Client写成功。
1)当MemStore数据达到阈值(默认是128M,老版本是64M),将数据刷到硬盘,将内存中的数据删除,同时删除HLog中的 历史 数据;
2)并将数据存储到HDFS中;
3)在HLog中做标记点。
1)当数据块达到4块,Hmaster将数据块加载到本地,进行合并;
2)当合并的数据超过256M,进行拆分,将拆分后的Region分配给不同的HregionServer管理;
3)当HregionServer宕机后,将HregionServer上的hlog拆分,然后分配给不同的HregionServer加载,修改META;
4)注意:HLog会同步到HDFS。
1)Client先访问zookeeper,从meta表读取region的位置,然后读取meta表中的数据。meta中又存储了用户表的region信息;
2)根据namespace、表名和rowkey在meta表中找到对应的region信息;
3)找到这个region对应的regionserver;
4)查找对应的region;
5)先从MemStore找数据,如果没有,再到StoreFile上读(为了读取的效率)。
1)管理用户对Table的增、删、改、查 *** 作;
2)记录region在哪台Hregion server上;
3)在Region Split后,负责新Region的分配;
4)新机器加入时,管理HRegion Server的负载均衡,调整Region分布;
5)在HRegion Server宕机后,负责失效HRegion Server 上的Regions迁移。
1)HRegion Server主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBASE中最核心的模块。
2)HRegion Server管理了很多table的分区,也就是region。
1)HBASE Client使用HBASE的RPC机制与HMaster和RegionServer进行通信
2)管理类 *** 作:Client与HMaster进行RPC;
3)数据读写类 *** 作:Client与HRegionServer进行RPC。
文章转载链接:>
一、概述
二、图解
三、扩展
1、为什么不把META表信息直接保存在ZK中?
ZK中不宜保存大量数据,而META表主要是保存Region和RegionServer的映射信息,Region的数量没有具体约束,只要在内存允许的范围内,Region数量可以有很多,如果保存在ZK中,ZK的压力会很大。通过一个ROOT-表来转存到RegionServer中是一个比较理想的方案,相比直接保存在ZK中,也就多了一层-ROOT-表的查询,对性能来说影响不大。
2、每次访问都需要走ZK –> -ROOT- —> META的流程么?
不需要,Client端有缓存,第一次查询到相应region所在RS后,这个信息将被缓存到Client端,以后每次访问都直接从缓存中获取RS地址即可。当然这里有个意外:访问的region若果在RS上发生了改变,比如被balancer迁移到其他RS上了,这个时候,通过缓存的地址访问会出现异常,在出现异常的情况下,Client需要重新走一遍上面的流程来获取新的RS地址。总体来说,region的变动只会在极少数情况下发生,一般变动不会很大,所以在整个集群访问过程中,影响可以忽略。
一张表预分区N个,那就是一开始就设定了N个region;
hbasehregionmaxfilesize 设定的region大小,超过了就会split,就会增加一个region,对预分区没什么影响。
一张表假如不预分区,那么数据超过region最大值才会拆分,比如你1天10G数据,设定5G才split,两天内写数据都写在一个region里,没有分布式效果,改region就是热点。
预设分区一般配合rowkey设计解决热点,例如预分区5个,rowkey可设置前最A、B、C、D、E,程序里面随机的加其中的一个前缀,那么就会随机插入到各个region中,但是一般又会和业务系统需求有些矛盾。例如rowkey按时间戳字符串加盐,那么就只有一各个region scan再合起来统计会比较快,直接scan “A20181111”到“D20181128”很慢很麻,还有按用户ID、手机号等等做rowkey加盐或者hash散列可能都会在设计上有热点和业务需求的矛盾点。
以上就是关于大数据技术之HBase原理分析全部的内容,包括:大数据技术之HBase原理分析、HBase读写 *** 作-ROOT-表和.META.表、HBase读取(GET/SCAN)流程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)