• 低配置要求

参见 集群配置需求

节点最低配置要求

备注: 以下是生产环境集群推荐的配置要求。

单个节点处理器数目 
  • 小型 = 2核
  • 中型 = 4核
  • 大型 = 8核或者更多
单个节点内存 
  • 小型 = 16 GB
  • 中型 = 64 GB
  • 大型 = 128 GB
节点数及并发数
  • 2个小型节点 = 4个并发查询
  • 2个中型节点 = 64个并发查询
  • 2个大型节点 = 256个并发查询
HBase单个节点内存 此设置将根据查询和并发级别的类型不同而不同。使用这些作为初始值:
  • 小型:Region Server Java Heap Size = 2 GB
  • 中型:Region Server Java Heap Size = 8 GB
  • 大型:Region Server Java Heap Size = 16 GB

HBase参数配置与调优

安装过程对HBase的修改

Trafodion安装脚本(traf_cloudera_mods, traf_ambari_mods)会修改HBase的以下配置:

HBase配置属性 安装脚本设定值 
hbase.master.distributed.log.splittingfalse
hbase.coprocessor.region.classesorg.apache.hadoop.hbase.coprocessor.transactional.TrxRegionObserver, org.apache.hadoop.hbase.coprocessor.transactional.TrxRegionEndpoint, org.apache.hadoop.hbase.coprocessor.AggregateImplementation
hbase.hregion.implorg.apache.hadoop.hbase.regionserver.transactional.TransactionalRegion
hbase.regionserver.region.split.policyorg.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy 
备注: 这个设置将会导致region只会在达到文件最大限制时才会自动分裂。
hbase.snapshot.enabledtrue
hbase.regionserver.region.transactional.hlogfalse
hbase.regionserver.region.transactional.tlogtrue
hdfs.namenode.java.heapsize (仅对Cloudera适用)1073741824 (1GB)
hdfs.secondary.namenode.java.heapsize (仅对Cloudera适用)1073741824 (1GB)

推荐配置

推荐用户对HBase参数配置做以下调整。

HBase配置属性推荐设置备注
hbase.rpc.timeout10分钟此设置取决于表的大小。默认值是60 seconds。 对于大表需要调高这个值。此值需保持跟参数 hbase.client.scanner.timeout.period一样。我们发现把这个值调为600秒会减少超时相关的错误,譬如 OutOfOrderNextException错误。
hbase.client.scanner.timeout.period10分钟跟上面的配置类似,默认值是60秒。根据用户表大小的不同,在做count(*)和update statistics命令时我们有遇到过超时相关的错误。底层根源是HBase的coprocessor执行时间问题。
hbase.snapshot.master.timeoutMillis and hbase.snapshot.region.timeout10分钟HBase默认设置是60000毫秒。如果您使用Trafodion Bulk Loader或其他语句时遇到与HBase快照相关的超时问题,可以设置这两个HBase的属性为10分钟(600,000毫秒)的值。
hbase.hregion.max.filesize107374182400 bytesHBase默认设置是10737418240 (10 GB)。我们把这个值增加到107374182400 (100 GB),这会减少每个HBase表的HStoreFiles数目,另外似乎也会减少因为region分裂对当前活动事务的干扰。
hbase.hstore.blockingStoreFiles10CDH 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 Size2 GiB在大型配置中应用此设置。
NameNode Java Heap Size2 GiB在大型配置中应用此设置。
Secondary NameNode Java Heap Size2 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语句。

 

  1. 执行命令sqstop停止Trafodion数据库。 参阅停止 Trafodion。这会停止Trafodion数据库实例和所有相关的DCS服务。
  2. 在您所使用的Haoop发行版的管理页面中停止HBase服务。
  3. 在您所使用的Haoop发行版的管理页面中启动HBase服务。
  4. 通过HBase shell开启HBase平衡功能,这会需要一定的时间。

    [trafodion@n1 ~]$ hbase shell
    hbase(main):002:0> balance_switch true

  5. 通过HBase shell关闭HBase平衡功能,此后就可以开始正常的业务。

    [trafodion@n1 ~]$ hbase shell
    hbase(main):002:0> balance_switch false

  6. 执行命令sqstart启动Trafodion数据库。参阅 启动 Trafodion。这会启动Trafodion数据库实例和所有的DCS 服务。
  7. 对于最近常使用的表执行update statistics。关于小建议,参阅 对Trafodion表更新统计信息。这会有助于确保Trafodion SQL compiler产生出最优的Trafodion SQL执行计划。
  8. 回到正常的SQL工作。
  • No labels