复杂场景下大数据计算引擎选型与实践(OLAP/spark/alluxio)

复杂场景下大数据计算引擎选型与实践(OLAP/spark/alluxio)

备注:本文是2018-06在链家的时候做的对外分享,现在纯搬运到知乎

引言:

海量数据背景下,业界普遍引入hadoop/hive等来解决大数据计算分析的需求,但随着大家对计算速度和灵活性的要求提高,业内涌现出各类引擎impala,sparksql,kylin等,贝壳根据自身业务需求,主要针对灵活查询,快速查询,实时查询分别选型spark sql,kylin,druid, 本次主要分享贝壳对这些引擎的实践,优化,及二次开发经验

关于我:

•13年 浙大软件工程毕业

•13-14年 百度商业平台部-风控平台研发

•15年至今 贝壳(原链家网)大数据集群及基础引擎建设


•专注于hadoop,hbase,kylin等生态组件,热爱开源,为社区贡献多个patch

•丰富的性能调优经验


目录:

•早期架构1.0

•OLAP简介

•快速可视化查询-指标平台(kylin)

•Adhoc灵活查询-Queryengine(spark sql+alluxio)

•Q&A


早期架构:

•架构简单、just works

•需求驱动、case by base解决问题。

•固化Mysql难以存储大数据量

•查询原始hive速度慢、使用成本高

•实时数据分析无解


OLAP引擎分类:

•ROLAP(Relational OLAP)

- 基于关系模型,实时进行聚合计算

- 实现:传统数据库引擎/spark sql/presto

•MOLAP(Multi-dimension OLAP)

- 基于预定义模型,预先进行聚合计算,存储汇总结果

- 实现:Kylin/Druid

•HOLAP(Hybrid OLAP)

- 混合多引擎,不同场景路由到不同引擎


ROLAP:

•优势

- 支持任意的sql查询

- 无数据冗余,一致性好

•缺点

- 大数据量及复杂查询返回慢

- 并发较差

•场景

- 灵活性很高的分析


MOLAP:

•优势

- 支持超大原始数据集

- 快速返回,并发高

•缺点

- 不支持明细

- 需要预先定义维度和指标

•场景

- 能预知查询模式,并发有要求的场景


可视化(快速查询)选型:

KYLIN简介:

Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc. 开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。

MOLAP解决方案

预先定义维度和指标

预计算cube,存储到hbase中

查询时解析sql路由到hbase中获取结果


KYLIN架构:

Cube和Cuboid:

Kylin存储模型:

贝壳olap平台架构:

自研kylin中间件:

贝壳kylin的使用统计:

•定位:离线OLAP引擎

•800+ cube,覆盖公司16个业务线

•Cube存储总量200T+, 数据行数1600+亿行,单cube最大60+亿行

•日查询量100万+,时延<500ms(95%), <1s(99%)


ADHOC篇:

Alluxio使用经验:

•原生多层级置换有性能问题(代码里是单线程执行),建议单层

•不要超过缓存大小,避免大量miss

•性能优先:单层MEM或单层SSD,HDFS减负:单层HDD

•可在metastore层,进行路由(不走alluxio, 走ssd,走hdd)

•元数据缓存一致性问题

-checkConsistency

-alluxio.user.file.metadata.sync.interval

编辑于 2019-02-18