热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Kylin大数据下的OLAP解决方案(原理篇)

ApacheKylin大数据下的OLAP解决方案(原理篇)http:mp.weixin.qq.coms?__bizMzI2MDU5ODY2Mg&mid2247483927&idx1

//
Apache Kylin 大数据下的OLAP解决方案(原理篇)
http://mp.weixin.qq.com/s?__biz=MzI2MDU5ODY2Mg==&mid=2247483927&idx=1&sn=6697cde0bc54e1725da868c5cf52aeb0&chksm=ea667cfedd11f5e8803a6ee9ebc2444d515b7c18c641261f697d4ca341d1439ac3acca472240&mpshare=1&scene=1&srcid=0306oTHdHxhTi2IWYsK4Etr6#rd

**前言******

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

《Kylin 大数据下的OLAP解决方案(原理篇)》

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

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

《Kylin 大数据下的OLAP解决方案(原理篇)》

但是缺少一个基于Hadoop的分布式分析引擎,虽然目前存在业务分析工具,如Tableau等,但是他们往往存在很大的局限,比如难以水平扩展、无法处理超大规模数据,同时也缺少Hadoop的支持。
ApacheKylin的出现,能够基于Hadoop很好地解决上面的问题。Apache Kylin是一个开源的分布式存储引擎。它提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持大规模数据,能够处理TB乃至PB级别的分析任务,能够在亚秒级查询巨大的Hive表,并支持高并发。

大数据多维分析的挑战

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

《Kylin 大数据下的OLAP解决方案(原理篇)》
接下面我们就来详细说说****Apache ****Kylin****的基本原理和架构

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

《Kylin 大数据下的OLAP解决方案(原理篇)》

核心:预计算

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

《Kylin 大数据下的OLAP解决方案(原理篇)》

上图所示就是一个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任务。如下图所示:

《Kylin 大数据下的OLAP解决方案(原理篇)》

此算法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,也就是最终结果,如下图:

《Kylin 大数据下的OLAP解决方案(原理篇)》

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有良好的快速响应和高并发。

《Kylin 大数据下的OLAP解决方案(原理篇)》

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

《Kylin 大数据下的OLAP解决方案(原理篇)》

查询时,SQL语句被SQL解析器翻译成一个解释计划,从这个计划可以准确知道用户要查哪些表,它们是怎样join起来,有哪些过滤条件等等。Kylin会用这个计划去匹配寻找合适的Cube。
如果有Cube命中,这个计划会发送到存储引擎,翻译成对存储(默认HBase)相应的Scan操作。Groupby和过滤条件的列,用来找到 Cuboid,过滤条件会被转换成Scan的开始和结束值,以缩小Scan的范围; Scan的result,Rowkey会被反向解码成各个dimension的值,Value会被解码成Metrics值 。

《Kylin 大数据下的OLAP解决方案(原理篇)》

Apache Kylin****项目实践

目前基于kylin的数据分析平台已经在业务中开始测试以及使用,并且在用户管理和权限操作方面做了的二次开发改造,以实现project和cube的安全管理。
下图是cube的查询响应图表,cube 大小为157GB,包括一个事实表,14个维度和4个度量:

《Kylin 大数据下的OLAP解决方案(原理篇)》

在项目实践过程中也遇到问题:
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分析平台, 如下图所示:

《Kylin 大数据下的OLAP解决方案(原理篇)》

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


推荐阅读
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • 大数据领域的职业路径与角色解析
    本文将深入探讨大数据领域的各种职业和工作角色,帮助读者全面了解大数据行业的需求、市场趋势,以及从入门到高级专业人士的职业发展路径。文章还将详细介绍不同公司对大数据人才的需求,并解析各岗位的具体职责、所需技能和经验。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 初探Hadoop:第一章概览
    本文深入探讨了《Hadoop》第一章的内容,重点介绍了Hadoop的基本概念及其如何解决大数据处理中的关键挑战。 ... [详细]
  • 深入理解云计算与大数据技术
    本文详细探讨了云计算与大数据技术的关键知识点,包括大数据处理平台、社会网络大数据、城市大数据、工业大数据、教育大数据、数据开放与共享的应用,以及搜索引擎与Web挖掘、推荐技术的研究及应用。文章还涵盖了云计算的基础概念、特点和服务类型分类。 ... [详细]
  • 本文介绍如何通过整合SparkSQL与Hive来构建高效的用户画像环境,提高数据处理速度和查询效率。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • HBase 数据复制与灾备同步策略
    本文探讨了HBase在企业级应用中的数据复制与灾备同步解决方案,包括存量数据迁移及增量数据实时同步的方法。 ... [详细]
  • 如何在U8系统中连接服务器并获取数据
    本文介绍了如何在U8系统中通过不同的方法连接服务器并获取数据,包括使用MySQL客户端连接实例的方法,如非SSL连接和SSL连接,并提供了详细的步骤和注意事项。 ... [详细]
  • 深入解析:存储技术的演变与发展
    本文探讨了从单机文件系统到分布式文件系统的存储技术发展过程,详细解释了各种存储模型及其特点。 ... [详细]
  • 本文介绍了Hadoop的核心组件,包括高可靠性和高吞吐量的分布式文件系统HDFS、分布式的离线并行计算框架MapReduce、作业调度与集群资源管理框架YARN以及支持其他模块的工具模块Common。 ... [详细]
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
author-avatar
晓风朗月
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有