热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

品友大数据团队分享:百度Palo对决ClickHouse,谁快?

为了应对海量大数据处理的商业场景,品友大数据团队对多款数据库均有深入的分析和研究。今天,我们将从性能、实现、功能几方面对ClickHouse和Palo进行比较,为大家提炼最新最前沿

《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》
《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》

为了应对海量大数据处理的商业场景,品友大数据团队对多款数据库均有深入的分析和研究。今天,我们将从性能、实现、功能几方面对ClickHousePalo进行比较,为大家提炼最新最前沿的大数据技术干货。

去年6月,俄罗斯的“百度”,Yandex公司开源了一款高性能的分布式数据库ClickHouse,采用列式存储、多核并行化处理和向量化,它相比MySQL快数百倍,比Hive快200倍以上,比Vertica快5倍,支持实时数据写入,能够支持万亿级别的数据量。ClickHouse覆盖了俄语搜索超过68%的市场,可以说有俄语的地方就有Yandex。

今年8月,中国的“Yandex”,百度公司终于开源了分布式数据分析数据库Palo,该产品已经服务百度内部数十个项目。它基于列式存储、向量化执行、MVCC的实现,并且结合了谷歌mesa以及Impala的优势,号称比大部分数据库有5 到 10 倍的性能提升。

既生瑜,何生亮?ClickHouse与Palo到底谁的性能更好呢?

1. Palo Vs ClickHouse

1.1) 测试场景:

硬件配置

《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》
《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》

1.2)Count 查询

20亿原始数据灌入Plao和ClickHouse,聚合后剩下2亿,ClickHouse和Palo各3个节点,测试发现ClickHouse的count查询性能会远优于Palo,同样的查询ClickHouse只需要0.2秒,Palo查询时间接近90秒。

《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》
《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》

从以上测试结果可以看出在count查询上Palo的表现落后于ClickHouse,这点可能是Plao的count查询是全表扫描造成的瓶颈。不过在sum查询和并发查询下Palo的优势还是比较突出的。期待后面对count查询的性能优化也会有所突破。毕竟count查询是一个非常常用的语法。

1.3) 聚合查询

聚合查询场景下Plao与ClickHouse的表现如下,单查询情况下,Palo的性能还是不错,比ClickHouse要快。

《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》
《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》

1.4)并发查询

经过多次测试发现并发查询的场景下Palo的性能优势就非常明显。而且在并发场景下Palo可以扩充FE、BE来支持更多的业务查询。

《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》
《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》

备注:在测试前已经对Palo的相关查询创建Rollup Index,如果创建Rollup后查询依然很慢,可以排查下查询是否开启预聚合,另外针对不同的使用场景使用合理的建表、分区规则会更利于Palo发挥性能优势。

1.5导入数据和文件存储大小比较

《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》
《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》

写入速度方面ClickHouse表现更出色,比Palo接近快7倍。并且ClickHouse可以支持实时倒入。存储空间上面同样2亿数据ClickHouse占用9.5G,Plao占用8.7G,水平非常接近.

1.6 比较总结

以下表格总结了两者的性能,总体来说,Palo的查询性能比较优秀,虽然在一些实时性和写入能力方面,还不够完善。

《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》
《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》

2. Palo技术介绍

Palo是一个新生物,简单介绍一下Plao的技术实现以及使用经验,方便大家对Palo有个快速的了解。 Palo采用MPP架构来支持高并发交互式查询,与其他Sql-On-Hadoop系统不同的是Plao易用性更强、架构设计简单,自身不依赖于其他系统,不像Kylin、Presto、Impala依赖于Hbase、Mysql和Hive,使用时需要额外维护一两套系统。

Palo由frontend和backend组成(以下简称febe)。其中fe负责元数据管理、接收client的查询请求,be负责底层数据存储和查询计划的执行。为了支持高并发、高可用、低延迟。fe和be都可以进行动态扩展部署多个实例。

《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》
《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》

高并发与一致性之间的选择:通过扩充fe和be节点可以提高查询的并发度和查询效率,Palo默认支持最终一致性(leader保证强一致性,follower、observer保证单调一致性)。如果要求客户端通过任意fe节点查询的数据都是一致的,可以通过保证fe节点之间的强一致性:所有fe节点更新成功才算成功,但是这样可能会降低fe的可用性。这点满足CAP定理(任何分布式系统在可用性、一致性、分区容错性方面,不能兼得,最多只能得其二) 需要用户根据具体使用场景平衡一下。

高并发查询与高吞吐量的保障

  • 基于MVCC多版本并发控制技术
  • 列式存储&向量化执行

【小经验】几种数据导入方式

  1. http方式导入。通过 http方式push到Palo。用户通过 http 协议将导入描述,数据一同发送给 Palo,在接收任务成功后,会立即返回给用户成功信息,然后异步导入数据到backend中。
  2. hdfs导入。通过hdfs broker从hdfs上pull数据,用户可以通过streaming程序将数据生成到hdfs上,通过jdbc方式发送加载数据的指令到Palo,异步完成加载。
  3. BOS导入。用户需要使用BOS相关工具,将自己的数据上传到BOS系统再导入Palo。

导入任务查看

《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》
《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》

通过 http://fehost:8030界面可以查看导入进度,由于暂不支持直接通过kafka导入实时数据,测试时我们通过hdfs方式导入,从kafka中接入数据用sparkstreaming将数据聚合后写入到hdfs,再用jdbc执行load命令进行数据加载。

【小经验】 记录一下导入数据时遇到的一些问题:

  • 通过页面查看发现导入任务状态为CANCELLED,并且错误信息是quality not good enough to cancel, 经排查原因是数据长度超过了建表时指定字段的长度,通过ALTER TABLE 命令修改扩大字段长度之后重新导入即可。
  • 导入任务状态一直为ETL状态,并且ETL、LOAD进度都卡在0%,原因是sparkstreaming生成到hdfs的数据超过了1G导致,后来通过缩短sparkstreaming的batch interval减小生成的文件大小导入成功。

选择合适的表类型

《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》
《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》

可以根据实际需要选择合适的表类型,自定义存储引擎、副本数和存储介质。

多表数据导入原子性

为了解决导入的原子性的需求,比如RTB报表中经常需要通过查看地域、domain、APP等维度的竞价、曝光、点击、转化等效果指标来优化广告投放效果

域名维度

《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》
《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》

app维度

《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》
《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》

地域维度

《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》
《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》

如果采用宽表的方式一张表同时存地域、domain、app等维度和指标,由于地域、domain、app维度的基数大,加上时间、广告主、投放计划等更多维度后,采用Palo的olap表二次聚合之后数据量依然会非常大,会严重影响交互式查询的效率,常规的做法可以将地域、domain、app等基数较大的维度单独拆分成多张表,将同一份数据拆分成多张表,这样会额外增加多张表数据一致性的维护成本。Palo为了解决导入原子性和一致性的问题,废弃了实时导入,通过小批量导入的方式可以将同一份数据源同时导入到多张表,导入时要么同时成功,要么同时失败。避免数据不一致的问题。

【小经验】加速查询Rollup Index

针对查询比较频繁的维度和指标建立rollup index可以加速查询,测试发现导入2亿原始数据,有些查询时间原本在分钟级别通过创建rollup index后可以数秒内返回。

《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》
《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》

但是也不推荐创建太多的rollup index,导入数据时会增量累加rollup index中的数据,创建过多会影响导入数据的性能

【小经验】数据修复

另外值得一提的是Palo对于错误数据的恢复方式也比较简单,支持delete语句,可以通过sql删除指定分区的数据重新导入即可;如果通过hdfs方式导入了一批错误的数据可以通过负导入的方式恢复到导入之前的状态

查询测试

Palo支持mysql jdbc接口,数据导入成功后通过Navicat等数据库客户端工具或者在程序中使用mysql jdbc driver查询表数据。

查询时遇到的问题:查询时碰到了Memory limit exceeded. Tablet: 57198.的错误,原因是Plao防止用户单个查询消耗资源过大,将执行计划分片使用的内存限制在2G以内,用户可以根据需要适当增大exec_mem_limit的值。

3. Palo总结

《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》
《品友大数据团队分享:百度Palo对决ClickHouse,谁快?》

最后总结一下,除了在实时性、数据导入速度方面ClickHouse的表现会比Palo更优秀。从查询性能、易用性和使用时的灵活性角度出发,Palo的表现非常优秀,当然由于Palo刚开源还是会存在一些问题,比如监控工具还不太完善,没有方便的后台管理界面,不支持kafka实时数据倒入。相信如果Palo能够在这些方面有所突破未来一定会吸引更多的用户。

在此,我也特别感谢百度Palo研发团队给力的大力支持,他们曾经第一时间周末加班解决我们发现的技术问题,并且来到品友进行大数据技术交流。

来源:品友技术


推荐阅读
  • 本文介绍了Paxos的世界中关于复制日志与状态机的概念和重要性。通过存储日志来实现数据的持久化,并通过日志流来记录数据的变化,而不是直接持久化数据本身。这样做的好处是简化了持久化存储的操作,并且方便多机之间的数据同步。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • 【PPT 下载】这杯网红茶饮,到底赢在哪里?
    【PPT 下载】这杯网红茶饮,到底赢在哪里? ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 如何构建更好的数据立方体系统(Cube)
    看到了kylin关于cube的设计,难以抑制的觉得这部分设计得太巧妙了,确实比我们的产品要好上很多,不得不学习一下! ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有