前言

在现在的大数据时代,Hadoop已经成为大数据事实上的标准规范,一大批工具陆陆续续围绕Hadoop平台来构建,用来解决不同场景下的需求。

让我们来想想有哪些业务需求呢?

  • 比如Hive是基于Hadoop的一个用来做企业数据仓库的工具,可以将存储在HDFS分布式文件系统上的数据文件映射为一张数据库表,并提供SQL查询功能,Hive执行引擎可以将SQL转换为MapReduce任务来进行运行,非常适合数据仓库的数据分析。

  • 再比如HBase是基于Hadoop,实现高可用性,高性能,面向列,可伸缩的分布式存储系统,Hadoop架构中的HDFS为HBase提供了高可靠性的底层存储支持。

但是缺少一个基于Hadoop的分布式分析引擎,虽然目前存在业务分析工具,如Tableau等,但是他们往往存在很大的局限,比如难以水平扩展、无法处理超大规模数据,同时也缺少Hadoop的支持。

ApacheKylin的出现,能够基于Hadoop很好地解决上面的问题。Apache Kylin是一个开源的分布式存储引擎。它提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持大规模数据,能够处理TB乃至PB级别的分析任务,能够在亚秒级查询巨大的Hive表,并支持高并发。

大数据多维分析的挑战

在Apache Kylin集群上跑了多个Cube测试,结果表明它能够有效解决大数据计算分析的三大痛点问题:

接下面我们就来详细说说Apache Kylin的基本原理和架构

ApacheKylin从数据仓库中最常用的Hive中读取源数据,使用 MapReduce作为Cube构建的引擎,并把预计算结果保存在HBase中,对外暴露Rest API/JDBC/ODBC的查询接口。

  • 核心:预计算

Apache Kylin的核心思想是预计算,即对多维分析可能用到的度量进行预计算,将计算好的结果保存成 Cube,供查询时直接访问。把高复杂度的聚合运算、多表连接等操作转换成对预计算结果的查询,这决定了Kylin能够拥有很好的快速查询和高并发能力。

上图所示就是一个Cube的例子,假设我们有4个dimension,这个Cube中每个节点(称作Cuboid)都是这4个dimension的不同组合,每个组合定义了一组分析的dimension(如group by),measure的聚合结果就保存在这每个Cuboid上。查询时根据SQL找到对应的Cuboid,读取measure的值,即可返回。

  • Cube计算

Cube的构建,Kylin提供了一个称作Layer Cubing的算法。简单来说,就是按照dimension数量从大到小的顺序,从Base Cuboid开始,依次基于上一层Cuboid的结果进行再聚合。一个N维的完全Cube,是由:1个N维子立方体(Cuboid), N个(N-1)维Cuboid, N*(N-1)/2个(N-2)维Cuboid …, N个1维Cuboid, 1个0维Cuboid,总共2^N个子立方体组成的,每一层的计算都是一个单独的Map Reduce任务。如下图所示:

此算法Mapper以上一层Cuboid的结果(Key-Value对)作为输入。由于Key是由各维度值拼接在一起,从其中找出要聚合的维度,去掉它的值成新的Key,然后把新Key和Value输出,进而HadoopMapReduce对所有新Key进行排序、洗牌(shuffle)、再送到Reducer处;Reducer的输入会是一组有相同Key的Value集合,对这些Value做聚合计算,再结合Key输出就完成了一轮计算。

由于Mapper不做预聚合,此算法会对Hadoop MapReduce输出较多数据; 虽然已经使用了Combiner来减少从Mapper端到Reducer端的数据传输,所有数据依然需要通过Hadoop MapReduce来排序和组合才能被聚合,无形之中增加了集群的压力。

  • 快速Cube算法(Fast Cubing)

该算法的主要思想是,对Mapper所分配的数据块,将它计算成一个完整的小Cube 段(包含所有Cuboid);每个Mapper将计算完的Cube段输出给Reducer做合并,生成大Cube,也就是最终结果,如下图:

Mapper的预聚合:Mapper会利用内存做预聚合,算出所有组合;Mapper输出的每个Key都是不同的,这样会减少输出到Hadoop MapReduce的数据量,Combiner也不再需要;一轮MapReduce便会完成所有层次的计算,减少Hadoop任务的调配。

在Cuboid的推算过程中的每一步,Fast Cubing算法都会比逐层算法产生更少数据;总的加起来,新算法中的Mapper对Hadoop的输出,会比老算法少一个或几个数量级;越少的数据,意味着越少的I/O和CPU,从而使得性能得以提升。

  • Cube存储

MapReduce的计算结果最终保存到HBase中,HBase中每行记录的Rowkey由dimension组成,measure会保存在 column family中。为了减小存储代价,这里会对dimension和measure进行编码。查询阶段,利用HBase列存储的特性就可以保证Kylin有良好的快速响应和高并发。

有了这些预计算的结果,当收到用户的SQL请求,Kylin会对SQL做查询计划,并把本该进行的Join、Sum、CountDistinct等操作改写成Cube的查询操作。

  • Cube查询

查询时,SQL语句被SQL解析器翻译成一个解释计划,从这个计划可以准确知道用户要查哪些表,它们是怎样join起来,有哪些过滤条件等等。Kylin会用这个计划去匹配寻找合适的Cube。

如果有Cube命中,这个计划会发送到存储引擎,翻译成对存储(默认HBase)相应的Scan操作。Groupby和过滤条件的列,用来找到 Cuboid,过滤条件会被转换成Scan的开始和结束值,以缩小Scan的范围; Scan的result,Rowkey会被反向解码成各个dimension的值,Value会被解码成Metrics值 。

Apache Kylin项目实践

目前基于kylin的数据分析平台已经在业务中开始测试以及使用,并且在用户管理和权限操作方面做了的二次开发改造,以实现project和cube的安全管理。

下图是cube的查询响应图表,cube 大小为157GB,包括一个事实表,14个维度和4个度量:

在项目实践过程中也遇到问题:

  • Hadoop任务内存资源不够,cube计算失败。

调整MapReduce分配资源参数:在cube计算过程中,会出现mr任务失败,根据日志排查,主要因mr的内存分配不足导致,于是,我们根据任务实际情况整体调整了yarn.nodemanager.resource.memory-mb、mapreduce.map.memory.mb、

mapreduce.map.java.opts、mapreduce.reduce.memory.mb、apreduce.reduce.java.opts

等参数。

  • JVMGC相关参数调优:可以通过GC调优获得更好的GC性能,减少单次GC的时间和FULL GC频率。

使用Apache Kylin的实践总结

1、大的事实表采用天分区增量构建,为了不影响查询性能,可以定期做合并(Merge),周期可以根据实际情况确定。

2、对于维表比较大的情况,或者查询Select部分存在复杂的逻辑判断,存在Apache Kylin不支持的函数或语句时,可以将事实表和维表的关联处理创建为Hive视图,之后根据视图创建Cube模型。

3、每次查询必然带有的条件建议在字典设置步骤将其设置为Mandatory。这样会最终 Build出来Cube的大小会减少一半。

4、Cube的维度如果超过10个,建议将常用的聚合字段做分组。

5、Cube定义中RowKey顺序:Mandatory维度,Where过滤条件中出现频率较多的维度,高基数维度,低基数维度。

6、当Segment中某一个Cuboid的大小超过一定的阈值时,修改数据分片大小以实现数据读取的并行化,从而优化Cube的查询速度。

7、设计合适的维度编码能减少维度对空间的占用,比如对于高基数的维度如果使用Dict字典编码方式占用大量空间,容易造成构建引擎或查询引擎的内存溢出。

8、对维度进行分片,如果Cuboid中某两个行的Shard by Dimension的值相同,那么无论这个Cuboid最终会被划分多少个分片,这两行数据必然会被分配到同一个分片中,方便查询和索引。

9、部署层面,可以通过Nginx在前端做负载均衡,后端启动多个Query Server接收查询请求处理。

基于Kylin的前景规划

经过项目的摸索和实践,Apache Kylin能很好的解决开篇所说的大数据计算分析的3大痛点问题,提升业务的查询效率。

首先,在接下来我们也将会持续关注Kylin的发展变化,包括数据字典的分布式构建以及基于Kafka定义Streaming Table,从而完成准实时Cube的构建的特性。

其次,规划设计符合需求的拖拽前台界面,支持探索性数据查询。采用拖拽式方便用户使用;规定化前台界面,屏蔽后台技术细节,避免低效的查询出现。

在目前的工作基础上规划构建基于Apache Kylin的大数据OLAP分析平台, 如下图所示:

最后还将继续调研和分析新的存储引擎和构建引擎来满足更多的业务需求。

微信扫一扫
关注该公众号

【Apache Kylin 】 大数据下的OLAP解决方案(原理篇)相关推荐

  1. Apache Kylin 大数据时代的OLAP利器

    1. OLAP简介 OLAP的历史与基本概念 OLAP全称为在线联机分析应用,是一种对于多维数据分析查询的解决方案.典型的OLAP应用场景包括销售.市场.管理等商务报表,预算决算,经济报表等等. 最早 ...

  2. 【案例】Cognos + Kyligence:打造大数据时代的OLAP解决方案

    作为 Hadoop 原生的企业级 OLAP 大数据分析产品,Kyligence 是 IBM Cognos 在大数据场景下的最佳迁移方案,已经成为金融企业替换 IBM Cognos 技术的主流选择! 本 ...

  3. 分布式大数据多维分析(OLAP)引擎Apache Kylin安装配置及使用示例【转】

    Kylin 麒麟官网:http://kylin.apache.org/cn/download/ 关键字:olap.Kylin Apache Kylin是一个开源的分布式分析引擎,提供Hadoop之上的 ...

  4. Apache DolphinScheduler 大数据工作流调度系统

    [本文正在参与 "拥抱开源 - Apache DolphinScheduler 有奖征稿活动],活动地址 Apache DolphinScheduler 大数据工作流调度系统 一.背景 二. ...

  5. 大数据常见错误及解决方案

    大数据常见错误及解决方案(转载) 1.用./bin/spark-shell启动spark时遇到异常:java.net.BindException: Can't assign requested add ...

  6. Apache Spark处理大数据入门,看这一篇就够了

    作者 Srini Penchikala ,译者 丛一 什么是Spark Apache Spark是一个围绕速度.易用性和复杂分析构建的大数据处理框架.最初在2009年由加州大学伯克利分校的AMPLab ...

  7. 云计算&大数据 “下一幕”智能变革之力

    2019独角兽企业重金招聘Python工程师标准>>> 2016年的互联网科技领域,云计算.大数据.人工智能成为最热词汇.阿里云"为了无法估算的价值"将中国的计算 ...

  8. 【阿里云产品公测】大数据下精确快速搜索OpenSearch

    2019独角兽企业重金招聘Python工程师标准>>> [阿里云产品公测]大数据下精确快速搜索OpenSearch 作者:阿里云用户小柒2012 相信做过一两个项目的人都会遇到上级要 ...

  9. 大数据下的BI新特性

    大数据下的BI新特性 大数据BI的新需求包括大量化(多个大数据集并行分析).多样化(结构化.半结构化.非结构化).快速化(Velocity)和价值(易用性).而计算分层(流计算.块计算.全局计算).快 ...

最新文章

  1. Sqlite3支持的数据类型 日期函数以及相关 函数
  2. formValidator的一些验证实例
  3. 用 GetEnvironmentVariable 获取常用系统环境变量
  4. 阿里云CentOS-7.2安装mysql
  5. 导出文件后打不开_PPT | 快速导出4K超高视频
  6. linux安全擦除ssd命令,如何在不破坏SSD的情况下安全擦除SSD | MOS86
  7. 三种CSS样式实现(内联样式、内联样式表、外联样式表)
  8. 用Python打造一款智能语音聊天小软件!
  9. 在VM安装最新版Linux镜像
  10. 大火的何铠明:MAE——用于计算机视觉的可扩展自监督学习神器
  11. ansible进阶(五)-handlers-任务发生更改时触发操作
  12. 一张图片放两个二维码_两个方法教你找到一张图片的高清版
  13. 游戏代理加盟需要什么条件?
  14. tsLint环境配置及用法示例
  15. 看不起java_程序员铁律,用Tab的瞧不起用Space键的,用C语言的瞧不起用Java的!...
  16. Mathematics English Vocabulary (Cited)
  17. MySQL 修改报错 You can't specify target table 'tb_trade' for update in FROM clause
  18. linux服务器下载bt,在Linux服务器上配置Transmission来离线下载BT种子
  19. 中高端Android开发人才进,享学课堂忠实陪伴,让学习成为一种享受
  20. Cisco路由器配置教程

热门文章

  1. 【《Real-Time Rendering 3rd》 提炼总结】(一) 全书知识点总览
  2. Oldboy_day01 Python的历史,变量\常量\数据类型\用户交互\流程控制\循环while
  3. 我的世界JAVA会支持光追吗_我的世界怎么开启光追
  4. 【Android】安卓开发实战之软键盘设置
  5. 动态路由协议:华为路由配置OSPF实验
  6. idea发送请求提示 无法保留cookie.cookie storage file is included in ignored list:
  7. 【小程序】- 微信授权、绑定手机号
  8. Panasonic Lumix GH5: Tips, Tricks, and Techniques 松下Lumix GH5使用技巧 Lynda课程中文字幕
  9. Springcloud+Seata+nacos 分布式事务项目搭建 AT模式
  10. APP手机测试-理论