Trafodion建表之如何定义分区个数

使用Trafodion的用户可能会经常有一个疑问,那就是在Trafodion中创建表时到底定义多少分区数是合适的?

我们已经知道,Trafodion是一款SQL on Hadoop的数据库引擎,底层基于HBase,具有多节点分布式存储和计算的功能。关于分布式存储,Trafodion在建表时提供盐粒功能(SALT)可以实现数据在加载到Trafodion中均衡分布于各个节点,即把数据通过预分区的方式分成多个Region放置于不同的RegionServer节点,理想情况下,每个RegionServer节点上面的数据量几乎是一致的;关于分布式计算,当一个表的数据被划分为多个Region并分布在多个RegionServer上时,数据的扫描、计算也会在每个节点上启动一定数量的ESP进程,从而实现多进程并发的数据扫描、计算任务。
这里写图片描述
关于建表时进行预分区的语法,大致如下,

create table test (id int not null, name varchar(10)) 
primary key (a)
salt using N partitions;

有关Trafodion建表的详细语法,您可以参考Apache Trafodion官网文档SQL手册之http://trafodion.incubator.apache.org/docs/sql_reference/index.html#create_table_statement

通过以上样例我们可以知道,建表时如果希望实现预分区,需要用户指定N的数量,即预分为多少个Region,此功能利用HBase自身的预分区功能,使用预分区功能的同时,我们需要修改HBase的参数hbase.hregion.max.filesize,把它调整为一个较大的值(通常设为100G),这是为了防止由于默认配置太小导致Region自动Split。

接下来的问题变成,N设置多大比较合适?以下观点仅为个人观点,仅供读者参考 。

说实话,这个问题没有一个准确的答案,一方面数据量越大Region多一点有助于数据打散和更多的ESP扫描,另一方面HBase本身对每台RegionServer节点上的Region个数也是有一个性能最优的范围,并不是越多越好。

Region个数的定义需要考虑以下一些因素:

  • 数据量大小(一般情况下推荐1million行记录一个Region,若表较小(<1million),可以不建分区;当然,如果表特别宽,可以适当减少每个Region的记录数如几十万行一个Region,如果表特别窄也可以适当增加每个Region的记录数如几百万行一个Region)

  • 节点数(一般情况下对于大表(这里指超过1million行的表),Region的个数可以设为节点数的整数倍,举例来说,假如一张表有1亿行记录,总共5个Trafodion节点,Region个数可以设定为20个)

  • 磁盘数(一般情况下对于大表,分区数越多则并发度也越大,比如同样的1亿的表在做全表扫描时,20个分区会比10个分区更好,因为DOP可以达到20,一般推荐表的Region个数最大为节点数*磁盘数,假如有5个节点每节点有8块磁盘,那么Region个数最大设置为5*8=40)

  • HBase本身的限制(HBase的官网上推荐单台RegionServer的Region个数在100~200范围内性能可达到最优,不过HBase并没有给出每个节点的Region上限,然而,HBase却有一些说明表示单台RegionServer上的Region个数不能太多,否则会引起一系列性能问题,经过一些技术尝试,我认为只要单台RegionServer的Region个数不超过1k即可,假如有这样一种场景,总共5台机器的集群,最大可容纳5000Region,如果有1000个表每个表都是有10个Region的,那么肯定就不合适了,即使数据库可以正常工作,性能也是无法保证的,可能还会引起HBase Master无法启动的情况)

另外,前面也提到过,如果是数据量小而且是随机查询的场景,这种情况下对表进行分区可能性能反而不好,这主要有两个原因:
- ESP的启动本身也需要少量时间,这个时间可能很短,但如果本身查询时间就是毫秒级别可能还是相对会有所影响
- 单分区的扫描可以直接定位数据位置,而多分区情况下则需要一个额外查找所需数据在哪个节点的哪个分区上的性能消耗,比如表有8个分区,实际查询的数据在其中某一个分区上,那么从8个分区中查询到1个分区也是会需要少量时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值