HBase从入门到精通11:HBase数据保存过程和Region分裂
1、HBase保存数据的流程有以下几个步骤:HBase表的列族在创建之初只有一个Region,随着插入数据的增多Region变得越来越大。
2、以fileServer为例,在使用默认的split策略--IncreasingToUpperBoundRegionSplitPolicy 的情况下,16个预分区Region, 则单个Resion容量达到 min(32,50),即32GB时分裂。
3、默认,HBase 在创建表的时候,会自动为表分配一个 Region,正处于混沌时期,start-end key 无边界,所有 RowKey 都往这个 Region里分配。
4、Hbase Split 是一个很重要的功能,HBase 通过把数据分配到一定数量的 Region 来达到负载均衡的。
hbase预分区表能调整吗
1、默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都向这一个region写数据,直到这个region足够大了才进行切分。
2、预分区后,可以从 HBase ui 页面观察到: HBase API 建预分区表 为防止热点问题,同时避免 Region Split 后,部分 Region 不再写数据或者很少写数据。
3、保证了负载均衡性。像这样预先创建hbase表分区的方式,称之为预分区。hash(主键)+年月日时(2019062315)这里只取hash(主键)的前6位,使得行键的长度正好是16,也就是8的整数倍,在64位计算机中,效果最好。
4、hbase.hstore.blockingStoreFiles默认设置为7,可以适当调大一些。
5、hbase.hregion.max.filesize 设定的region大小,超过了就会split,就会增加一个region,对预分区没什么影响。
什么是hbase中的散列和预分区
所以,HBase 提供了预分区功能,让用户可以在创建表的时候对表按照一定的规则分区。
像这样预先创建hbase表分区的方式,称之为预分区。hash(主键) + 年月日时(2019062315)这里只取hash(主键)的前6位,使得行键的长度正好是16,也就是8的整数倍,在64位计算机中,效果最好。
目前我们已经确定了hbase存储,并且采用预分区的方式并且采用rowkey进行过滤查询,那么现在考虑rowkey的设计。
那么依照这个原则,我们可以将数据所要投放的分区提前大致的规划好,以提高Hbase性能。
保证了负载均衡性。像这样预先创建hbase表分区的方式,称之为预分区。hash(主键)+年月日时(2019062315)这里只取hash(主键)的前6位,使得行键的长度正好是16,也就是8的整数倍,在64位计算机中,效果最好。
HBase每张表在底层存储上是由至少一个Region组成,Region实际上就是HBase表的分区。
Hbase读写原理
所以hbase大多数读要走磁盘,所以读很慢。 每次刷写会生成新的Hfile,Hfile很小并且数量多的时候会影响查询的速度。所以要进行合并。
Hbase是Hadoop的一个存储组件可以提供低延迟的读写操作,它一般构建在HDFS之上,可以处理海量的数据。Hbase有个很好的特性是可以自动分片,也就是意味着当表的数据量变得很大的时候,系统可以自动的分配这些数据。
为了减少flush过程对读写的影响,HBase采用了类似于两阶段提交的方式,将整个flush过程分为三个阶段:要避免“写阻塞”,貌似让Flush操作尽量的早于达到触发“写操作”的阈值为宜。
无Master过程中,数据读取仍照常进行。但是,无master过程中,region切分、负载均衡等无法进行。
使用HBase提供的TableOutputFormat,原理是通过一个Mapreduce作业将数据导入HBase 还有一种方式就是使用HBase原生Client API(put)前两种方式因为须要频繁的与数据所存储的RegionServer通信。
hbase表重新预分区的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于hbase中的分区是如何定位的、hbase表重新预分区的信息别忘了在本站进行查找喔。