druid,impala,presto对比

背景

数据轨迹在湖北落地,面临查询分析时间过长的问题,并且查询时间与大数据能够分配的资源有直接的线性关系。需要考虑如何将数据轨迹查询提速。

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

按照查询类型划分,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编写,数据全部在内存中处理。

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

druid

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

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

kylin

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

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

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

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

redis

将要分析的数据同步到redis,在redis中快速查询数据。可以在分析前将本月数据同步到redis。

遗留问题:

  1. 如何同步数据,如何删除上个账期数据
  2. 用什么做key,数据没有主键,是否可以使用查询列做key,如何从hive中将数据同步出来?

hive操作hbase

较多hive操作hbase的方法,没有hbase操作hive数据的。

引用概念

  • Serde:序列化反序列化,serialize/deSerialize
  • MPP:大规模并行处理技术(Massively Parallel Processor)

参考文档

  • Apache Kylin在美团点评的应用(https://zhuanlan.zhihu.com/p/27461561)
  • presto、druid、sparkSQL、kylin的对比分析(https://www.zhihu.com/question/41541395)
  • 盘点SQL on Hadoop中用到的主要技术(http://sunyi514.github.io/2014/11/15/盘点sql-on-hadoop中用到的主要技术/)
  • Druid(准)实时分析统计数据库——列存储+高效压缩(https://www.cnblogs.com/bonelee/p/6248172.html)

你可能感兴趣的:(spark)