Hbase架构下

								Hbase架构下

Hbase内存大小默认为32G或64G。
一般的,我们设计Hbase时考虑的是在每个服务器上面运行少量(20-200)但是相对于数量来说较大容量(5-20G)的regions。所以我们需要考虑以下因素

  1. MSLAB (MemStore-local allocation buffer) 如果每个MemStore有2MB的缓存(注意是每个列簇2M的缓存),如果你有1000个regions并且表设计为2个列簇,那么将会有3.9GB的堆内存是被使用,并且很有可能这些内存不存储时间。注意:2MB是可以配置的。
  2. 而Master对于regions的个数是很敏感的,如果regions个数过多,Master在加载和移动batches时会有很重的负担,因为这些都过重依赖于ZK。
  3. 在就版本中(HFileV2。0.90版本之前)。会有一个问题导致默写regionServer的索引激增。这很可能会导致Hbase出现OOM
  4. 另一个很重要的因素却是和MR集成时,3-5个Regions好像不能发挥出MR的所有性能,而过大的Regions呢,对MR来说又是一个太高的负载,因为会启动太多的MR作业。
  5. 关于Regions最大个数的计算,是有公式的:
  6. 总的公式如下:

Startup开始
当Hbase启动时,Regions会按照如下进行分配(短版本):

  1. Master 启动是调用AssignmentManager upon 。
  2. AssignmentManager 到 hbase:meta中查看已有的regions 。
  3. 如果regions是有效的,那么保持现状。
  4. 如果无效,那么调用LoadBalancerFactory来分配该region。主要是启动了负载均衡。
  5. hbase:meta更新该状态。
  6. Failover失败救援
  7. 当RegionServer失败了 :
  8. 1、regions会立即变的不可用。
  9. 2、Master 会检测到RegionServer 已经 failed。
  10. 3、region将会被重新分配,就像startup的步骤一样。
  11. 4、已经被提交的查询还是会继续执行的,并不会丢失。
  12. 5、在以下时间内,操作会被提交到一个新的RegionServer中:
  13. ZooKeeper session timeout + split time + assignment/replay time
  14. Region Load Balancing负载均衡
  15. Regions会周期性的进行LoadBalancer。通过配置hbase.balancer.period;默认的时间是5分钟
  16. Region State Transition状态转换
  17. HBase 的这些状态都维护在ZK中,以下是一些状态列表:
  18. Possible Region States可能的状态信息
  19. OFFLINE : 离线
  20. OPENING : 打开中
  21. OPEN : 已经打开
  22. FAILED_OPEN : 打开失败
  23. CLOSING : 关闭中
  24. CLOSED : 关闭
  25. FAILED_CLOSE : 关闭失败
  26. SPLITTING : 正在分裂
  27. SPLIT : 分裂完成
  28. SPLITTING_NEW : 将要分裂
  29. MERGING : 合并中
  30. MERGED : 已合并
  31. MERGING_NEW : 将要合并

Region-RegionServer Locality存储位置
因为数据存储在HDFS上面,所以符合HDFS存储块的机制。如下面步骤:

  1. 第一个replica i就存储在本地
  2. 第二个replica 随机存储在另一个 机架上。(如果有的话)
  3. 第三个replica 存储在本机架上的另一个几点。
    Store
    Store 中的 MemStore 有0或多个StoreFiles (HFiles)。Store主要存储表中的一个列簇。

MemStore
MemStore 在启动刷新时,会将内存存入快照,并且随后删除。注意:当启动Flush之后,region中的所有MemStore都会被flush
MemStore Flush
以下会触发flush操作。

1、当一个 MemStore达到hbase.hregion.memstore.flush.size所指定的大小时。128M
2、当 MemStore 的全局使用量 hbase.regionserver.global.memstore.upperLimit达到时, 一个regionServer中的所有regions都会启动flush
3.当预习日志达到阈值时也会触发全局性的falush
StoreFile (HFile)
StoreFiles 真实数据所在。

Blocks
StoreFiles是由blocks组成的。

KeyValue
KeyValue类是HBase中的数据存储的核心。KeyValue包装了一个字节数组,并将偏移量和长度作为传递给传递的数组,该数组指定了将内容作为键值开始的位置。
当MemStore的大小 到了规定的大小 ( hbase.hregion.memstore.flush.size ), 它会将数据flush到StoreFile。随着时间的增加,store中的storefile数量也会增加。Compaction 是将这些storefile进行合并的操作,从而减少storeFile的数量并且提高性能。

Compactions 有两种: minor and major。Minor 和major compactions 有以下不同。

Minor compactions 通常会将小的并且相邻的那些storeFile合并成一个大的StoreFile。注意Minor Compactions并不会删除过期版本。
注意:major compaction主要是用来提升性能的。默认情况下是每7天运行一次,但是在生产环境中并不一定适合。因为进行major compaction的时候可能会影响集群性能。所以这需要根据实际情况去设定这个值。

Compactions 并不是 region merges。

Compaction Policy - HBase 0.96.x and newer配置
通过 compaction 配置策略,可以保证何时minor compaction 何时major compaction。
HBase 0.96.x之前, 只有一种compaction策略。那就是 RatioBasedCompactionPolicy。新的默认策略是 ExploringCompactionPolicy 。
Being Stuck被卡主
当MemStore 太大时 , 它需要将数据刷入到一个StoreFile. 然而, 一个Store 只能有
hbase.hstore.blockingStoreFiles 个StoreFiles,所以这个时候它可能会在算法中被卡主。而compaction算法对这种情况进行了检查,并且对于这种情况进行优化。
The ExploringCompactionPolicy Algorithm
ExploringCompactionPolicy 算法,主要是从不同的文件组合中找到最优解。这样相对于Ratio算法来说,有更好的性能,更少的IO更加频繁的major compaction。
hbase.hstore.compaction.min
进行minor compaction的最小storefiles数目。注意:如果设置为2,那么一个store中如果有两个storefiles就会触发minor compaction。如果将这个值设置很高,那么其他相关配置也要进行相应的调整。大多数情况下,默认配置是合适的。在之前的版本,该配置叫做hbase.hstore.compactionThreshold
Default: 3

hbase.hstore.compaction.max
一次minor compaction最多可以选择的Storefiles文件数量。大多数情况下,默认配置是合适的。
Default: 10

hbase.hstore.compaction.min.size
小于这个配置的storefiles一定会被放入minor compaction中。
Default:128 MB

hbase.hstore.compaction.max.size
大于该值的storefiles将会被排除在minor compaction之外,注意默认值是Long的最大值,也就是几乎没有可能会将storefiles排除在外,所以如果你觉得你的minor compaction发生过于频繁,可以尝试更改改值。
Default: Long.MAX_VALUE
hbase.hstore.compaction.ratio
将store file 按照文件年龄排序(older to younger),minor compaction总是从older store file开始选择,如果该文件的size 小于它后面hbase.hstore.compaction.max 个store file size 之和乘以 该ratio,则该store file 也将加入到minor compaction 中。
Default: 1.2F

hbase.hstore.compaction.ratio.offpeak
非峰值时的ratio配置,作用和上面一样。
Default: 5.0F
hbase.offpeak.start.hour
非峰值的开始时间

Default: -1 (disabled)

hbase.offpeak.end.hour
非峰值的结束时间

Default: -1 (disabled)

hbase.regionserver.thread.compaction.throttle
Compaction有两种压缩线程池,一个大的一个小的。该值是确定使用大的线程池还是小的线程池。大多数情况下,默认值是何时的
Default: 2 x hbase.hstore.compaction.max x hbase.hregion.memstore.flush.size (which defaults to 128 )

hbase.hregion.majorcompaction
Major compaction的时间,单位为毫秒
Default: 7 days ( 604800000 milliseconds)

hbase.hregion.majorcompaction.jitter
设定一个major compaction的浮动区间。比如按照默认值,该区间为:7±(7*0.5)

Default: .50F

Compaction File Selection文件选择

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值