开源OLAP引擎综评:HAWQ、Presto、ClickHouse
编者按
谈到大数据就会联想到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
Presto是一个分布式的查询引擎,本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询。Presto是一个OLAP的工具,擅长对海量数据进行复杂的分析。但是,对于OLTP场景,并不是Presto所擅长,所以不要把Presto当做数据库来使用。
Presto需要从其他数据源获取数据来进行运算分析,它可以连接多种数据源,包括Hive、RDBMS(Mysql、Oracle、Tidb等)、Kafka、MongoDB、Redis等。
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,大致如下:
四、测试过程
1.HAWQ存储格式与性能评测
经过对比测试后,考虑数据的压缩比、数据的插入速度,以及查询时间这三个维度综合评估,我们的场景推荐HAWQ采用列式存储+Gzip5的压缩方式;如果大家对压缩没有非常高的要求,可以按照测试的详细数据采用其它的组合方式。
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的吞吐也少了一半。
- Presto扩容:
我们通过添加扩容机器并部署Worker,验证查询性能影响。
加入新的机器,部署Worker。测试结果:表现为性能基本线性增长,受限于数据节点的磁盘IO和网络。
- ClickHouse 横向扩展查询测试:
测试横向扩展对查询性能的影响,每个节点的数据量是相同的,使用相同的SQL分别测试单节点、五节点、十节点的查询性能。
根据测试结果可以看出,横向扩展后,节点数和数据量等比增加,查询时间几乎保持不变。所以对于ClickHouse我们可以基于单节点的数据量和性能,推断一定场景下整个集群的情况。
测试明细:
结果图形展示:
- ClickHouse PageCache缓存查询测试:
测试PageCache对查询性能的影响,首先清除所有缓存分别查询四个SQL,然后再重复执行一次,可以发现,PageCache对第二次查询的性能提高是影响巨大的。
ClickHouse充分利用了系统缓存(PageCache),对查询有数量级的性能提升作用。
测试明细:
结果图形展示:
五、各组件综合分析
通过上述测试结果和分析图表,结合我们查询各组件的开源介绍进行综合分析,如下:
HAWQ采用基于成本的SQL查询优化器,生成执行计划;同时在标准化SQL兼容性这方面表现突出(基于TPC-DS进行SQL兼容性测试)。数据存储直接使用HDFS,与其它SQL on Hadoop引擎不一样,HAWQ采用自己的数据模型及存储方式。在本次对单表的查询测试中,性能并不理想,并且我们发现对于表查询类似limit 1语句。HAWQ也会全表扫描,这个过程让我们感觉有点诧异。
Presto的综合能力对比其他SQLon Hadoop引擎还是比较突出的。我们在测试过程中发现,单节点的扫描速度达5000WRow/S。Presto是完全基于内存的并行计算,对内存有一定的要求。只装载数据到内存一次,其他都是通过内存、网络IO来处理,所以在慢速网络下是不适合的,所以它对网络要求也是很高。Presto只是查询引擎,不负责数据的底层持久化、装载策略。Presto支持丰富的多数据源,可跨多个数据源查询。另外,在我们测试的版本上没有本地数据读取优化策略,开源社区里在新版本上是支持的。
ClickHouse作为战斗民族的开源神器,是目前所有开源MPP计算框架中速度最快的。对比测试的结果表明,ClickHouse在单表的查询中性能十分优异。对多表的关联分析场景,查询其他报告并不十分理想,本次测试并不涉及,不做评论。ClickHouse性能很大程度上依赖于系统缓存。对完全非缓存,进行磁盘扫描的场景,性能也不是十分突出,二者也有数量级的性能差距。这也是我们在使用过程中的优化点。
最后,以上采用MPP架构的OLAP引擎,随着并发的提高,查询性能都出现了线性下降,Presto在这个问题上的尤为明显。CK由于单次查询速度快,所以一定程度上掩盖了这个问题。因此,大家在未来的业务中进行OLAP评估时,也需要将并发作为一个重要的考虑因素。
本文转载自公众号百分点(ID:baifendian_com)。
原文链接: