Apache Kylin 之 初介绍
来源:互联网 发布:阿伦艾弗森生涯数据 编辑:程序博客网 时间:2024/05/29 16:24
转子:http://www.cnblogs.com/huajiezh/p/6020880.html
大数据分析神兽麒麟(Apache Kylin)
1.Apache Kylin是什么?
在现在的大数据时代,越来越多的企业开始使用Hadoop管理数据,但是现有的业务分析工具(如Tableau,Microstrategy等)往往存在很大的局限,如难以水平扩展、无法处理超大规模数据、缺少对Hadoop的支持;而利用Hadoop做数据分析依然存在诸多障碍,例如大多数分析师只习惯使用SQL,Hadoop难以实现快速交互式查询等等。神兽Apache Kylin就是为了解决这些问题而设计的。
Apache Kylin,中文名麒(shen)麟(shou) 是Hadoop动物园的重要成员。Apache Kylin是一个开源的分布式分析引擎,最初由eBay开发贡献至开源社区。它提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持大规模数据,能够处理TB乃至PB级别的分析任务,能够在亚秒级查询巨大的Hive表,并支持高并发。
Apache Kylin于2014年10月在github开源,并很快在2014年11月加入Apache孵化器,于2015年11月正式毕业成为Apache顶级项目,也成为首个完全由中国团队设计开发的Apache顶级项目。于2016年3月,Apache Kylin核心开发成员创建了Kyligence公司,力求更好地推动项目和社区的快速发展。
Kyligence是一家专注于大数据分析领域创新的数据科技公司,提供基于Apache Kylin的企业级智能分析平台及产品,以及可靠、专业、源码级的商业化支持;并推出Apache Kylin开发者培训,颁发全球唯一的Apache Kylin开发者认证证书。
2.Kylin的基本原理和架构
下面开始聊一聊Kylin的基本原理和架构。简单来说,Kylin的核心思想是预计算,即对多维分析可能用到的度量进行预计算,将计算好的结果保存成Cube,供查询时直接访问。把高复杂度的聚合运算、多表连接等操作转换成对预计算结果的查询,这决定了Kylin能够拥有很好的快速查询和高并发能力。
上图所示就是一个Cube的例子,假设我们有4个dimension,这个Cube中每个节点(称作Cuboid)都是这4个dimension的不同组合,每个组合定义了一组分析的dimension(如group by),measure的聚合结果就保存在这每个Cuboid上。查询时根据SQL找到对应的Cuboid,读取measure的值,即可返回。
为了更好的适应大数据环境,Kylin从数据仓库中最常用的Hive中读取源数据,使用 MapReduce作为Cube构建的引擎,并把预计算结果保存在HBase中,对外暴露Rest API/JDBC/ODBC的查询接口。因为Kylin支持标准的ANSI SQL,所以可以和常用分析工具(如Tableau、Excel等)进行无缝对接。下面是Kylin的架构图。
说到Cube的构建,Kylin提供了一个称作Layer Cubing的算法。简单来说,就是按照dimension数量从大到小的顺序,从Base Cuboid开始,依次基于上一层Cuboid的结果进行再聚合。每一层的计算都是一个单独的Map Reduce任务。如下图所示。
MapReduce的计算结果最终保存到HBase中,HBase中每行记录的Rowkey由dimension组成,measure会保存在column family中。为了减小存储代价,这里会对dimension和measure进行编码。查询阶段,利用HBase列存储的特性就可以保证Kylin有良好的快速响应和高并发。
有了这些预计算的结果,当收到用户的SQL请求,Kylin会对SQL做查询计划,并把本该进行的Join、Sum、Count Distinct等操作改写成Cube的查询操作。
Kylin提供了一个原生的Web界面,在这里,用户可以方便的创建和设置Cube、管控Cube构建进度,并提供SQL查询和基本的结果可视化。
根据公开数据显示,Kylin的查询性能不只是针对个别SQL,而是对上万种SQL 的平均表现,生产环境下90%ile查询能够在在3s内返回。在上个月举办的Apache Kylin Meetup中,来自美团、京东、百度等互联网公司分享了他们的使用情况。例如,在京东云海的案例中,单个Cube最大有8个维度,最大数据条数4亿,最大存储空间800G,30个Cube共占存储空间4T左右。查询性能上,当QPS在50左右,所有查询平均在200ms以内,当QPS在200左右,平均响应时间在1s以内。
北京移动也在meetup上展示了Kylin在电信运营商的应用案例,从数据上看,Kylin能够在比Hive/SparkSQL在更弱的硬件配置下获得更好的查询性能。目前,有越来越多的国内外公司将Kylin作为大数据生产环境中的重要组件,如ebay、银联、百度、中国移动等。大家如果想了解更多社区的案例和动态,可以登录Apache Kylin官网或Kyligence博客进行查看。
3.Kylin的最新特性
Kylin的最新版本1.5.x引入了不少让人期待的新功能,可扩展架构将Kylin的三大依赖(数据源、Cube引擎、存储引擎)彻底解耦。Kylin将不再直接依赖于Hadoop/HBase/Hive,而是把Kylin作为一个可扩展的平台暴露抽象接口,具体的实现以插件的方式指定所用的数据源、引擎和存储。
开发者和用户可以通过定制开发,将Kylin接入除Hadoop/HBase/Hive以外的大数据系统,比如用Kafka代替Hive作数据源,用Spark代替MapReduce做计算引擎,用Cassandra代替HBase做存储,都将变得更为简单。这也保证了Kylin可以随平台技术一起演进,紧跟技术潮流。
在Kylin 1.5.x中还对HBase存储结构进行了调整,将大的Cuboid分片存储,将线性扫描改良为并行扫描。基于上万查询进行了测试对比结果显示,分片的存储结构能够极大提速原本较慢的查询5-10倍,但对原本较快的查询提速不明显,综合起来平均提速为2倍左右。
除此之外,1.5.x还引入了Fast cubing算法,利用Mapper端计算先完成大部分聚合,再将聚合后的结果交给Reducer,从而降低对网络瓶颈的压力。对500多个Cube任务的实验显示,引入Fast cubing后,总体的Cube构建任务提速1.5倍。
目前,社区正在着手准备Apache Kylin 1.5.2版本的发布,目前正处于Apache Mailing list投票阶段,预计将会在本周在Kylin官网发布正式下载。
在本次的1.5.2版本中,Kylin带来了总计 36个缺陷修复、33个功能改进、6个新功能。一些主要的功能改进包括对HyperLogLog计算效率的提升、在Cube构建时对Convert data to hfile步骤的提速、UI上对功能提示的体验优化、支持hive view作为lookup表等等。
另一个新消息是Kylin将支持MapR和CDH的Hadoop发行版,具体信息可见KYLIN-1515和KYLIN-1672。相应的测试版本是MapR5.1和CDH5.7。
UI上提供了一个重要更新,即允许用户在Cube级别进行自定义配置,以覆盖kylin.properties中的全局配置。如在cube中定义kylin.hbase.region.count.max 可以设置该cube在hbase中region切分的最大数量。
另一个重要的功能是Diagnosis。用户经常会遇到一些棘手的问题,例如Cube构建任务失败、SQL查询失败,或Cube构建时间过长、SQL查询时间过长等。但由于运维人员对Kylin系统了解不深,很难快速定位到root cause所在地。我们在mailing list里也经常看到很多用户求助,由于不能提供足够充分的信息,社区也很难给出一针见血的建议。
当用户遇到查询、Cube/Model管理的问题,单击System页面的Diagnosis按钮,系统会自动抓取当前Project相关的信息并打包成zip文件下载到用户本地。这个包会包含相关的Metadata、日志、HBase配置等。当用户需要在mailing list求助,也可以附上这个包。当一个cube构建任务执行失败或时间过长,用户可以单击Job下的Diagnosis按钮。同样的,系统会抓取和下载Job相关信息成一个zip包。
我是本次Kylin1.5.2版本发布的release manager,欢迎大家到apache kylin邮件列表积极参与release投票。
如果有朋友想更加系统地学习如何高效使用Kylin和进行二次开发,欢迎大家报名Kyligence正在推出的《Apache Kylin开发者认证培训》,可以登录http://kyligence.io/training了解相关信息 。
Q&A
Q1、对mdx支持情况如何?
A1:我们现在不支持MDX查询,查询入口是SQL,像saiku这种基于MDX的操作,社区已经有人贡献了Mondrian jar包,可以将saiku 前台提供的mdx转换为sql,再通过jdbc jar发送到Kylin server,不过功能上有所限制,left join, topN, count distinct支持受限。
Q2、麒麟针对出来T级别的数据,每日制作cube大约话费多久时间?
A2:具体cube构建时间视不同情况而定,具体取决于dimension数量及不同组合情况、Cardinality大小、源数据大小、Cube优化程度、集群计算能力等因素。在一些案例中,在一个shared cluster构建数十GB的数据只需要几十分钟。建议大家在实际环境先进行测试,寻找可以对Cube进行优化的点。此外,一般来说,Cube的增量构建可以在ETL完成后由系统自动触发,往往这个时间和分析师做数据分析是错峰的。
Q3、如何向kylin提交代码?
A3:将修改的代码用git format-patch做成patch文件,然后attache在对应的jira上,kylin committer会来review,没有问题的话会merge到开发分支
Q4、如果数据是在elastic search,Kylin的支持如何?
A4:目前还不支持直接从es抽取数据,需要先导出到hive再做cube build;有兴趣的同学可以基于kylin 1.5的plugin架构实现一个es的data source。
Q5、工作的比较好的前端拖拽控件有什么?
A5:目前应该是tableau支持较好,saiku支持不是很好,有些场景如left join, count distinct,topN支持不是很好,用户是可以基于Api开发自己的拖拽页面的。
Q6、社区版和商业版功能上有什么区别?
A6:商业版能够提供更高的安全性、稳定性、可靠性,以及企业组件的良好集成;以及可靠、专业、源码级的商业化支持。
Q7、对多并发支持表现如何?
A7:Kylin和其他MPP架构技术想必一大优势就在高并发。一台Kylin的Query Server就支持几十到上百的QPS (取决于查询的复杂度,机器的配置等因素),而且 Kylin支持良性的水平扩展,即增多kylin server和HBase节点就可迅速增大并发。
Q8、kylin可以整合spark machine learning和spark sql吗?
A8:基于前面讲到的可插拔架构,是可以整合的。
Q9、跟其它工具对比,有没有考虑cube的构建时间?因为人家是实时计算的,你是预计算的,这从机理上是不一样的
A9:kylin跟其它mpp架构的技术在查询性能的对比,时间里是不含cube构建的时间的,所以从某种意义上来讲这样的对比是有些不公平。但是,从用户角度来看,分析师和最终用户只关心查询性能,而Kylin用预计算能大大提高查询速度,这正是用户所需要的!
Q10、Kylin ODBC 驱动程序有示例代码?
A10:目前代码在master分支,欢迎大家加入社区一起贡献。
Q11、4亿数据有点少,麒麟有没有做过相关的benchmark ,在百亿级别数据,十个纬度的情况下,表现如何?
A11:来自社区的测试数据,在一个近280亿条原始数据的cube(26TB)上,90%的查询在5秒内完成。
Q12、数据量翻倍的话,空间使用会做指数级增长么
A12:通常cube的增长与原数据的增长基本一致,即原数据翻倍,cube也翻倍,或者更小一些;而非指数增长。
Q13、Data Model和Cube Model构建过程能根据UI步骤详细讲下吗?
A13:欢迎登陆Kylin网站,查询具体的使用教程。http://kylin.apache.org/
Q14、你好,相关链接能贴一下吗,谢谢! 来自社区的测试数据,在一个近280亿条原始数据的cube(26TB)上,90%的查询在5秒内完成。
A14:http://www.docin.com/p-1497646649.html
Apache Kylin是一款以预处理Cube来提高查询速度的OLAP引擎。
首先对维度表做个简单的介绍。
麒麟只支持星型模型,也就是说一个事实表加上多个维度表。维度表不存在支架型结构。维度表存放的大多是描述性字段,用于筛选。其实以SQL的角度来看就是group by/filter through where 的效果。对于一个有N个维度的Cube,可以构建2的N次方个Cuboid。
最开始对Cuboid的概念不是很清楚。看OLAP的概念可以有上钻,切片之类的操作,但很少说道什么是Cuboid,和Cuboid里面到底存放什么。
首先说下Cuboid里面存放什么?其实就是定义那些指标,比如销售量,货物总量,或者说就是在麒麟建Data Model时的Measure。那么什么是Cuboid呢?Cuboid是某些维度的组合。从包含所有的维度的Base Cuboid到包含0个维度的Apex Cuboid。
在这个Cuboid中会根据维度的值对指标进行聚合,比如Sum,Count。比如日期维度里有20160901-20160930这三十个值,那么麒麟会把定义好的指标预聚合成三十个分组,当使用group by或者filter时只需要选取其中一个或者几个分组,再通过SQL引擎进行聚合。
那么接下来说下我们使用Apache Kylin时候遇到的坑吧,或者说一些我觉得比较难理解的地方。
首先Kylin是一个通过预处理的过程节省查询时间的OLAP工具,也就是说是空间换时间。所以设计的数据仓库模型尽量简洁,把大计算量的数据转换放到之前的ETL中去进行。开始我们陷入了Hive的思路,试想Kylin能不能加载Hive的UDF。事实上是完全没有必要的。
二是维度表中除了代理键外都设置成derived的维度,可以节省很多空间,因为Kylin自身对derived dimension做了优化。
三是如果维度基数大于一百万,Rowkey不建议使用字典,因为要加载进内存。当然如果使用fix_length,可能会增大Cube大小。对于基数较大的维度,可以选择sharding。sharding是一种分表分库的数据库存储方法。由于底层HBase可以并行查询,使用sharding可以提高查询效率。
四是Aggregation Group需要仔细设计。通过AGG可以把原来需要构建多个Cube的工作简化成构建一个Cube,多个AGG,减少了MR Job的开销。实验证明可以至少减少一半的时间。
五是如果维的基数过大时,和事实表join会报错:Scan row count exceeded threshold: 10000000, please add filter condition to narrow down backend scan range, like where clause.原因是Kylin设置了查询时使用内存大小为3G,
可以在kylin.config或者Server Config里添加kylin.query.mem.budget=8589934592解决。
六、在kylin上进行数据建模
执行kylin的demo后,重启kylin后 会有demo所包含的 project model cube 自己只用运行就行了。下面只是我做的一个例子,仅供步骤参考:
1、建立项目: 点击左上方的+号新建项目 user_info;
2、同步hive的数据源:在model中选择Data Source ,同步数据源
3、建立数据模型model:选择new model。命名model 选择table
选择维度数据:
4、建立数据cube:
(1)选择之前建立的model,自己填写cube name,其中邮箱填写后可以收到相关通知信息,通知消息类型在下面选择。
(2)设计维度:
add demension。选择normal。建立维度。
(3)设计指标
+measure。
七、执行建模数据
1、在cube开面可以看到刚刚建立的cube,在action里面选择build
2、在monitor里面可以查看job运行状态
3、成功后,在cube界面,可以看到ready的cube,查看他的详细信息。
- Apache Kylin 之 初介绍
- APACHE KYLIN简单介绍
- Apache Kylin介绍
- Apache顶级项目介绍5 - Kylin
- apache kylin
- Apache Kylin
- Kylin 介绍
- Kylin介绍
- kylin介绍
- kylin介绍
- Kylin介绍
- kylin介绍
- Kylin系列-Apache Kylin原理学习之Cube的创建与Build
- Kylin系列-Apache Kylin优化之—Cube的高级设置
- Apache Kylin高级部分之JDBC访问方式
- Apache Kylin高级部分之使用Hive视图
- Apache Kylin原理学习之Cube的创建与Build
- Apache Kylin优化之—Cube的高级设置
- Linux内核部件分析 设备驱动模型的基石kobject
- Android---背景颜色大全
- 如何将Anaconda更新到想要的python版本(其实使用的是Anaconda中的切换不同环境的方法,不过步骤挺好)
- windows server 安装php
- 【转载】为什么说Java匿名内部类是残缺的闭包
- Apache Kylin 之 初介绍
- 仅此一文让你明白ASP.NET MVC原理
- 机械行业信息化系统五大功能
- Android ---------高德卫星地图绘制多个点和点的点击事件自定义弹窗
- 职称论文发表应注意什么问题
- Linux系统该怎么学?运维老鸟的经验心得。
- readdir时抛出异常:EMFILE, too many open files
- 7天玩转云服务器
- 符号扩展,零扩展与符号缩减