presto、druid、sparkSQL、kylin的对比分析,如性能、架构等,有什么异同? 举报 理由 举报 取消 在实际应用中如何选型? 2017年7月20日 8 条回复 2303 次浏览 大数,据分析,数据
回复 ( 8 )
谢谢邀请。你之列了这一领域的一部分,据我不完全收集,包括:
其中你列的presto、druid、sparkSQL、kylin可以分为三类。其中presto和spark sql都是解决分布式查询问题,提供SQL查询能力,但数据加载不一定能保证实时。Druid是保证数据实时写入,但查询上不支持SQL,或者说目前只支持部分SQL,我个人觉得适合用于工业大数据,比如一堆传感器实时写数据的场景。Kylin是MOLAP,就是将数据先进行预聚合,然后把多维查询变成了key-value查询。
这里要看你实际要应用于什么场景了。
简单说几句。
1. kylin 预计算。用户指定dimensions和要计算的metric,kylin通过MR将结果保存在HBase中,后续读取直接读HBase。适合那种业务清楚的知道自己要分析什么的场景。查询模式比较固定,只不过所查看的时间不同的场景。注意的点是要避免维度灾难。
2. presto java8写的,代码质量非常高。设计:纯内存,没有容错,一个task失败就整个query fail。需要注意调整内存相关,线程数等参数,容易OOM。benchmark还行。支持标准SQL
3. spark sql 个人觉得支持查询Hive的数据,支持HQL非常重要,因为很多公司以前的数据都是放在Hive上的。我们测试了spark sql 2.0.1,对于鄙司这种分区数很多,每个分区很多parquet文件的情形来说,几乎不可用,原因在于 [SPARK-16980] Load only catalog table partition metadata required to answer a query 转而测试spark sql 2.1.0, 结果还是比较满意的。不过容错性还有待检验,benchmark过程中如果个别task失败,job 有时候会hang住,待分析。
其他没用过不评价。
总体来说,至少从我们的benchmark结果来看,spark sql 很有前景。
这几个框架都是OLAP大数据分析比较常见的框架,各自特点如下:
presto:facebook开源的一个java写的分布式数据查询框架,原生集成了Hive、Hbase和关系型数据库,Presto背后所使用的执行模式与Hive有根本的不同,它没有使用MapReduce,大部分场景下比hive快一个数量级,其中的关键是所有的处理都在内存中完成。
Druid:是一个实时处理时序数据的Olap数据库,因为它的索引首先按照时间分片,查询的时候也是按照时间线去路由索引。
spark SQL:基于spark平台上的一个olap框架,本质上也是基于DAG的MPP, 基本思路是增加机器来并行计算,从而提高查询速度。
kylin:核心是Cube,cube是一种预计算技术,基本思路是预先对数据作多维索引,查询时只扫描索引而不访问原始数据从而提速。
这几种框架各有优缺点,存在就是合理,如何选型个人看法如下:
从成熟度来讲:kylin>spark sql>Druid>presto
从超大数据的查询效率来看:Druid>kylin>presto>spark sql
从支持的数据源种类来讲:presto>spark sql>kylin>Druid
做过一些调研:
kylin 的团队成员以国人为主,速度很有优势,数据模型cube主要在算法上做文章,将大量数据以固定的模式收敛再计算。
Presto 玩的更绝,全程在内存中倒腾,需要对各个步骤下对象数据规模做到完全精细的把控。
Druid 没接触过不做评论。
很明显上面两种对应用算法会有一定的限制,建立在对已知算法的深刻理解上。
Spark sql 相对更‘原生‘一些,单纯的通用框架,和上面两位并不是同一层面上的东西。
hadoop也算吧
说我用过的:
我觉得hive,spark sql和presto可以算一类,druid算另一类。
前面三个系统基本就是一个execution engine让你用类似sql的语言或者jdbc去查询存在hdfs上面的数据。你可以选择数据在hdfs上面的储存格式(最简单的csv,json,或者更高级的parquet之类的columnar format)。区别:
hive基本没有in memory caching,predicate push down的优化也一般。presto和spark sql新一些,caching和query optimistization比hive好,benchmark快很多。
spark sql是spark这个平台的一部分,所以除了query以外,可以直接在spark这个平台上轻松写负责的data pipeline,减轻integration的麻烦。
presto本身只是sql execution engine,做data pipeline的时候还是要用spark之类的。不过如果很多人同时查询的话,presto更快一些。
BI工具(tableau之类的)可以直接链接spark sql和presto。
Druid号称能在几秒的时间里处理billion 行。这个实践基本是能做到的。不过druid的问题是要它不能理解sql or jdbc,而是要用它自己一套语言写query。所以用起来非常麻烦,周边BI的支持非常差,我知道只有airbnb的superset支持druid。当然druid最新版0.10加了experimental的sql。是不是成熟还有待观察。
我觉得想省事就用spark,整套analytics
pipeline都有了。
架构方面的东西上面几位都说得很清楚了。选型其实还是看数据量和业务场景。不过以我的经历来看应对大多数号称要搞大数据的公司的数据量和业务场景,MySQL足矣…
就冲“实际应用中如何选型?”,就应该选sparksql,spark接近主流了,sql是数据分析必备技能。选sparksql稳定性可用性都强,而且可以更低成本的招到人。
玩花样容易掉坑。这种大方向的选择,错一步毁一个团队,耽误一个公司。