低配置要求
参见 集群配置需求。
节点最低配置要求
备注: 以下是生产环境集群推荐的配置要求。
单个节点处理器数目 |
|
单个节点内存 |
|
节点数及并发数 |
|
HBase单个节点内存 | 此设置将根据查询和并发级别的类型不同而不同。使用这些作为初始值:
|
HBase参数配置与调优
安装过程对HBase的修改
Trafodion安装脚本(traf_cloudera_mods, traf_ambari_mods)会修改HBase的以下配置:
HBase配置属性 安装脚本设定值 | |
---|---|
hbase.master.distributed.log.splitting | false |
hbase.coprocessor.region.classes | org.apache.hadoop.hbase.coprocessor.transactional.TrxRegionObserver, org.apache.hadoop.hbase.coprocessor.transactional.TrxRegionEndpoint, org.apache.hadoop.hbase.coprocessor.AggregateImplementation |
hbase.hregion.impl | org.apache.hadoop.hbase.regionserver.transactional.TransactionalRegion |
hbase.regionserver.region.split.policy | org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy 备注: 这个设置将会导致region只会在达到文件最大限制时才会自动分裂。 |
hbase.snapshot.enabled | true |
hbase.regionserver.region.transactional.hlog | false |
hbase.regionserver.region.transactional.tlog | true |
hdfs.namenode.java.heapsize (仅对Cloudera适用) | 1073741824 (1GB) |
hdfs.secondary.namenode.java.heapsize (仅对Cloudera适用) | 1073741824 (1GB) |
推荐配置
推荐用户对HBase参数配置做以下调整。
HBase配置属性 | 推荐设置 | 备注 |
---|---|---|
hbase.rpc.timeout | 10分钟 | 此设置取决于表的大小。默认值是60 seconds。 对于大表需要调高这个值。此值需保持跟参数 hbase.client.scanner.timeout.period一样。我们发现把这个值调为600秒会减少超时相关的错误,譬如 OutOfOrderNextException错误。 |
hbase.client.scanner.timeout.period | 10分钟 | 跟上面的配置类似,默认值是60秒。根据用户表大小的不同,在做count(*)和update statistics命令时我们有遇到过超时相关的错误。底层根源是HBase的coprocessor执行时间问题。 |
hbase.snapshot.master.timeoutMillis and hbase.snapshot.region.timeout | 10分钟 | HBase默认设置是60000毫秒。如果您使用Trafodion Bulk Loader或其他语句时遇到与HBase快照相关的超时问题,可以设置这两个HBase的属性为10分钟(600,000毫秒)的值。 |
hbase.hregion.max.filesize | 107374182400 bytes | HBase默认设置是10737418240 (10 GB)。我们把这个值增加到107374182400 (100 GB),这会减少每个HBase表的HStoreFiles数目,另外似乎也会减少因为region分裂对当前活动事务的干扰。 |
hbase.hstore.blockingStoreFiles | 10 | CDH 4.5默认值是7。我们增大到10,这好像也是HBase早期版本的默认值。 |
hbase.regionserver.handler.count | 参见备注 | 此设置需要跟mxosrvr的并发会话数目设置匹配。默认值是10。 |
关闭HBase Region自动均衡
当一个Trafodion事务还在活动过程中,Trafodion HBase事务型region endpoint coprocessor (org.apache.hadoop.hbase.coprocessor.transactional.TrxRegionEndpoint)不能同时处理region移动 。如果当Trafodion事务没有完成前,一个Region被自动均衡,这会终端事务,从而导致事务回滚和返回error 97。因此为了避免事务中断,在trafodion运行时,您应该关闭HBase region均衡功能。
使用HBase shell,设置HBase属性 balance_switch为false,这会关闭region从一个服务器移动到另一个服务器的功能。 例如:
# hbase shell
hbase(main):002:0> balance_switch false
true <-- Output will be the last setting of the balance_switch value
0 row(s) in 0.0080 seconds
在HBase 0.95及以上的版本中,通过HBase shell设置参数值后, balance_switch属性值会在之后的HBase调用中一直有效。
备注:为了优化Trafodion系统的性能,我们建议在您系统维护时间段打开HBase自动均衡。对于推荐,参见维护时间段。
Hadoop分布式配置和调优
建议您对HDFS heap大小做如下设置。
HDFS属性 | 推荐设置 | 备注 |
---|---|---|
DataNode Java Heap Size | 2 GiB | 在大型配置中应用此设置。 |
NameNode Java Heap Size | 2 GiB | 在大型配置中应用此设置。 |
Secondary NameNode Java Heap Size | 2 GiB | 在大型配置中应用此设置。 |
Trafodion配置和调优
连接
在Trafodion数据库中,数据库连接服务的heap大小设置默认是2GB,然而在我们的测试中发现限制DcsMaster的heap大小为64MB会有更好的吞吐量。
通常情况下,OLTP工作负载需要很多连接。我们发现,在每个节点拥有16GB内存的集群中,设置2个DCS服务器能提供最佳的性能;在每个节点拥有64GB内存的8节点集群中,设置DcsMaster的堆大小为96 GB,每个节点128个并发会话是最佳的。
在ZooKeeper的,连接的最大数量默认为60。根据你运行的ZooKeeper服务器的数量和DCS服务器的数量(即MXOSRVRs)不同,这一数字可能过低。因此,我们建议您在Zookeeper中设置maxClientCnxns参数为0以禁用连接数的最大数目的限制。有关配置和使用DCS的更多信息,参阅 Trafodion数据库连接服务参考指南。
对于Linux工作站上的ODBC连接,我们发现,使用至少.x版本第三方驱动程序管理器unixODBC会获得最佳的吞吐量。有关如何为Linux安装Trafodion ODBC驱动程序的更多信息,参阅 Trafodion客户端安装指南 (pdf, 1.12 MB)。
表维护
保持Trafodion tables的统计信息为最新的状态至关重要。 这会让编译器生成最优的执行计划。 SQL命令update statistics会为表生成最新的统计信息。 要执行update statistics命令,我们推荐一个基本的查询。
trafci
UPDATE STATISTICS FOR TABLE <table name> ON EVERY COLUMN SAMPLE;
exit;
每当您的Trafodion表的内容发生重大变更之后,需要执行更新表统计信息的操作。 例如:
[trafodion@n1~]$ trafci
Welcome to Trafodion Command Interface
Copyright(C) 2013-2014 Hewlett-Packard Development Company, L.P.
Host Name/IP Address: localhost:37800
User Name: zz
Connected to Trafodion
SQL>UPDATE STATISTICS FOR TABLE TRAFODION.SEABASE.TABLE1 ON EVERY COLUMN SAMPLE;
--- SQL operation complete.
SQL>exit;
数据加载
为了最大限度提高Trafodion表数据加载的性能,我们推荐使用UPSERT USING LOAD语法。
UPSERT USING LOAD加载数据过程不通过事务完成。
使用INSERT加载数据会采用事务,这在插入大批量的数据的时候可能会产生错误。
trafci
create table <table creation syntax>;
upsert using load into <table name> <upsert syntax>;
select * from <table name>;
exit;
[trafodion@n1 scripts]$ trafci
Welcome to Trafodion Command Interface
Copyright(C) 2013-2014 Hewlett-Packard Development Company, L.P.
Host Name/IP Address: localhost:37800
User Name: zz
Connected to Trafodion
SQL>create table trafodion.seabase.table1(a int not null, b char(10), primary key(a));
--- SQL operation complete.
SQL> upsert using load into trafodion.seabase.table1 values (1,'a'), (2,'b');
--- SQL operation complete.
SQL>select * from trafodion.seabase.table1;
A B
----------- ----------
1 a
2 b
--- 2 row(s) selected.
SQL>exit;
有关更多信息参阅数据加载。
JVM Heap大小
默认最大的heap大小是2 GB。此设置会导致大量分配驻留内存空间。对于OLTP工作负载,我们已经将此值降低到512 MB以减少mxosrvr和tdd_arkcmp进程的默认内存消耗。
表分区和Salting
我们选择采用pre-salting来加载与系统上的region服务器数量相等的所有的用户表数据。例如:create table … salt using <n> partitions 其中<n>系统中region server的数量。
OLTP性能改善
为了改善OLTP性能,HBase和Trafodion DTM的配置保持和DCS的并发保持同一级别。
- HBase配置: hbase.regionserver.handler.count=128
- 在$SQ_HOME/etc/ms.env中: TM_JAVA_THREAD_POOL_SIZE=128
维护时间段
在正常操作中,HBase会对每一个region做memstore flushes and compactions。同时也会发生Region分裂和均衡从而帮助优化HBase负载和性能。然而这些活动的执行频率和时长会对Trafodion的事务执行造成负面影响。
Trafodion HBase事务型region endpoint coprocessor (org.apache.hadoop.hbase.coprocessor.transactional.TrxRegionEndpoint)目前不支持在事务活跃期间的regions的动态移动。为了避免事务活动期间region发生移动,Trafodion HBase事务型region observer (org.apache.hadoop.hbase.coprocessor.transactional.TrxRegionObserver)会推迟region分裂。为了避免事务活动期间region均衡发生,我们建议您通过HBase shell禁用region均衡。参见关闭HBase Region自动均衡。
HBase的服务被终止时,HBase会刷新每个Region的memstore将其中的数据写到磁盘上的StoreFile中。当HBase的服务启动时,HBase会压实需要的regions。
为了优化Trafodion系统的性能,我们建议您在生产系统时间表中添加一个日常维护窗口。这将允许HBase的在没有Trafodion事务的一个窗口中执行自我管理所有regions的任务。这也有助于HBase管理每个Region的最佳位置,大小,和格式。
我们建议您在系统维护窗口遵从以下这些步骤:
停止所有Trafodion SQL语句。
- 执行命令sqstop停止Trafodion数据库。 参阅停止 Trafodion。这会停止Trafodion数据库实例和所有相关的DCS服务。
- 在您所使用的Haoop发行版的管理页面中停止HBase服务。
- 在您所使用的Haoop发行版的管理页面中启动HBase服务。
- 通过HBase shell开启HBase平衡功能,这会需要一定的时间。
[trafodion@n1 ~]$ hbase shell
hbase(main):002:0> balance_switch true - 通过HBase shell关闭HBase平衡功能,此后就可以开始正常的业务。
[trafodion@n1 ~]$ hbase shell
hbase(main):002:0> balance_switch false - 执行命令sqstart启动Trafodion数据库。参阅 启动 Trafodion。这会启动Trafodion数据库实例和所有的DCS 服务。
- 对于最近常使用的表执行update statistics。关于小建议,参阅 对Trafodion表更新统计信息。这会有助于确保Trafodion SQL compiler产生出最优的Trafodion SQL执行计划。
- 回到正常的SQL工作。