重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
一个store里面有很多个StoreFile, 最后数据是以很多个HFile这种数据结构的文件保存在HDFS上
说明:HBase集群,只有一张meta表,此表只有一个region,该region数据保存在一个HRegionServer上
scan 'hbase:meta'
来查看meta表信息1、客户端首先从zk找到meta表的region位置,然后读取meta表中的数据,meta表中存储了用户表的region信息
2、根据namespace、表名和rowkey信息。找到写入数据对应的region信息
3、找到这个region对应的regionServer,然后发送请求
4、把数据分别写到HLog(write ahead log)和memstore各一份
5、memstore达到阈值后把数据刷到磁盘,生成storeFile文件
补充:
HLog(write ahead log):
也称为WAL意为Write ahead log,类似mysql中的binlog,用来做灾难恢复时用,HLog记录数据的所有变更,一旦数据修改,就可以从log中进行恢复。
hbase.hregion.memstore.flush.size
134217728
hbase.hregion.memstore.flush.size
134217728
hbase.hregion.memstore.block.multiplier
2
hbase.regionserver.global.memstore.size.lower.limit
0.95
hbase.regionserver.global.memstore.size
0.4
flush ‘tablename’
或者flush ‘region name’
分别对一个表或者一个Region进行flush。为了减少flush过程对读写的影响,将整个flush过程分为三个阶段:
prepare阶段:遍历当前Region中所有的Memstore,将Memstore中当前数据集CellSkipListSet做一个快照snapshot;然后再新建一个CellSkipListSet。后期写入的数据都会写入新的CellSkipListSet中。prepare阶段需要加一把updateLock对写请求阻塞,结束之后会释放该锁。因为此阶段没有任何费时操作,因此持锁时间很短。
hbase为了==防止小文件过多==,以保证查询效率,hbase需要在必要的时候将这些小的store file合并成相对较大的store file,这个过程就称之为compaction。
在将Store中多个HFile合并为一个HFile
在这个过程中会选取一些小的、相邻的StoreFile将他们合并成一个更大的StoreFile,对于超过了TTL的数据、更新的数据、删除的数据仅仅只是做了标记。并没有进行物理删除,一次Minor Compaction的结果是更少并且更大的StoreFile。这种合并的触发频率很高。
hbase.hstore.compactionThreshold
3
hbase.hstore.compaction.max
10
hbase.hstore.compaction.min.size
134217728
hbase.hstore.compaction.max.size
9223372036854775807
合并Store中所有的HFile为一个HFile
将所有的StoreFile合并成一个StoreFile,这个过程还会清理三类无意义数据:被删除的数据、TTL过期数据、版本号超过设定版本号的数据。合并频率比较低,默认7天执行一次,并且性能消耗非常大,建议生产关闭(设置为0),在应用空闲时间手动触发。一般可以是手动控制进行合并,防止出现在业务高峰期。
major compaction触发时间条件
hbase.hregion.majorcompaction
604800000
手动触发
##使用major_compact命令
major_compact tableName
手动触发
##使用major_compact命令
major_compact tableName