首页 / 新闻

04.

08

2016

企业数仓OLAP业务的优化技术介绍

技术博客

跨越大数据基准测试TPC-DS100T

 

在2016 Hadoop技术峰会的大数据优化技术专题论坛上,星环科技首席架构师陈博士分享星环TDH如何克服一个个技术难关,在不做数据分区的情况下,通过TPC-DS 100T测试,处理5500多亿条记录,100多万个数据块,99个复杂业务场景。

 

  • 测试基准TPC-DS概述

 

TPC-DS是TPC组织推出的一个基于决策支持系统的测试基准,目前大家比较推崇TPC-DS,因为它的设计比较合理,这里面包含了7张事实表和17张纬度表,能够真实地回答一些商业问题。它采用的不是传统的关系数据库里面的关系模型,而是星型模型、雪花模型。这套测试一共有99个测试案例,并遵循SQL 99和2003的语法标准。这些测试案例分为不同的业务模型,如分析报表时的即时查询、迭代计算等等。整个测试过程对系统资源要求非常高。所以如果要得到优异的测试结果,优化工作不仅包括计算快,更是要求对IO、内存、CPU的使用达到平衡。作为大数据测试基准,TPC-DS的设计参数是可扩展的,支持1G、1T、10T、100T等数量级。本次分享的内容是基于100T的测试。

 

TPC-DS100T的测试涉及到的7张事实表总的记录数超过了5500亿条,其中最大的一张表Store_class上就有2800多亿条记录。用它原始的脚本生成数据存在HDFS上,大概有100万个数据块。如何处理如此海量的数据,对任何一个大数据平台都是巨大挑战。然而经过不断的改进,星环TDH在不使用任何索引、不做任何数据分区的情况下,已经成功通过了TPC-DS 100T测试。TDH大数据处理能力、性能和稳定性达到新高度

 

  • 兼容标准SQL不只是语法问题

 

SQL的标准是专家们经过各方面研究后定义出来的。如果不采用标准写法,那么增加研发成本、迁移成本还有维护成本,也会影响到代码的性能。所以SQL的兼容性非常重要。星环的产品Inceptor引擎支持SQL 2003,同时兼容Oracle的PL/SQL和DB2的SQL/PL,对SQL的支持度远超过其他同类产品。Gartner在最新版本的《Magic Quadrant for Data Warehouse and Data Management Solutions for Analytics》里对此作了高度的评价。

 

"Transwarp has a unique set of capabilities, such as its Inceptor SQL component based on Apache Spark, with Oracle SQL and PL/SQL compatibility supporting create, read, update, delete (CRUD) and ACID operations. This component is particularly praised by reference customers."

 

--摘自Gartner,《Magic Quadrant for Data Warehouse and Data Management Solutions for Analytics》, 2016

 

 

  • 性能优化

 

Benchmark本身是追求性能。目前优化效果比较好的方法有如下几种:

 

  • 分区(Partition):通过数据分区实现每次只操作当前关心的数据,优化效果显著。
  • 基于代价的优化(CBO):根据需要处理的数据量进行估算选择不同的策略。
  • 向量化(Vectorization):利用底层硬件向量化指令加速计算。
  • 代码生成(CodeGen):通过预先分析生成Native code再执行。
  • 谓词下推(PPD):扫表过程中根据过滤条件,不需要的数据不会从底层传上来,大大减少计算量。

 

数据量不同,优化策略也不相同。为了得到更好的优化效果,星环的Inceptor对CBO作了一些改进。首先,要综合考虑CPU、网络、磁盘IO的代价。当数据量小的时候网络、磁盘IO的代价可以忽略,但是在测100T的时候,需要把几亿条记录的一张表从磁盘或者网络读取过来,这两者的IO已经不容忽视。通过分析发现99个SQL中大部分带withas 和子查询。如果这部分代价分析不出来,那么对最终的性能影响是非常大的,所以星环增加了with as和子查询的处理。最后是分区表的支持。在实际应用中很多表都是分区的,每个分区表的CBO都需要特殊处理,以减少后期参与运算的数据量,提升效率。

 

为了衡量Inceptor的优化效果,我们与impala和spark在相同的测试环境下,在TPC-DS 1T的测试集上进行了对比,总体上,Inceptor的SQL性能是Impala和Spark的2-3倍。

 

 

  • 跨越TPC-DS 100T测试

 

即使做完上述优化,也不意味着能够顺利通过100T的测试。星环采用的测试环境配置并不好:总共29个节点,每个节点CPU2X6核Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz;磁盘12X3T;内存只有100G,和处理100T的数据并不匹配;另外网络只有千兆。最后测试结果显示网络和内存确实影响了性能提升。

 

实测时发现,虽然做了很多优化,但在运行100T的TPC-DS测试时还是遇到很多问题,需要进一步调优。第一步需要对100T的数据仔细分析,利用CBO调整优化策略。第二步是改进数据结构设计,综合考虑内存和磁盘存储,避免GC和OOM。第三是改进算法,调整参数,提升稳定性。通过反复测试、改进,星环Inceptor最终顺利通过了TPC-DS 100T的测试。

 

在同样的测试环境,我们也测试了1T、10T和30T,结果显示Inceptor的扩展性很好。从1T到100T,数据量增加了100倍,而消耗的时间只增加了20多倍。这意味着实际应用中,随着用户数据量的增加,星环的Inceptor稳定性和性能依旧很好。

 

 

总结上文,大数据处理其实是考验了综合处理能力,并不是某一方面特别强就可以,更要考虑到稳定性、容错性。我们需要对数据进行分析,针对不同的数据级、应用场景选择不同的策略。只有对应用场景比较了解,才能选择出针对性的解决方法。在资源方面,需要综合平衡CPU、内存、磁盘、网络等。为了解决这些问题,星环将推出一体机的解决方案,希望通过合理的软件配置,提高整体的性价比。