赵群 邹立民作者

百分点大数据评测报告:开源OLAP引擎综评(HAWQ、Presto、ClickHouse)

当前企业对大数据的研究与应用日趋理性,那么,如何根据业务特点,选择一个适合自身场景的查询引擎呢?百分点在某国家级项目中承担了日增超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评估时,也需要将并发作为一个重要的考虑因素。
百分点
百分点

百分点是中国领先的企业级大数据+AI产品与技术提供商,拥有完整的大数据及认知智能产品线。秉承“用数据推动社会进步”的理念,为业内分享大数据和AI技术在行业实践中的经验与思考。

产业大数据
相关数据
数据压缩技术

数据压缩是指在不丢失有用信息的前提下,缩减数据量以减少存储空间,提高其传输、存储和处理效率,或按照一定的算法对数据进行重新组织,减少数据的冗余和存储的空间的一种技术方法。数据压缩包括有损压缩和无损压缩。在计算机科学和信息论中,数据压缩或者源编码是按照特定的编码机制用比未经编码少的数据位元(或者其它信息相关的单位)表示信息的过程。

数据库技术

数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 所谓“数据库”系以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。

查询技术

一般来说,查询是询问的一种形式。它在不同的学科里涵义有所不同。在信息检索领域,查询指的是数据库和信息系统对信息检索的精确要求

优化器技术

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

5G技术

第五代移动通信系统(5th generation mobile networks),简称5G,是4G系统后的延伸。美国时间2018年6月13日,圣地牙哥3GPP会议订下第一个国际5G标准。由于物理波段的限制,5G 的网络也将会与其他通信技术并用,包含长距离的其他传统电信波段。

推荐文章
暂无评论
暂无评论~