POC测试总结

一、       测试内容

测试内容

测试目的

其他

功能测试

验证产品的自动部署安装、集成统一管理、运维监控功能是否完善、对SQL的支持能力(SQL-标准、事务支持能力、索引、存储过程、UDF),混合负载管理能力

存储特性及多重分区能力

组件测试

验证产品的数据压缩存储特性、多种计算接口支持、对异构数据库支持、数据挖掘能力

压缩对性能的影响

性能测试

测试产品的单查询性能和并发查询能力、验证产品的索引特性及大批量数据更新能力、删除能力、数据导出能力

索引特性

大批量数据更新删除能力

可靠性能

验证集群不同组件的高可用、备份、恢复能力


安全测试

验证产品的安全权限管理


扩展性测试

产品节点置换、扩展能力及对性能的影响



本次选取了有代表性的几个产品进行比对,记录测试时间和测试结果,并对结果和出现的问题进行一定的分析。因篇幅限制,本文只介绍性能有关的测试,其他内容下次单独介绍。另外个别产品比如IBMBigSql测试结果没有一一列出,只在文中有少量提及。

二、       测试流程

1.      准备工作

环境分配、搭建、检查

测试案例设计、评审

自动化脚本编写调试

评审脚本,确定开始时间

修改密码、启动机器

2.      执行过程

清库、建库、加载种子数据、翻数、运行核数脚本

单查询

并发查询

逐条导入

导出测试

组件测试(压缩、多租户、接口支持),扩展性测试、可靠性测试、安全测试、TPC-DS测试

三、       测试环境

1.      测试环境及工具

机器节点

操作系统

节点数

磁盘

内存

CPU

RAID策略

DB节点

Red   Hat 6.6

18

SATA2T/*10/节点

256G/节点

24

2.6GHZ

系统盘:RAID 1

600G*2

数据盘:JBOD

ETL节点

3

SAS 1.2T/*16/节点

采用nmon监控工具

2.      种子数据及翻数说明

种子数据10张表,一天527G数据,造数要求:

1)  独立证券数:1万只(现有基础放大4~5倍)

2)  会员数:1000

3)  交易单元数:10万个

4)  营业部个数:10万个

5)  投资者账户数:10亿个

6)  委托成交独立账户数:委托独立账户1亿,成交独立账户7千万

7)  持股记录独立账户数:2亿个

种子数据表和翻数说明

序号

表名

中文名

数据量

种子文件大小

翻数说明

1

DWCJK

成交库

11亿/

128G

310

2

DWWTK

委托库

13亿/

145G

310

3

TSQUOTAT

逐笔行情

2亿/

57G

310

4

WWTNISHC

二级股份持有及变更

4亿/

24G

310

5

DWZQXX

证券信息库

1

3M


6

SWTNIALK

投资者当前概要表

10亿

145G


7

WWTNBRCH

营业部资料表

10

19M


8

WWTNMMBR

会员资料表

1000

0.5M


9

WWTNSEAT

席位资料表

10

15M


10

SWTNBCSA

营业部客户托管单元当前信息表

7亿

29G


翻数规则

略,数据日期从2015-05-01开始

查询参数

Python脚本随机生成

四、       测试案例

1.      性能测试案例

案例编号

类别

查询范围

特征

返回数量级

备注

tc000

加载及翻数

-

-

-


tc001

简单查询

1

单表(成交库)查询、排序

万级


tc002

简单查询

1个月

多个单表(成交、委托、证券信息)分别查询并汇总,取交集,不排序

个位


tc003

中等查询

1季度

两张表(大表:成交库,小表:当前投资者概要)关联后,分组统计并排序

十万级


tc004

中等查询

1

大表分组统计,取并集,再和其他小表做关联,不排序

万级


tc005

复杂查询

1个月

多表关联(含两个大表:成交库,二级股份持有及变更),分组统计,关联数量级大

万级


tc006

业务查询1

1个月

考察with语句的解析优化能力

百万级

写表

tc007

业务查询2

半年

考察with语句的解析优化能力,支持dense_rank分析函数

个位


tc008

业务查询3

1

考察with语句的解析优化能力,支持case when

万级


tc009

业务查询4

1个月

考察with语句的解析优化能力,支持分析函数row_number和条件分支语句

千级


tc010

业务查询5

15

考察with语句的解析优化能力,对子查询结果取并集

万级


tc011

简单并发

1个月

执行tc002,并发数20个、50个、100个,参数随机生成,考察并发能力

个位


tc012

中等并发

1

执行tc004,并发数20个、50个、100个,参数随机生成,考察并发能力

万级


tc013

复杂并发

1个月

执行tc005,并发数20个、50个、100个,参数随机生成,考察并发能力

万级


tc014

混合并发

1个月/1/1个月

50个简单tc00230个中等tc00420个复杂tc005

个位

万级

万级


2.      功能测试案例

暂略

五、       产品说明

1.      总体介绍


Cloudera

Hortonworks

星环

华为

测试平台

CDH 5.8

HDP 2.5.3

Transwarp 4.6.4

FI R002C6

Hadoop版本

Hadoop 2.6

Hadoop 2.5

Hadoop 2.5

Hadoop 2.7

测试引擎

Impala 2.6

Hawq 2.0.1

Tez 0.7(Hive 1.2)

Inceptor 4.6.4

Elk 6.0.RC1

SQL支持

SQL-92

SQL-92,99,2003

采用HQL接口,最新支持到2011

SQL-92,SQL-99,SQL-2003

支持SQL-2003标准,其他部分支持

图形化SQL客户端

Waterdrop

Data studio(后续才提供)

 

     2.      组件架构

     1Impala

impala.png

     a)  采用联邦架构(无Master节点)

b) 采用独立的资源管理器

c)  Hive共享元数据

d) 支持常用的HDFS存储格式

e)  代码开源

 

2Hawq

hawq.png

a)  采用MPP架构(Master/Slave

b) PG 8.1版本移植

c)  SQL标准支持能力强

d) 采用独立的资源调度器

e)  弹性执行引擎

f)   支持访问任何HDFS格式及其他系统的数据,可开发新插件访问新的数据源

g)  与开源Hadoop无缝集成

h) 代码开源

 

3Tez

tez.png

a)  采用Hive on Tez架构

b) 充分利用YARN框架,简化数据部署

c)  改进DAG减少IO的读写

d) 代码开源

e)  支持更新、删除

 

4LLAP

llap.png

a)  基于Hive on Tez架构的进一步增强

b) 计算信息常驻内存并共享

c)  支持SQL2011TDC-DS最新用例

d) 支持ACID MERGE

e)  可视化的开发调测工具

 

5Inceptor

inceptor.jpg

a)  基于Hive on Spark引擎改进

b) SQL标准支持能力强

c)  支持内存列式存储

d) 并发调度器SLA Scheduler,并行能力强

e)  SQL语法完全支持DB2Oracke的原语解析,应用迁移方便

f)   支持更新、删除功能

g)  产品闭源

 

6Elk

elk.JPG


a)  采用MPP架构(Master/Slave

b) PG9.2版本移植

c)  采用独立的资源调度器

d) 支持多Coordinator

e)  数据预排序功能

f)   支持更新、删除

g)  产品闭源

 

六、       测试结果

1.      测试时间及执行情况

测试开始时间:201611

测试结束时间:201703

产品名称

1轮完成率

1轮出现的问题

最终完成率

问题说明

Impala

79%

内存溢出

86%

1、  挂盘失败导致tc013案例失败

2、  内存溢出导致tc014案例失败

Hawq

79%

1、  内存溢出

2、  系统连接冲突

3、  磁盘写错误

93%

tc014案例的100个文件有1个未生成

Tez

50%

节点负载过高导致宕机

64%

1、  tc006案例语法不支持,修改后不一致,放弃

2、  负载太高放弃tc003,tc013,tc014

LLAP

86%

tc012100个并发文件到最后1hang住了

93%

1、  加载、并发查询为加测

2、  tc013未执行成功,最终放弃

3、  参数未使用正式执行参数

Inceptor

79%

放弃tc008,tc013,tc014

100%


Elk

21%

1、  资源利用率过低,修改了参数

2、  内存溢出,tc012,tc013,tc014报错

3、  负载过高LDAP服务挂掉,从tc003tc014全部报错

100%


 

2.      性能测试结果

明细耗时(单位:秒),测试内容和测试案例完全对应

测试内容

Hawq

Impala

Tez

Inceptor

Elk

返回行数

加载种子数据500G

516

611

1195

1620

519

47.9亿

种子数据翻310

32273

44307

161555

55510

40153


简单查询1

31

7

33

13

9

45880

简单查询2

34

109

488

3

2

3

中等查询1

855

1245

3772

1494

660

389536

中等查询2

57

73

174

81

81

20000

复杂查询

543

2456

3604

41

85

10000

业务查询1

665

956

-

1643

913

4946805

业务查询2

16

626

8296

179

64

1

业务查询3

1443

36136

-

11918

10435

24166

业务查询4

2153

17362

8659

1194

927

1137

业务查询5

111

917

4178

413

1391

72256

简单查询2并发20

31

1104

7491

23

345


简单查询2并发50

63

2405

19060

52

766


简单查询2并发100

134

5059

39460

194

1112


中等查询2并发20

2693

1360

6962

4684

6577


中等查询2并发50

6458

2266

13783

11402

13733


中等查询2并发100

12838

3978

26909

22448

34459


复杂查询并发20

6712

7312

-

1089

3461


复杂查询并发50

16062

18745

-

2518

6179


复杂查询并发100

31318

27816

-

2786

6751


混合查询并发100

13267

13904

-

8626

12882


 

各产品建表时分区、分布情况(表一:)

中文表名

英文表名

分类

产品名

Hawq

Tez

LLAP

成交库

dwcjk

分区

成交日期

成交日期,买卖类别

成交日期,买卖类别

分布

成交序号

Random

Random

委托库

dwwtk

分区

委托日期

买卖类别,委托日期

买卖类别,委托日期

分布

成交序号

Random

Random

逐笔行情

tsquotat

分区

交易日期

交易日期

交易日期

分布

Random

Random

Random

二级股份持有及变更

wwtnishc

分区

记录起始日期

N/A

记录起始日期

分布

投资者代码

Random

Random

投资者当前概要表

swtnialk

分区

N/A

N/A


分布

投资者代码

Random

Random

营业部客户托管单元资料表

swtnbcsa

分区

N/A

N/A


分布

Random

Random

Random

其他

others

分区

N/A

N/A


分布

Random

Random

Random

表二:

中文表名

英文表名

分类

产品名

Impala

Inceptor

Elk

成交库

dwcjk

分区

成交日期,买卖类别

成交日期

成交日期

分布

Random

Random

成交序号

委托库

dwwtk

分区

买卖类别,委托日期

委托日期

委托日期

分布

Random

Random

合同序号

逐笔行情

tsquotat

分区

交易日期

交易日期

交易日期

分布

Random

Random

证券代号,交易时间

二级股份持有及变更

wwtnishc

分区

记录起始日期

记录结束日期

N/A

记录起始日期

分布

Random

Random

投资者代码

投资者当前概要表

swtnialk

分区

投资者类别

Random

Random

分布

Random

投资者代码

投资者代码

营业部客户托管单元资料表

swtnbcsa

分区

N/A

N/A

N/A

分布

Random

Random

投资者代码

其他

others

分区

N/A

N/A

N/A

分布

Random

Random

所有节点全量分布

 

3.      加载与翻数分析

1、  加载性能对比

01.PNG

结论:

aHawq加载速度最快,每小时3.6T1G/秒),处于同一数量级的有ElkImpala

b)采用专用工具可减少代码开发复杂度,降低出错率

分析:

a)  LLAP采用Isilon的存储,专用加载工具,数据直接存放HDFS

b) Hawq采用gpfdist工具,Elk采用类似的加载工具gds进行加载

c)  Impala每小时3.04T,采用HDFS上传文件,Tez采用相同的方式加载

d) Inceptor每小时1.15T,人为原因,只使用了1ETL节点串行加载,没有打满3ETL机器

 

2、翻数性能对比

02.PNG

结论:

a)  Bigsql速度最快(4885W/秒),Hawq处于同一量级(每秒2887W条)

b) 翻数能力与磁盘写能力有一定关系,对内存使用相差不大,各个产品性能无明显差别

分析:

a)  IBM-Bigsql每天一个分区表(外部表)并行翻数,最后建立一个总的外部表指向之前建立的文件夹,比较有特点

b) Hawq每个节点采用12个数据库实例(默认6个),提高并行能力

c)  Elk每个节点采用9个数据库实例(默认4个)

d) Tez人为原因采用串行翻数,边扫描边计算,CPU使用率不高,整体效率较低

 

4.      单查询结果分析

1、单查询1性能对比

03.PNG

结论:

a)  Impala速度最快,ElkInceptor处于同一数量级

b) 单表查询,建表时分区字段的选择对性能影响较大

分析:

a)  Impala按买卖类别和成交日期进行分区,与查询条件吻合,其他产品均只按成交日期分区

b) Elk建表时指定证券代号和成交股数做预排序,插入数据时预先排序,降低计算复杂度

 

2、单查询2性能对比

04.PNG

结论:

a)  Elk速度最快,Inceptor处于同一数量级

b) 单表查询,提高数据块的扫描效率会对性能有一定的提升

分析:

a)  Elk插入数据时有做预排序,缩短查找范围,减少扫描磁盘的开销

b) Inceptor打开了最大最小值过滤器,减少扫描磁盘的开销

c)  Tez人为原因没有按证券代号进行分布,没有开启预排序功能,统计信息时没有全字段收集

 

3、单查询3性能对比

05.PNG

结论:

a)  BigSql执行最快,ElkHawq处于同一数量级

b) 计算时均不直接排序(或产品具有预先排序),会对性能有一定的提升

分析:

a)  BigSql利用pGRPBY特性,不做Sort运算(前提是组合条件不能过多,否则占内存),做小范围的GROUP BY

b) Elk插入数据时有做预排序,资源重分布时,可以减少(排序需要的)网络开销

c)  Hawq当维表比数据表大时,选择数据表做重分布,避免过滤后的数据全广播

 

4、单查询4性能分析

06.PNG

结论:

a)  Hawq执行最快,ImpalaInceptorElk处于同一数量级

分析:

a)  维表比汇总后的数据表还大,各个产品对资源的调度策略稍有差异

b) Hawq选择执行路由,汇总后的数据做重分布,认为全广播开销太大

c)  Impala调度器选择维表(证券信息库和营业部资料表)做全广播

d) Elk调度器选择对汇总后的数据做全广播

 

5、单查询5性能分析

07.PNG

结论:

a)  Inceptor执行最快,Elk处于同一数量级

b) 各产品自身特性对性能有一定的提升

分析:

a)  Inceptor具有等价范围扩展功能,会根据成交日期减少二级股份持有及变更表的扫描范围

b) Elk证券代号和成交股数预排序字段的利用,资源重分布时,可以减少(二次排序的)网络传输开销

c)  Tez不支持JOIN…BETWEEN,改写Sql后造成了两张表做笛卡尔积操作,后做filter时相当耗时

 

6、业务查询1性能分析

08.PNG

结论:

a)  Hawq执行最快,ImpalaElk处于同一数量级

b) Hawq对复杂语句的解析比较智能

分析:

a)  Hawq适合有with语句的场景,按成交序号做分布且默认打开multiphase_agg参数

b) Elk查询字段和建表时的预处理字段不一致,做聚合操作时排序效果不明显

c)  Impala的分区键(买表类别)没有利用上;并且本该最后扫描的成交库表却在一开始就进行了扫描,提前占用了1.09G的内存,在对执行计划树的优化上一般

 

7、业务查询2性能优化

09.PNG

结论:

a)  Hawq执行最快,Elk处于同一数量级

b) Hawq对复杂语句的解析比较智能

分析:

a)  Hawq适合有with语句的场景,按成交序号做分布且默认打开multiphase_agg参数

b) Elk不适合做不带limit限制的排序操作,并且条件字段和建表时的预排序字段不完全一致

 

8、业务查询3性能优化

10.PNG

结论:

a)  Hawq执行最快

b) 如果业务数据分布不均匀,可以考虑按随机方式进行分布数据

分析:

a)  代号’000001’的股票,数据量很大(造数的关系是其他股票的20倍),查询全年的数据,容易发生数据倾斜

b) Hawq表现特征:一个是适合with语句的场景,一个是设置成交序号作为分布键,数据分布比较均匀,计算时基本不会发生倾斜

 

9、业务查询4性能分析

11.PNG

结论:

a)  Elk执行最快,Inceptor处于同一数量级

b) 数据分布键和查询关联条件一致时,会有一定的性能的提升

分析:

a)  Elk逐笔行情表按证券代号和交易主机时间做数据分布,数据关联时数据本地化程度较高,较少了重部分的数据量,降低网络开销,HawqInceptor均是按随机分布

b) Inceptor具有等价范围扩展功能,扫描数据时会根据记录起始/结束日期缩短查找范围,减少读入内存的数据量

 

10、业务查询5性能分析

12.PNG

结论:

a)  Hawq执行最快,Inceptor处于同一数量级

b) Hawq对复杂语句的解析比较智能

分析:

a)  Hawq的表现特征:一是对with语句的支持能力比较好,另一个是按成交序号做数据分布,数据量大时不容易发生数据倾斜

b) Tez不适合做不限制数量的排序操作

 

11、单查询总结

aHadoop平台下的数据分区、分布对查询性能有比较大的影响,差异较大

bHawq不需要Session级的调优,基本靠优化器自身,对复杂语句支持能力比较好,引擎相对智能

cInceptor具有等价扩展功能,适合关联条件和查询条件一致的场景,对简单语句支持能力比较好

dImpala单查询整体表现一般,对于总量在50T以内的查个查询性能不对,超过100T时性能一般,人为因素也对最终结果有一定的影响

eTez单个查询表现不成熟,50T以内的处理分析比较适合,人为因素也对最终结果有一定的影响

fLLAP相对Tez有一定提升(2.1版本对1.2版本不管是语法解析还是执行计划的优化都有提高)

gBigSql单查询整体表现比较稳定,个别查询比较快

 

5.      并发查询结果分析

1、  简单并发性能分析

结论:

a)  InceptorHawq总体执行时间最短,两个产品处于同一数量级

b) 20个并发以内的查询,HawqElk并发性较好,20个并发以上趋于串行轮候执行

c)  20个并发以内的查询,InceptorImpala有一定的并发能力,50个并发以上有性能恶化现象

d) Impala对内存的占用比较大,InceptorHawq耗时最短,且资源消耗不高,性能较好

 

2、  中等并发性能分析

结论:

a)  Impala总体用时最短,Bigsql与其处于同一数量级

b) Impala总体趋于串行轮候,其他四个产品出现资源竞争现象

c)  Impala对内存的占用比较大,HawqImpalaCPU的占用一般,磁盘读写速度很快

 

3、  复杂并发性能分析

结论:

a)  所有产品均趋于串行轮候执行

b) 50个并发最大的中间结果集为60亿,100并发最大的中间结果集为8亿,(50个并发中有’000001’股票),因为50100两组并发耗时比较接近

c)  Impala对内存的占用比较大,Inceptor总耗时最小,对CPU的占用最大

 

4、  分析说明

说明1

a)  Inceptor混合并发用时最短,比第二名块1.18个小时,资源占用方面CPU占用最大

b) HawqElk处于同一级别,整体用时不大

c)  Impala100个文件有21个因为内存溢出没有正确导出,用例完成率79%,且内存占用率仍然很高

 

说明2

a)  Inceptor50个简单并发查询以内比较稳定,50个以上性能有恶化现象;支援占用方面,简单并发用时较短,且对CPU和内存占用并不多,复杂并发用时短,但对CPU占用相对较高

b) Hawq50个复杂并发以内,相对比较稳定

c)  Impala50个简单并发以内,并发较稳定,50个以上性能有恶化现象;资源占用方面对内存的影响一直比其他产品要大

d) LLAPTez有一定的提升,20个简单并发以内可用

e)  Bigsql20个简单并发以内可用,表现比较稳定,整个过程没有出现异常

f)   Elk20个简单并发以内可用,相对比较稳定,20个以上性能有恶化现象

g)  各产品成熟度均表现一般,结构化数据的并发查询还需要MPP作为补充工具

 

6.      其他性能结果

1、逐条插入

单进程逐条插入在10/秒上下,10个并发进程逐条插入在100/秒左右,效率低下,实际不会采用这种方式

 

2、导出性能

产品

导出单文件(58G2.3亿)

30个并发查询并导出(6.7T753亿)

时间(秒)

速度(条/秒)

时间(小时)

速度(条/

Impala

1874

12

5.8

360

Hawq

114

199

5.8

360

Tez

333

68

41

51

LLAP

421

54

7.9

262

Elk

111

205

4.7

445

Inceptor

-

-

-

-

导出单文件:

a)  Hawq采用gpfdist外部表方式(约1.79T/H),Elk采用类似的gds(约1.84T/H)处于同一数量级

b) Impala采用Impala shell命令文件追加的方式导出,约0.11T/HTez0.61T/H

c)  LLAP采用Beeline查询方式导出,基本处于同一数量级

dImpala人为原因程序按单进程串行处理速度较慢,如果按多进程处理速度应该有提升

30个并发查询并导出:

aElk性能最好,每小时约1.43T/H,处于同一数量级的有Hawq

bHawqImpala每小时约为1.16T/H

 

3、导出数据到DB2

产品

全表数据到DB2(中间不落地)

指定查询条件到DB2(中间不落地)

指定查询条件到DB2(中间产生落地文件)

时间(分钟)

速度(条/秒)

时间(分钟)

速度(条/秒)

时间(分钟)

速度(条/秒)

Impala

2.6

6369

2.4

6897

-

-

Hawq

3.8

4425

3.5

4808

-

-

Tez

72

213

170

98

178

94

Elk

2.07

8065

2.09

8000

1.58

10526

Inceptor

-

-

-

-

-

-

结论:

各产品均采用JDBC连接方式,不适合大批量数据导出,只适合小批量的数据导出

分析:

a)  三种场景导出到DB2的数据量均为100万条

b) Hawq采用pxf外部表方式;Impala采用Sqoop1方式;Tez采用Nifi方式,瓶颈在于查询,不适合order by全排序;Elk采用Loader工具导出

 

7.      测试出现的问题

1、  Hawq

agppoc没有权限访问数据库对象

解决:因为设置了gpadmingppoc两个用户组,分别使用各自的资源队列,切换到gppoc用户后脚本缺少环境变量,Shell脚本中增加了PGHOST=127.0.0.1即可

btc008报内存不够

解决:设置的pg_defaultmem值超过了当时可以访问的内存值,重新调低该参数值

# select * from pg_settings where name like ‘%protect%;

# select * from pg_resqueue;

vsegresourcequota:资源队列里面虚拟Segment的限额。开始设置的是1818G*204Vseg=3672G,实际硬件256G*17Nodes=4352G,总的资源占比84%,后修改为16G,每个计算单元按16G计算,总的资源占比为75%,控制在80%以内。

c)  程序异常退出

解决:因为采用tmux登录,且程序没有放在后台,人为原因(Ctrl+C)退出了程序

d) 最大连接数max_connections不足,程序执行异常

解决:重新设置系统参数

/data/hawq/master/postgresql.conf

max_connections = 1280 (默认值250

max_prepared_transactions = 1280 (默认值1000

masterslave通信时,内部心跳会用到connection,一般把max_connection设置的比较大,开始设置为14001200导致资源抢占,连接被拒绝,所以将参数调小了一点,控制在合理范围

当设置max_connection时,必须同时设置max_prepared_transactions,并且max_connection必须小于等于max_prepared_transactions,建议生产环境两个参数值保持一致即可

max_prepared_transactions是本地化参数,所有节点必须配置成相同的值

另一个参数seg_max_connection(默认值1280),建议设置为max_connection5~10倍,且必须要比max_prepared_transactions

e)  中等并发查询报空指针异常connection pointer is NULL

解决:执行前删除数据没有使用HDFS标准命令,而是直接rm掉数据,之后没有启动HDFS当时系统未报错,后面重新启动了HDFS,组件进行数据校验,出错并开启了安全模式SAFE_MODE=TRUE(默认关闭,可读可写,一旦打开只可读不可写)。直接关闭了该参数,继续向下执行未发现异常。

 

2Impala

a)拒绝连接206a2 fialed:RPC client failed to connect: Couldn’t open transport for cdh2:22000(connect() failed: Connection refused)

解决:执行程序前删除了分析表语句,没有收集统计信息导致分配资源不够

bnmon日志出错RX packets:0 TX packets:0

解决:没有采用延时导致kill nmon的程序提前了11秒并打印了信息,在kill之前统一延时3~5秒即可

cnohup.out日志中出现删除数据库失败的提示

run/nohup.out:ERROR

run/nohup.out:ImpalaRuntimeException:Error making ‘dropDatabase’ RPC to Hive Metastore

解决:调起程序前,已经手动删除过数据库,脚本有再次删库提示失败

d) 管理页面显示有1台机器异常

解决:系统安装后,系统盘没有隐藏(其他节点均有隐藏),导致挂盘时挂错了,把系统盘当成了disk01使用,并删除了系统文件。

e)  tc01350个复杂并发查询)程序报impala_client.RPCException: ERROR: Invalid or unknown query hadle

解决:暂无解决方案,生产环境执行需修改SQL,优化执行路由

fHDFS报健康状态错误

解决:一个是内存交换异常不影响使用,一个是因为较长时间没有进行健康检查提示异常

 

3Tez

atc006sql语句Tez语法不支持join on…(…or…)

解决:修改sql后试跑多次均与标杆数据对比不上,(可能与参数文件有关),后放弃

btc005tc007sql语句Tez语法不支持joinbetween不等值连接

解决:改写sql

c)从tc008开始报:BolckMissingException: Could not obtain block

解决:在Ambari监控页面,看到17个计算节点有5down掉了,接收不到心跳信息,且出故障的节点无法ping通。通过查看nmon日志,发现down掉的5台机器cpu均接近100%I/O相当高,负载很高,初步怀疑是机器负载过高导致。未解决,程序继续向下执行。

d) tc008开始执行,4个小时后hdp10节点down掉了

解决:进一步检查环境发现之前5down掉的机器redhat_transparent_hugepage未禁用,因为在linux下使用必须禁用透明大页面,否则会导致Hadoo使用时报错。比较奇怪的是正式起跑前已经对18台机器进行了设置:

# echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag

# echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled

etc008跑了7个半小时,发现hdp09hdp10节点都down掉了

Hortonworks原厂认为是linxu系统的bugfutex_wait_call造成的,或者XFS Bug协同引起的。多个进程在等待和唤醒交替时可能出现,尤其是Haswell处理器(CPUE5-2690 v3)配上redhat6.6,只能通过打补丁解决

红帽专家定位分析:通过/var/crash目录下的vmcore发现cpu load比较高(5分钟内达到264.52的负载),从日志看node 0 normal基本用完,内存不足。写文件时需要在node 0分配memory,这是node0 memory已经用完,触发了shrink_zone来在node0进行内存回收,回收是发生了异常导致oops

解决:没有解决

ftc013tc014执行时间过长,放弃

 

4Inceptor

a)采用4.6.2版本,混合并发100个无法完成

解决:并发的参数忘记设置,导致并发执行时间过长

btc008测试案例无法执行

解决:数据倾斜对数据影响比较严重,报错或被hang住。换用4.6.4版本后,增加了以下参数未出现上述问题

set inceptor.optimizer.on = true

set ngmr.reader.minmaxfilter=true

set mapred.reduce.tasks = 350

 

5Elk

a)翻数时发现资源利用率比较低

解决:对资源队列参数进行修改,max_active_statements:针对资源池允许某个控制节点(CN)上执行的并发数,默认值是10

gs_guc reload -Z coordinator -N all -I all -c “max_active_statements = 20”

设置完成后效率有比较明显的提升

btc012_3tc014_3out of memory

分析:tc012案例work_mem=8G,到tc012_3时,单个query达到了上线,内存总和超过了系统内存总和。操作系统kill掉了脚本进程,另外安装产品时默认设置一个节点9个数据库实例,每个实例内存上线max_process_memeory30G,也会导致内存溢出。

解决:将work_mem改小,设置为6Gmax_process_memeory30G调整为25G

cNameNode节点的LDAP认证服务挂掉了导致报错

分析:测试时参照生产环境进行,保留了LDAP认证服务,但为了追求性能没有对LDAP做主备,最终原因应该是nodename节点负载过高导致服务终止

解决:重启LDAP服务,重新开始执行

d)对数sql执行时报内存不足错误(memory is temporarily unavailable

分析:为加快第1sql查询速度,设置最大内存阈值work_mem=6G,内存分配到了算子级别count(distinct)共分配4*6G=24G的内存,其他处理还需要一定的内存。数据库实例设置内存上线max_process_memory等于25G,当内存阈值达到25G就会报内存不足错误

解决:设置work_mem=4G,不单独额外增加内存设置,重新执行(耗时较久约13.6个小时)

 

七、       其他

1.      产品调优


2.      注意事项

 

3.      最后说明

1、  因为产品众多(前后8Sql引擎),对各个产品的理解有限,且受限于篇幅,本文仅作为测试工作一个阶段性总结。

2、  各个产品在最近今年变化都比较大,比如2018年8月份HAWQ 成 Apache 顶级项目,11月份TDH 升级到6.0后,Inceptor也有了很大的性能提升,各个产品更多新的特性还是值得关注的