这里写自定义目录标题
一个hregionserver管理多个region和一个hlog。hregion:有多少个列族就有多少个store,store中有一个memstore和一个或者多个hfile(memstore flush,compaction)。
WAL:write ahead log,存着一些临时数据,供恢复。put操作,首先数据会被写入WAL,然后写入memstore中,memstore达到大小时,会进行flush,写入磁盘(即写成一个hfile)。
数据三个备份:当数据被写到HDFS的时候,一份数据拷贝在本地,然后备份到二级节点,然后备份进入叔节点。
读取放大:去memstore,再去blockcache,都没有找到,去hfiles中找,意味着可能需要检查多个文件,影响性能。最近读取内容会被放到blockcache中(LRU策略,最近最少使用)。
blockcache大小由hfile.block.cache.size决定,默认是regionserver的堆内存大小的40%。如果指定了useExternal为true,则结合memcached等外部缓存与BlockCache一起使用。如果指定了combinedWithLru,则结合bucketCache,也就是堆外内存与BlockCache一起使用。在上述两种情况下,BlockCache用于存放索引等元数据,真实的数据文件则缓存在memcached或bucketCache中。
写入放大(write amplification):major compaction将一个region里面的全部hfiles,按照每一列族合并和重写成为一个hfile,这个过程,出现较大的磁盘I/O和网络拥堵。 write amplification可以被设置成为自动运行,可以安排在周末或者晚上运行。
compact:当memstore上的内容大小超过阈值的时候,就会flush到hdfs上生成一个Hfile,hfile数量越来越多,整体来看导致查询的io次数增多,降低读写性能,对这些hfile进行compact操作,起到将多个hfile合并成一个hfile作用,这个过程中涉及到对hbase数据的多次重写读写,因此会有大量的io产生,但是后续读操作可以省去io,是以合并时候的io操作换取后续的读性能的提高。
一个regionserver下有多个region,region是hbase数据表的行切分,region下面有多个store,store对应列族,当作是数据表的列(族)切分,compaction发生在一个region下的文件中。region到达一定大小(256M)会分裂,分裂后region server向hbasemaster节点汇报。master节点做负载均衡,所以分裂后的region可能由其他region server管理。
major compaction(大合并):merge和delete。让由于服务器故障或者负载均衡而较远的数据,变得相对regionserver处于本地。一个region下的所有和file做归并排序,形成一个大的hfile,提升读性能。之前删除的行和过期的版本,在这里都会被删除。
minor compaction(小合并):只有merge。做部分文件的合并操作,包括minversion=0并且设置ttl的过期版本清理,不做任何数据的删除、多版本数据的清理工作。
major compaction将region下的hstore的所有的store file合并成为一个。触发条件:major_compact命令,API调用,regionserver自动运行(参数:hbase.hregion.majorcompaction,默认24h,hbase.hregion.majorcompaction.jetter的默认值是0.2,防止同一时间regionserver进行major compaction。默认浮动范围变成19.2-28.8)
minor compaction:触发条件复杂。
hbase.hstore.compaction.min:默认3,表示至少需要三个满足条件的store file,minor compaction才会启动。
hbase.hstore.compaction.max:默认为10,一次minor compaction中最多10个store file。
hbase.hstore.compaction.min.size,表示文件大小<该值的store file一定会被加入到minor compaction file的store file中。
hbase.hstore.compaction.max.size:表示文件大小>该值的store file一定会被minor compaction排除。
hbase.store.compaction.ratio:将store file按照年龄排序(从older到younger),minor compaction总是从older开始选择,如果文件的size小于它后面的hbase.hstore.compaction.max个store filede size之和乘以ratio,那么该store file也加入到minor compaction中。(判断大小大于min.size的文件是否参加minor compaction)。默认值1.2,取值范围建议1.0-1.4。
hbase.store.compaction.ratio.offpeak:非高峰期的ratio控制,默认值5.0。是否高峰期有hbase.offpeak.start.hour和hbase.offpeak.end.hour控制,两个参数都是[0,23]的整数,用于定义非高峰时间段。都为-1表示禁用此功能。此参数的作用就是:非高峰期允许compact更大的文件。