Hbase存储要点:

1、三维有序

rowkey排序、列簇类有序、时间戳倒序

2、行分割

在行的方向上进行分割

hbase行锁 hbase 锁_hbase gc

将一定的行放在同一个region,随着行的增多,会进行拆分,并将region分布到各个HRegionServer中

3、分布式存储单位

HRegion是分布式存储和负载均衡最小单位,不同的HRegion可以分配到不同的HRegionServer

4、存储单位

HRegion由一个或者多个Store组成,每个Store保存一个columns family,每个store又由一个memStore和0至多个StoreFile组成,

Storefile以HFile格式保存在HDFS上

hbase行锁 hbase 锁_hbase 基础_02

5、行级锁

在单行上加锁,具备强一致性

6、支持mapreduce直接操作

7、Hbase访问

旧版本(新版本直接删除掉了root表,直接有zookeeper找到meta信息)

1).Meta记录用户表region信息,.Meta可以有多个region

--Rowkey:Region的name,其中包含了表名等信息

 --Column Family:info, 包含了如下三列:regioninfo,server和serverstartcode。 其中 regioninfo包含了 NAME, STARTKEY, ENDKEY 等信息

2)-ROOT表记录.Meta表的region信息,-Root只有一个region,zookeeper记录-ROOT表的location信息

当用户表非常大的时候,.META.的region也会不断增加,HBase引入了第二张特殊表-ROOT-,用来记录.META.的Region信息。-ROOT-表的结构与.META.的结构一样

8、读取

扫描顺序(Region):BlockCache(读缓存)、MemStore(写缓存)、StoreFile(HFile)

hbase行锁 hbase 锁_hbase行锁_03

 

 

gc调优简要:

-XX:CMSInitiatingOccupancyFraction=70 老年代70%开始回收

-XX:+UseCMSInitiatingOccupancyOnly 

-XX:+UseConcMarkSweepGC:设置年老代为并发收集

-Xmx16G -Xms16G:-Xms、-Xmx 相等以避免在GC 后调整堆的大小。

-Xmn1G:指定New Generation的大小, Yong区设置过大GC时间长。

-XX:SurvivorRatio=8  Eden:Survivor=8:1

-XX:+UseParNewGC:设置年轻代为并发收集。

-XX:CMSFullGCsBeforeCompaction=0这个参数,指定进行多少次full GC之后,进行内存空间压缩,0是每次都会。

-XX:+UseCMSCompactAtFullCollection设置在FULL GC的时候,对年老代的压缩;CMS是不会移动内存的, 因此, 这个非常容易产生碎片, 导致内存不够用, 因此, 内存的压缩这个时候就会被启用。 增加这个参数是个好习惯。可能会影响性能,但是可以消除碎片

hbase_heapsize ------>>>>堆内存以及堆外内存的分配

写多读少内存占比(30读70写):memstore 0.4 lRUBlockCache 0.25

读多写少:jvm内存和堆外内存,由lRUBlockCache+BucketCache构成读缓存CombinedBlockCache

lru用户缓存元数据Block,BucketCache用于缓存实际用户数据Block

jvm_heap=rs总内存-堆外内存

图解:

序号

步骤

原理

计算公式

计算值

修正值

A

规划RS总内存 

在系统内存允许且不影响其他服务的情况下,越多越好。设置为系统总内存的 2/3。

2/3 * 96G

64G

64G

B

规划读缓存 CombinedBlockCache

整个RS内存分为三部分:读缓存、写缓存、其他。基本按照5 : 4 : 1的分配原则。读缓存设置为整个RS内存的50%

A * 50%

32G

26G

B1

规划读缓存LRU部分

LRU部分主要缓存数据块元数据,数据量相对较小。设置为整个读缓存的10%

B * 10%

3.2G

3G

B2

规划读缓存BucketCache部分

BucketCache部分主要缓存用户数据块,数据量相对较大。设置为整个读缓存的90%

B * 90%

28.8G

24G

C

规划写缓存MemStore

整个RS内存分为三部分:读缓存、写缓存、其他。基本按照5:4:1的分配原则。写缓存设置为整个RS内存的40%

A * 40%

25.6G

25G

D

设置JVM_HEAP

RS总内存大小 – 堆外内存大小

A – B2 

35.2G

40G