ConstantSizeRegionSplitPolicy
,IncreasingToUpperBoundRegionSplitPolicy
,KeyPrefixRegionSplitPolicy
,DelimitedKeyPrefixRegionSplitPolicy
,SteppingSplitPolicy
,BusyRegionSplitPolicy
,DisabledRegionSplitPolicy
ConstantSizeRegionSplitPolicy
:固定大小,默认情况下,这个策略下,当HRegion的大小达到10G的时候,会均分为两个HRegion。可以通过属性hbase.hregion.max.filesize
来调节,单位是字节,默认值是10737418240
IncreasingToUpperBoundRegionSplitPolicy
:HBase1.2及之前版本默认采用的就是这个策略。这个策略的特点:前几次不是固定的数据,而是需要通过计算来获取
hbase.hregion.max.filesize
(默认值是10G)大小来min(hbase.hregion.max.filesize, regionCount^3 * initialSize)
来计算,其中regionCount表示HRegion的个数,initialSize是HRegion的大小,initialSize的默认值是2 * hbase.hregion.memstreo.flush.size
(默认值是134217728B
)hbase.increasing.policy.initial.size
来指定,单位是字节KeyPrefixRegionSplitPolicy
:IncreasingToUpperBoundRegionSplitPolicy
的子类,在IncreasingToUpperBoundRegionSplitPolicy
的基础上,添加了行键的判断,会将行键前缀相同(默认读取行键的前五个字节)的数据拆分到同一个HRegion中。这种策略会导致拆分之后的两个HRegion之间不等大DelimitedKeyPrefixRegionSplitPolicy
:例如当行键是video_001
、txt_001
,log_003
等,此时希望行键是以_
作为拆分单位,那么此时就需要使用DelimitedKeyPrefixRegionSplitPolicy
SteppingSplitPolicy
:HBase2.X默认使用的就是这个策略
2 * hbase.hregion.memstreo.flush.size
来进行hbase.hregion.max.filesize
来进行分类BusyRegionSplitPolicy
:这个策略只有在HBase2.x中可以使用,是IncreasingToUpperBoundRegionSplitPolicy
的子类
IncreasingToUpperBoundRegionSplitPolicy
的基础上,添加了热点策略。热点指的是在一段时间内被频繁访问的数据。如果某一个写数据是热点数据,那么HRegion会将这些数据拆分到同一个HRegion中当前时间-上一次检测时间≥hbase.busy.policy.aggWindow
,这样做的目的是为了控制后续计算的频率aggBlockedRate = 一段时间内被阻塞的请求数 / 总的请求数量
aggBlockedRate > hbase.busy.policy.blockedRequests
,且该HRegion的繁忙时间 ≥ hbase.busy.policy.minAge
,那么判定这个HRegion就是一个热点HRegionhbase.busy.policy.aggWindow
的值默认是300000,单位是毫秒,即5min;hbase.busy.policy.blockedRequests
的值默认是0.2f
;hbase.busy.policy.minAge
的默认值是600000,单位是毫秒,即10minDisabledRegionSplitPolicy
:禁用策略,禁止HRegion的自动。实际过程中较少使用,除非能够预估数据量/hbase
节点/hbase/master
/hbase/backup-masters
下来注册临时子节点。例如hadoop02上启动Backup HMaster,那么在Zookeeper上注册的节点/hbase/backup-masters/hadoop02,16000,1712459407965
/hbase/rs
下来注册临时子节点。例如hadoop01上启动HRegionServer,那么在Zookeeper上注册的节点/hbase/rs/hadoop01,16020,1712459960698
HBase是一个典型的主从结构,主节点是HMaster,从节点是HRegionServer。在HBase中,并不HMaster的个数,可以在任意一台安装了HBase的节点上来启动HMaster
hbase-daemon.sh start master
因此HBase不HMaster的个数,所以理论上而言,HMaster不存在单点故障
当HBase集群中存在多个HMaster的时候,此时多个HMaster之间会存在Active和Backup状态
为了保证数据的一致性,Active HMaster在接收到请求之后,会将信息同步给其他的Backup HMasters,同步的节点数量越多,效率会越低。也因此,虽然HBase中不HMaster的个数 ,但是实际过程中HMaster的数量一般不超过3个(1个Active HMaster + 2个Backup HMaster)
Active HMaster会实时监控Zookeeper上/hbase/backup-masters
下的子节点变化,以确定下一次需要将数据同步给哪些节点
当Zookeeper发现/hbase/master
节点消失的时候,意味着Active HMaster宕机,那么此时Zookeeper会从/hbase/backup-masters
的子节点中挑选一个切换为Active状态
HMaster的作用
create
,drop
,alter
,list
,enable
,disable
等)会经过HMaster,凡是不产生元数据的操作(DML,例如put
,append
,get
,scan
,delete
,deleteall
等)不会经过HMaster客户端先访问Zookeeper,从Zookeeper中获取hbase:meta文件的存储位置
客户端获取到hbase:meta文件的位置之后,访问HRegionServer,读取hbase:meta文件
客户端会从hbase:meta文件中获取到要操作的HRegion所在的位置
客户端获取到HRegion的位置之后,会访问对应的HRegionServer,来试着操作这个HRegion
注意:HBase为了提高访问效率,还大量的应用了缓存机制
HRegionServer是HBase的从节点,负责管理HRegion。根据官方文档给定,每一个HRegionServer大约可以管理1000个HRegion
每一个HRegionServer中包含1到多个WAL,1个BlockCache以及0到多个HRegion
WAL(Write Ahead Log):发生在写操作之前的日志,在早期的版本中也称之为HLog
hbase.regionserver.hlog.blocksize * hbase.regionserver.logroll.multiplier
来决定
hbase.regionserver.hlog.blocksize
的值默认和HDFS的Block等大,从HBase2.5开始,hbase.regionserver.hlog.blocksize
的值默认是HDFS Block的2倍大hbase.regionserver.logroll.multiplier
的,默认值是0.95,从HBase2.5开始,hbase.regionserver.logroll.multiplier
的值是0.5hbase.regionserver.max.logs
来决定,默认值是32;从HBase2.x开始,这个属性被废弃掉,固定值就是32BlockCache:数据块缓存
hfile.block.cache.size
来调节,默认值是0.4,即最多占用服务器内存的40%hbase.regionserver.global.memstore.size + hfile.block.cache.size > 0.8
,即这个HRegionServer上所有的memStore所占内存之和 + BlockCache占用的内存大小 > 服务器内存 * 0.8
,那么HRegionServer就会报错HRegion:HBase中分布式存储和管理的基本单位
hbase.regionserver.memstore.flush.size
来决定,默认值是134217728B
所有memStore所占内存之和 ≥ java_heapsize * hbase.regionserver.global.memstore.size * hbase.regionserver.global.memstore.upperLimit
,按照memStore的大小来依次冲刷,直到不满足上述条件为止。
java_heapsize
:java的堆内存大小hbase.regionserver.global.memstore.size
:所有的memStore所能占用的内存比例,默认是0.4hbase.regionserver.global.memstore.upperLimit
:上限,默认是0.95hbase.regionserver.optionalflushinterval
来指定,单位是毫秒,默认值是3600000)的时候,也会自动的触发memStore的冲刷因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- bangwoyixia.com 版权所有 湘ICP备2023022004号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务