编者按
谈到大数据就会联想到Hadoop、Spark整个生态的技术栈。大家都知道开源大数据组件种类众多,其中开源OLAP引擎包含Hive、SparkSQL、Presto、HAWQ、ClickHouse、Impala、Kylin等。当前企业对大数据的研究与应用日趋理性,那么,如何根据业务特点,选择一个适合自身场景的查询引擎呢?
百分点在某国家级项目中承担了日增超5000亿级的数据处理与分析任务,集群的总数据量已接近百万亿。本报告结合百分点在项目中的业务场景,对HAWQ、Presto、ClickHouse做了综合评测,供大家参考。
一、测试整体方案
百分点面对的业务场景,主体是要解决超大规模数据集的Ad-Hoc查询问题,并且大多是单表查询场景。架构团队在此过程中选取了HAWQ、Presto、ClickHouse进行评测。评测中选取的数据集与SQL来自项目实际业务,我们需要评测维度主要如下:
A.数据在不同压缩格式下的压缩能力。
B.不同格式下的数据查询能力。
C.特定格式下的HAWQ、Presto、ClickHouse查询能力横向对比。
二、测试组件介绍
1.HAWQ
HAWQ是Hadoop原生SQL查询引擎,结合了MPP数据库的关键技术优势和Hadoop的可扩展性、便捷性,以及ANSI SQL标准的支持;具有MPP(大规模并行处理系统)的性能,比Hadoop生态圈里的其它SQL引擎快数倍;具有非常成熟的并行优化器等。
2.Presto
3.ClickHouse
ClickHouse是“战斗民族”俄罗斯搜索巨头Yandex公司开源的一个极具"战斗力"的实时数据分析数据库,是面向OLAP的分布式列式DBMS,圈内人戏称为“喀秋莎数据库”。ClickHouse有一个简称"CK",与Hadoop、Spark这些巨无霸组件相比,ClickHouse很轻量级,其特点包括:分布式、列式存储、异步复制、线性扩展、支持数据压缩和最终数据一致性,其数据量级在PB级别。
三 、测试环境
1.服务器硬件配置大数据服务器:大数据网络增强型d1ne
2.OLAP引擎环境
· HAWQ环境
· Presto环境
· ClickHouse环境
3.测试数据
数据存放路径:/data1~12/iplog,一个盘20G,6台服务器每台都是240G,一共1440GB;每台服务器12个盘装载4个分区(小时)数据,每个盘装载4个分区的1/12的数据,4个文件,每个文件大小5G,2500w条记录,一条记录200Byte。
4.测试SQL
测试挑选4个实际典型SQL,大致如下:
HAWQ压缩测试注意事项:只有当orientation=parquet的时候才能使用gzip进行压缩,orientation=row的时候才能使用zlib进行压缩,snappy不支持设置压缩级别。
详细的评测数据及图片展现如下文所示。
· 行式存储与压缩:
HAWQ的插入方式是将数据写入CSV文件后,Load到HAWQ表中。本次评测的是数据Load的过程和最终压缩比。可以发现,zlib压缩级别到5以后,压缩比的降低就不那么明显了。
测试明细:
结果图形展示:
行式存储查询性能:
测试明细:
结果图形展示:
· 列式存储与压缩:
测试明细:
结果图形展示:
列式存储查询性能:
测试明细:
2.Presto存储格式与性能评测 经过对比测试后,考虑数据的压缩比、数据的插入速度,以及查询时间这三个维度综合评估,我们的场景推荐Presto采用LZ4+ORC方式。这个结果也与各公司采用的格式一致。
· 存储与压缩:
测试方式,通过CSV文件Load到Hive表,原始数据总量为1440GB。
·查询性能:
3.查询对比测试:HAWQ vs Presto vs ClickHouse
通过对比测试结果可以发现,在相同的数据量查询SQL情况下,ClickHouse对比HAWQ、Presto有数量级的性能优势。由于我们的业务更多是单表的Ad-Hoc查询和分析,因此本次评测最终采用ClickHouse作为我们的OLAP引擎。
同时,测试过程中我们也发现一些有意思的现象,如:
(1) HAWQ对查询都是全表扫描,如类似Select * from where c1=xxx limit 10查询,而Presto则对扫描的结果直接返回。
(2) HAWQ查询会使用到系统缓存,而Presto对这方面并没有特别的优化。表现出的现象就是,在一定的并发度下,HAWQ反而会体现出缓存的优势,而Presto性能则呈现线性下降趋势。
详细见测试过程的详细记录及图形化的直观展现。
·并发1查询性能:
·
并发10查询性能:
·并发20查询性能:
4.其它扩展测试
·Presto单机多Worker:
·
我们通过添加单机的Worker数量验证是否提高查询效率,提高单机的查询利用率。 单机增加Presto Worker,部署多Worker。测试结果:表现为CPU瓶颈,没有效果。如下图,可以发现每个Worker的吞吐也少了一半。
我们通过添加扩容机器并部署Worker,验证查询性能影响。
加入新的机器,部署Worker。测试结果:表现为性能基本线性增长,受限于数据节点的磁盘IO和网络。
·ClickHouse横向扩展查询测试:
·ClickHouse PageCache缓存查询测试:
测试明细:
结果图形展示:
Presto的综合能力对比其他SQLon Hadoop引擎还是比较突出的。我们在测试过程中发现,单节点的扫描速度达5000WRow/S。Presto是完全基于内存的并行计算,对内存有一定的要求。只装载数据到内存一次,其他都是通过内存、网络IO来处理,所以在慢速网络下是不适合的,所以它对网络要求也是很高。Presto只是查询引擎,不负责数据的底层持久化、装载策略。Presto支持丰富的多数据源,可跨多个数据源查询。另外,在我们测试的版本上没有本地数据读取优化策略,开源社区里在新版本上是支持的。
ClickHouse作为战斗民族的开源神器,是目前所有开源MPP计算框架中速度最快的。对比测试的结果表明,ClickHouse在单表的查询中性能十分优异。对多表的关联分析场景,查询其他报告并不十分理想,本次测试并不涉及,不做评论。ClickHouse性能很大程度上依赖于系统缓存。对完全非缓存,进行磁盘扫描的场景,性能也不是十分突出,二者也有数量级的性能差距。这也是我们在使用过程中的优化点。 最后,以上采用MPP架构的OLAP引擎,随着并发的提高,查询性能都出现了线性下降,Presto在这个问题上的尤为明显。CK由于单次查询速度快,所以一定程度上掩盖了这个问题。因此,大家在未来的业务中进行OLAP评估时,也需要将并发作为一个重要的考虑因素。