正文
hbase预分区作用,hbase预建分区
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
HBase调优:预分区与行键设计
1、像这样预先创建hbase表分区的方式,称之为预分区。hash(主键) + 年月日时(2019062315)这里只取hash(主键)的前6位,使得行键的长度正好是16,也就是8的整数倍,在64位计算机中,效果最好。
2、像这样预先创建hbase表分区的方式,称之为预分区。hash(主键)+年月日时(2019062315)这里只取hash(主键)的前6位,使得行键的长度正好是16,也就是8的整数倍,在64位计算机中,效果最好。
3、已经有自动分区了,为什么还需要预分区? HBase 在创建表的时候,会自动为表分配一个Region,当一个 Region 达到拆分条件时(shouldSplit 为 true),HBase 中该 Region 将会进行 split,分裂为2个 Region,以此类推。
4、目前我们已经确定了hbase存储,并且采用预分区的方式并且采用rowkey进行过滤查询,那么现在考虑rowkey的设计。
hbase预分区与region切割的关系
hbase.hregion.max.filesize 设定的region大小,超过了就会split,就会增加一个region,对预分区没什么影响。
默认,HBase 在创建表的时候,会自动为表分配一个 Region,正处于混沌时期,start-end key 无边界,所有 RowKey 都往这个 Region里分配。
HBase的Region分裂过程需要注意以下几个问题:虽然Region分裂后可以提高HBase的读写性能,但是Region分裂过程会对集群网络造成很大的压力,尤其是要分裂的Region尺寸过大、数目过多时,甚至可以使整个集群瘫痪。
保证了负载均衡性。像这样预先创建hbase表分区的方式,称之为预分区。hash(主键)+年月日时(2019062315)这里只取hash(主键)的前6位,使得行键的长度正好是16,也就是8的整数倍,在64位计算机中,效果最好。
HBase性能优化-Rowkey&列族设计
必须在设计上保证RowKey的唯一性。由于在HBase中数据存储是Key-Value形式,若向HBase中同一张表插入相同RowKey的数据,则原先存在的数据会被新的数据覆盖。设计的RowKey应均匀的分布在各个HBase节点上,避免数据热点现象。
必须在设计上保证RowKey的唯一性。由于在HBase中数据存储是Key-Value形式,若向HBase中同一张表插入相同RowKey的数据,则原先存在的数据会被新的数据覆盖。设计的RowKey应均匀的分布在各个HBase节点上, 避免数据热点现象。
我这里只分了三个region,用hbase shell命令创建表,设置预分区数量为3 下图中,可以看到,预分区以后,数据的读写访问请求数量均匀分布在3台RegionServer上,避免了热点问题。
HBase的Rowkey是按照ASCII有序设计的,我们在设计Rowkey时要充分利用这点。比如视频网站上对影片《泰坦尼克号》的弹幕信息,这个弹幕是按照时间倒排序展示视频里,这个时候我们设计的Rowkey要和时间顺序相关。
行键(RowKey)的设计 首先应该避免使用时序或单调(递减/递增)行键。
Hbase分区
1、partition 顾名思义就是分区式,这种分区有点类似于 mapreduce 中的 partitioner,将区域用长整数作为分区号,每个 Region 管理着相应的区域数据,在 RowKey 生成时,将 id 取模后,然后拼上 id 整体作为 RowKey 。
2、具体步骤如下:需要知道要查询的表名和分区的起始行键或结束行键。可以使用scan命令来扫描hbase:meta表,这个表存储了所有分区的元数据信息。可以使用PrefixFilter或RowFilter来过滤出要查询的分区的记录。
3、像这样预先创建hbase表分区的方式,称之为预分区。hash(主键) + 年月日时(2019062315)这里只取hash(主键)的前6位,使得行键的长度正好是16,也就是8的整数倍,在64位计算机中,效果最好。
4、hbase swap分区使用率根据相应信息分析系统状况的需要。在系统维护的过程中,随时可能有需要查看CPU使用率,并根据相应信息分析系统状况的需要。在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况。
5、一张表预分区N个,那就是一开始就设定了N个region;hbase.hregion.max.filesize 设定的region大小,超过了就会split,就会增加一个region,对预分区没什么影响。
Hbase读写原理
1、所以hbase大多数读要走磁盘,所以读很慢。 每次刷写会生成新的Hfile,Hfile很小并且数量多的时候会影响查询的速度。所以要进行合并。
2、HBase采用了类似Google Bigtable的数据模型,即一个稀疏的、分布式的、持久化的多维映射表,每个表都由行键、列族、列限定符和时间戳组成。
3、为了减少flush过程对读写的影响,HBase采用了类似于两阶段提交的方式,将整个flush过程分为三个阶段:要避免“写阻塞”,貌似让Flush操作尽量的早于达到触发“写操作”的阈值为宜。
4、使用HBase提供的TableOutputFormat,原理是通过一个Mapreduce作业将数据导入HBase 还有一种方式就是使用HBase原生Client API(put)前两种方式因为须要频繁的与数据所存储的RegionServer通信。
5、HBase数据写入通常会遇到两类问题,一类是写性能较差,另一类是数据根本写不进去。
hbase预分区表能调整吗
1、默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都向这一个region写数据,直到这个region足够大了才进行切分。
2、预分区后,可以从 HBase ui 页面观察到: HBase API 建预分区表 为防止热点问题,同时避免 Region Split 后,部分 Region 不再写数据或者很少写数据。
3、hbase.hregion.max.filesize 设定的region大小,超过了就会split,就会增加一个region,对预分区没什么影响。
4、保证了负载均衡性。像这样预先创建hbase表分区的方式,称之为预分区。hash(主键)+年月日时(2019062315)这里只取hash(主键)的前6位,使得行键的长度正好是16,也就是8的整数倍,在64位计算机中,效果最好。
5、该数据库手动split分区数没变的原因如下:用户没有使用管理员权限,无法对HBase进行操作。HBase集群处于安全模式,无法进行split操作。split表中存在数据,无法进行split操作。
6、给服务器造成太大压力以及更严重后果,所以在建表的时候,根据已知的rowkey规则创建出来部分预分区以防止在热写过程中频繁的split等。所以rowkey设计应该考虑到这个问题,将数据散列到hbase集群的各个机器上,均分压力。
关于hbase预分区作用和hbase预建分区的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。