大数据查询Druid,Impala,Presto,SparkSQL对比

一、OLAP和OLTP的区别

OLAP(On-Line Analytical Processing)联机分析处理,也称为面向交易的处理过程,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用户操作快速响应的方式之一。应用在数据仓库,使用对象是决策者。OLAP系统强调的是数据分析,响应速度要求没那么高

目前市面上主流的开源OLAP引擎包含不限于:Hive、Presto、Kylin、Impala、Sparksql、Druid、等

OLTP(On-Line Transaction Processing)联机事务处理,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。它具有FASMI(Fast Analysis of Shared Multidimensional Information),即共享多维信息的快速分析的特征。主要应用是传统关系型数据库。OLTP系统强调的是内存效率,实时性比较高。Oracle、Redis、Hbase

按照查询类型划分,OLAP一般分为即席查询和固化查询,

  • 即席查询:通过手写sql完成一些临时的数据分析需求,这类sql形式多变、逻辑复杂,对查询时间没有严格要求
  • 固化查询:指的是一些固化下来的取数、看数需求,通过数据产品的形式提供给用户,从而提高数据分析和运营的效率。这类的sql固定模式,对响应时间有较高要求。

按照架构实现划分,主流的OLAP引擎主要有下面三点:

  • MPP架构系统(Presto/Impala/SparkSQL/Drill等)。这种架构主要还是从查询引擎入手,使用分布式查询引擎,而不是使用hive+mapreduce架构,提高查询效率。
  • 搜索引擎架构的系统(es,solr等),在入库时将数据转换为倒排索引,采用Scatter-Gather计算模型,牺牲了灵活性换取很好的性能,在搜索类查询上能做到亚秒级响应。但是对于扫描聚合为主的查询,随着处理数据量的增加,响应时间也会退化到分钟级。
  • 预计算系统(Druid/Kylin等)则在入库时对数据进行预聚合,进一步牺牲灵活性换取性能,以实现对超大数据集的秒级响应。

数据轨迹现有的实现方式,从业务诉求看为:每账期按照指定的查询列取数据,进行分析未结算原因,偏向固化查询的方式。但现有的实现方式为先按照查询列值查询出主表数据,再根据主表附属表的关联字段,获取查询附属表的sql,sql为动态拼接出来,这种方式更偏向于即席查询的实现。

需要从以下三个方面考虑框架选型:数据存储和构建、安装搭建、开发成本。

impala

impala是Cloudera开发开源的,Impala是Cloudera开发并开源的,能查询存储在HDFS和HBase中的数据。同Hive一样,也是一种SQL on Hadoop解决方案。但Impala抛弃了MapReduce,使用更类似于传统的MPP数据库技术来提高查询速度。

  • impala可以直接查询hdfs或hbase上的数据,可以与现有的存储无缝对接。
  • impala需要单独安装,公司内paas主推。需要与现场确认。
  • impala提供jdbc接口和sql执行引擎,可以与现有系统集成

Presto

presto是Facebook开源的大数据查询引擎,为了解决hive查询慢产生。使用java编写,数据全部在内存中处理。

Facebook开源的一个java写的分布式数据查询框架,原生集成了Hive、Hbase和关系型数据库,Presto背后所使用的执行模式与Hive有根本的不同,它没有使用MapReduce,大部分场景下比hive快一个数量级,其中的关键是所有的处理都在内存中完成。

  • 原生集成了Hive、Hbase和关系型数据库。
  • 需要与现场确认是否能提供
  • 提供jdbc接口和sql执行引擎,可以与现有系统集成

druid

druid同kylin一样,是采用预计算的方式。主要解决的是对于大量的基于时序的数据进行聚合查询。数据可以实时摄入,进入到Druid后立即可查,同时数据是几乎是不可变。通常是基于时序的事实事件,事实发生后进入Druid,外部系统就可以对该事实进行查询。

是一个实时处理时序数据的OLAP数据库,因为它的索引首先按照时间分片,查询的时候也是按照时间线去路由索引。

  • 需要预计算,将数据存储在druid的Segment文件中,占用一部分存储资源
  • 需要与现场确认是否能提供
  • 对sql支持不友好,需要用他自己的方言书写

kylin

kylin是一种OLAP数据引擎,支持大数据生态圈的数据分析业务,主要是通过预计算的方式将用户设定的多维度数据立方体(cube)缓存起来,达到快速查询的目的。应用场景应该是针对复杂sql join后的数据缓存。

核心是Cube,cube是一种预计算技术,基本思路是预先对数据作多维索引,查询时只扫描索引而不访问原始数据从而提速。

这种OLAP引擎,一般包括以下几部分:

  • 数据构建存储:cube构建,元数据信息
  • sql解析执行:Query引擎(sql解释器),routing模块(sql执行)
  • 上层接口服务;jdbc/odbc接口,rest服务

应用思路:将hive中的数据按照查询列 构建成cube,存储到hbase中,数据轨迹连接kylin的jdbc接口实现快速查询。

  • 需要预计算,将数据构建成cube存储到hbase
  • 需要与现场确认是否能提供
  • 提供jdbc接口和rest服务

Spark SQL

基于spark平台上的一个olap框架,本质上也是基于DAG的MPP, 基本思路是增加机器来并行计算,从而提高查询速度。

这几种框架各有优缺点,存在就是合理,如何选型个人看法如下:

从成熟度来讲:kylin>spark sql>Druid>presto

从超大数据的查询效率来看:Druid>kylin>presto>spark sql

从支持的数据源种类来讲:presto>spark sql>kylin>Druid

大数据查询目前来讲可以大体分为三类:

1.基于hbase预聚合的,比如Opentsdb,Kylin,Druid等,需要指定预聚合的指标,在数据接入的时候根据指定的指标进行聚合运算,适合相对固定的业务报表类需求,只需要统计少量维度即可满足业务报表需求

2.基于Parquet列式存储的,比如Presto, Drill,Impala等,基本是完全基于内存的并行计算,Parquet系能降低存储空间,提高IO效率,以离线处理为主,很难提高数据写的实时性,超大表的join支持可能不够好。spark sql也算类似,但它在内存不足时可以spill disk来支持超大数据查询和join

3.基于lucene外部索引的,比如ElasticSearch和Solr,能够满足的的查询场景远多于传统的数据库存储,但对于日志、行为类时序数据,所有的搜索请求都也必须搜索所有的分片,另外,对于聚合分析场景的支持也是软肋

与X沟通,建议使用impala或者spark做查询,于是查询对比各种开源的OLAP引擎。

二. Hive、SparkSQL、Impala、Presto性能对比

(1)cloudera公司2014年做的性能基准对比测试,原文链接:http://blog.cloudera.com/blog/2014/09/new-benchmarks-for-sql-on-hadoop-impala-1-4-widens-the-performance-gap/

  • 对于单用户查询,Impala比其它方案最多快13倍,平均快6.7倍。
  • 对于多用户查询,差距进一步拉大:Impala比其它方案最多快27.4倍,平均快18倍。

下面看看这个测试是怎么做的。
        配置:
        所有测试都运行在一个完全相同的21节点集群上,每个节点只配有64G内存。之所以内存不配大,就是为了消除人们对于Impala只有在非常大的内存上才有好性能的错误认识:

  • 双物理CPU,每个12核,Intel Xeon CPU E5-2630L 0 at 2.00GHz
  • 12个磁盘驱动器,每个磁盘932G,1个用作OS,其它用作HDFS
  • 每节点64G内存

对比产品:

  • Impala 1.4.0
  • Hive-on-Tez 0.13
  • Spark SQL 1.1
  • Presto 0.74

查询:

  • 21个节点上的数据量为15T
  • 测试场景取自TPC-DS,一个开放的决策支持基准(包括交互式、报表、分析式查询)
  • 由于除Impala外,其它引擎都没有基于成本的优化器,本测试使用的查询都使用SQL-92标准的连接
  • 采用统一的Snappy压缩编码方式,各个引擎使用各自最优的文件格式,Impala和Spark SQL使用Parquet,Hive-on-Tez使用ORC,Presto使用RCFile。
  • 对每种引擎多次运行和调优

结果:
        单用户如下图所示。

多用户如下图所示。

查询吞吐率如下图所示。

Impala本身就是cloudera公司的主打产品,因此只听其一面之词未免有失偏颇,下面就再看一个SAS公司的测试

(2)SAS2013年做的Impala和Hive的对比测试
        硬件:

  • Dell M1000e server rack
  • 10 Dell M610 blades
  • Juniper EX4500 10 GbE switch

刀片服务器配置

  • Intel Xeon X5667 3.07GHz processor
  • Dell PERC H700 Integrated RAID controller
  • Disk size: 543 GB
  • FreeBSD iSCSI Initiator driver
  • HP P2000 G3 iSCSI dual controller
  • Memory: 94.4 GB

软件:

  • Linux 2.6.32
  • Apache Hadoop 2.0.0
  • Apache Hive 0.10.0
  • Impala 1.0
  • Apache MapReduce 0.20.2

数据:
        数据模型如下图所示。

查询:
        使用了以下5条查询语句

  1. -- What are the most visited top-level directories on the customer support website for a given week and year?
  2. select top_directory, count(*) as unique_visits
  3. from (select distinct visitor_id, split(requested_file, '[\\/]')[1] as top_directory
  4. from page_click_flat
  5. where domain_nm = 'support.sas.com'
  6. and flash_enabled='1'
  7. and weekofyear(detail_tm) = 48
  8. and year(detail_tm) = 2012
  9. ) directory_summary
  10. group by top_directory
  11. order by unique_visits;
  12. -- What are the most visited pages that are referred from a Google search for a given month?
  13. select domain_nm, requested_file, count(*) as unique_visitors, month
  14. from (select distinct domain_nm, requested_file, visitor_id, month(detail_tm) as month
  15. from page_click_flat
  16. where domain_nm = 'support.sas.com'
  17. and referrer_domain_nm = 'www.google.com'
  18. ) visits_pp_ph_summary
  19. group by domain_nm, requested_file, month
  20. order by domain_nm, requested_file, unique_visitors desc, month asc;
  21. -- What are the most common search terms used on the customer support website for a given year?
  22. select query_string_txt, count(*) as count
  23. from page_click_flat
  24. where query_string_txt <> ''
  25. and domain_nm='support.sas.com'
  26. and year(detail_tm) = '2012'
  27. group by query_string_txt
  28. order by count desc;
  29. -- What is the total number of visitors per page using the Safari browser?
  30. select domain_nm, requested_file, count(*) as unique_visitors
  31. from (select distinct domain_nm, requested_file, visitor_id
  32. from page_click_flat
  33. where domain_nm='support.sas.com'
  34. and browser_nm like '%Safari%'
  35. and weekofyear(detail_tm) = 48
  36. and year(detail_tm) = 2012
  37. ) uv_summary
  38. group by domain_nm, requested_file
  39. order by unique_visitors desc;
  40. -- How many visitors spend more than 10 seconds viewing each page for a given week and year?
  41. select domain_nm, requested_file, count(*) as unique_visits
  42. from (select distinct domain_nm, requested_file, visitor_id
  43. from page_click_flat
  44. where domain_nm='support.sas.com'
  45. and weekofyear(detail_tm) = 48
  46. and year(detail_tm) = 2012
  47. and seconds_spent_on_page_cnt > 10;
  48. ) visits_summary
  49. group by domain_nm, requested_file
  50. order by unique_visits desc;

 结果:
        Hive与Impala查询时间对比如下图所示。 

可以看到,查询1、2、4Impala比Hive快的多,而查询3、5Impala却比Hive慢很多。这个测试可能更客观一些,而且也从侧面说明了一个问题,不要轻信厂商宣传的数据,还是要根据自己的实际测试情况得出结论。

六、Spark SQL vs Impala, 同样作为大数据SQL查询引擎框架有什么不同之处?

1、Impala

Impala和 presto, pinot, spark sql等相比,确实是查询性能最快的(注意,我单单说的是查询性能)。Impala最大的问题在于catalogd是个单点,元数据多了后会遇到各种问题。

Catalogd进程是Impala中用来传递Impala SQL导致的元数据变化的组件,它把这些变化传递给集群中所有的节点。一个集群中只需要一个节点上有这个守护进程,因为请求是通过Statestore传递的,因此Statestored和Catalogd 服务应当运行在同一节点上。

        引入Catalogd进程的目的就是减少执行REFRESH和INVALIDATE METADATA语句,当在Impala中执行 CREATE TABLE 、 INSERT 或其他表修改、数据修改操作时不再需要执行 REFRESH 或INVALIDATE METADATA 语句,但是在Hive中执行这些操作,或者直接在HDFS操作数据,这两个语句仍然需要,但是只需要在其中一个节点上运行,不再需要在所有节点上都运行。

本质上,Impala是一个MPP engine,各节点不共享资源,每个executor可以独自完成数据的读取和计算,缺点在于怕stragglers,遇到后整个engine的性能下降到该straggler的能力,所谓木桶的短板,这也是为什么MPP架构不适合异构的机器,要求各节点配置一样。

2、Spark SQL

Spark SQL应该还是算做Batching Processing, 中间计算结果需要落地到磁盘,所以查询效率没有MPP架构的引擎(如Impala)高。

 

 

(0)

相关推荐

  • impala 概述

    什么是Impala? Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎. 它是一个用C ++和Java编写的开源软件. 与其他Hadoop的SQL引擎相 ...

  • 一文详解MPP大规模并行处理架构

    导读 随着分布式.并行化技术成熟应用,MPP引擎逐渐表现出强大的高吞吐.低时延计算能力,有很多采用MPP架构的引擎都能达到"亿级秒开". MPP是系统架构角度的一种服务器分类方法, ...

  • Presto在滴滴的探索与实践

    文章作者:armsword 滴滴研发工程师 内容来源:滴滴技术 序曲:Presto在滴滴内部发展三年,已经成为滴滴内部Ad-Hoc和Hive SQL加速的首选引擎.目前服务6K+用户,每天读取2PB ...

  • Sophon :Hulu智能OLAP缓存层技术实践

    内容来源:DataFunTalk 导读:本次演讲内容主要分为四部分:第一部分介绍Hulu的大数据架构:第二部分介绍Sophon,Sophon是一个轻量的OLAP中间缓存管理层,它的下层主要依赖于OLA ...

  • 数据中台到底包括什么内容?一文详解架构设计与组成

    导读:<终于有人把数据中台讲明白了>一文讲到数据中台的定义和价值,本文将介绍数据中台到底包括什么内容.企业建设数据中台的过程中哪些能力是必选项,哪些是可选的,将在本文一一揭晓. 作者:陈新 ...

  • 全国通用!2021春节返程微信行程码大数据查询

    注:本文转载自网络,不代表本平台立场,仅供读者参考,著作权属归原创者所有. 国务院客户端小程序日前上线.该行程卡由工信部组织中国信通院.三家基础电信企业面向公众推出,支持一键查询14天内国内城市(驻留 ...

  • 双台财政所利用大数据对比开展农民负担监督工作

         5月13号双台财政所利用精准扶贫大数据对比,周密部署,五项措施扎实抓好农民监督工作.   一是领导专班到位.成立监督检查工作领导小组及核查组,或两人一组或三人一组深入村户,摸底把脉,各司其职 ...

  • 大数据量查询容易OOM?试试MySQL流式查询

    一.前言 程序访问 MySQL 数据库时,当查询出来的数据量特别大时,数据库驱动把加载到的数据全部加载到内存里,就有可能会导致内存溢出(OOM). 其实在 MySQL 数据库中提供了流式查询,允许把符 ...

  • 对比欧洲9家车企2020年财报8大数据:业绩分化、集体减碳

    截至3月19日,欧洲汽车企业陆续发布财务业绩与未来5-10年期规划.面对2020年,欧洲车企表现不一. 从整体来看,过半欧洲汽车制造商2020年下半年也逐渐抹平上半年巨额亏损的情况,并未像早期预期那般 ...

  • 大数据服务商百强榜出炉企查查位列商业查询行业领军地位

    大众网・海报新闻记者张海振通讯员代智勇报道 日前,互联网周刊发布"2020年度大数据提供商TOP100"榜单,国内企业信用信息查询行业领头羊企查查成功入围,高居第20位,并在同行业 ...

  • 税务稽查是如何盯上你的?看完这30个大数据对比就明白了!

    金税三期系统上线后,眼看着金税四期也即将到来.届时各大数据网将越布越广,税务机关将充分利用大数据平台开展全面.严密地风险控制. 如果企业老板还用传统固化的思维来做事,那企业极有可能面临税务稽查.作为会 ...

  • 大数据24小时 | Teradata天睿公司颁布Presto认证,前凤凰网高管徐进跳槽转战互联网媒体

    <数据猿导读> 数字医疗公司 Progyny宣布完成1470万美元融资:英国企业Digi.me完成610万美元融资,实现数据价值完全交换:Teradata天睿为BI及可视化工具颁布认证,增 ...

  • 执行律师-查询老赖财产系列十六:大数据搜索

    北京市智舟律师事务所王庆主任律师 导语 现在已经是大数据时代,任何事都可以用大数据来分析和研究,也可以用大数据来指导工作,所以,查询老赖的工作,完全离不开大数据,大数据采集信息的能力是无穷的,分析数据 ...

  • 大数据下的新能源乘用车安全故障统计对比

    11月27-28号"新能源汽车国家大数据联盟2019年会"在北京召开,对新能源汽车宏观分析观感兴趣的朋友,应该能得到不少信息.这个会和中汽研每年也有个蓝皮书报告发布,对国内新能源车 ...