Kylin知识整理与归纳

Kylin知识整理与归纳

1. kyliy的介绍及说明

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

OLAP全称为在线联机分析应用,是一种对多维数据分析查询的解决方案。目前市面上主流的OLAP引擎,包括spark,impala,sparksql,drill等没有一个系统能够满足所有的场景查询需求,没有一个系统能同时在数据量,性能,和灵活性三个方面做到完美。

kylin是一个基于hadoop生态圈的OLAP分析引擎,其特点:

(1) 可扩展

(2) 提供标准的sql交互查询能力,方便统计

(3) 与BI工具可无缝结合

Kylin的设计思想就是利用空间换时间,通过构建CUBE来与计算多维数据,加快查询效率。Apache Kylin旨在减少Hadoop在10亿及百亿规模以上数据级别的情况下的查询延迟,目前底层数据存储基于HBase,具有较强的可伸缩性。

2. 公司成功应用场景

(1) kylin在美团的应用

美团的业务业务推广线都是基于kylin的解决方案,截至16年底,生产环境共有214个Cube,包含的数据总行数为2853亿行,Cube在HBase中的存储有59TB。日查询次数超过了50万次,TP50查询时延87ms,TP99时延1266ms,很好地满足了对性能的要求。

3. 安装及使用

3.1 安装

(1)下载kylin 的安装包:http://kylin.apache.org/download

(2) 解压kylin到指定的路径: /usr/hdp/2.6.1.0-129/kylin/

(3) 设置KYLIN_HOME的环境变量

(4) 执行$KYLIN_HOME/bin/check-env.sh  检查环境

(5) 启动kylin 服务  $KYLIN_HOME/bin/kylin.sh start

(6) 页面查看kylin的服务:http://125.64.43.160:7070/kylin

3.2 使用kylin构建cube

3.2.1 创建project

创建完project后,通过下拉框选择对应的project

这个时候面板还是空白,需要选择选择数据源,有3中方式:

(1) load hive table metastore:手动指定hive的表(database.tablename),多个表以,分割

(2) load hive table from tree

自动展现hive的库及表,可以选择多个

(3) add streaming table:后面篇幅介绍

3.2.2 构建model

(1) 点击model –> new model 新建model

(2) 输入model info,选择实时表

注:实时表支持关联表,而streaming table则不支持

(3) 选择维度列

(4) 选择指标

(5) 指定分区及过滤条件

没有分区则不填写

至此,model构建完成,在model下,可以对model进行管理,

3.2.3 构建cube

(1) 点击model -> model->new cube新建cube

(2) cube info 指定cube所需要的model信息

(3) 添加维度

(4) 填写统计指标

(5) 构建完成cube

3.2.4 build cube  与计算数据

(1)点击action -> build

(2) 点击monitor 查看bulid 状态

3.2.5 查看cube情况

3.2.6 查询cube

3.3 基于kafka构建实时流cube

(1) 添加流数据源

(2) 创建kafka 的topic ,用于生产流数据

kafka-topics.sh --create --zookeeper node51:2181 --replication-factor 1 --partitions 1 --topic kylin_demo

(3) 通过topic生产数据

./kylin.sh org.apache.kylin.source.kafka.util.KafkaSampleProducer --topic kylin_demo --broker node51:6667 —delay 0

通过消费端消费数据(验证数据成功传送)

./kylin.sh org.apache.kylin.source.kafka.util.KafkaSampleProducer --topic kylin_demo --broker node51:6667 —delay 0

(4) 构建流数据schema

从消费端截取一条样例消息,粘贴到json中,kylin自动解析schema表,并指定表名

(5) 指定kafka集群信息,及添加流数据topic

(6) 构建cube类似于普通的hive表构建(同上)

(7) Building cube

3.4 定时执行cube build

Kylin web 触发指令只能支持一次触发,在实际应用中,需要定时执行build任务,可以使用curl命令从后台触发cube的构建,可以借助crontab 或者其他的调度工具

Eg:

*/20 * * * * curl -X PUT --user ADMIN:KYLIN -H "Content-Type: application/json;charset=utf-8" -d '{ "sourceOffsetStart": 0, "sourceOffsetEnd": 9223372036854775807, "buildType": "BUILD"}' http://node51:7070/kylin/api/cubes/cube_kylin_kafka/build2

说明:

(1) sourceOffsetStart 和sourceOffsetEnd指定了构建的范围,这里的offset是kylin的内部概念,也支持kafka offset 来定义构建的边界。

(2) sourceOffsetStart=0 代表着从最近一次构建成功的offset来继续构建,如果没有值,则从kafka最早的offset开始构建

(3) sourceOffsetEnd=9223372036854775807 是long型的最大值,标识构建会持续到当下最新的offset

4. Kylin原理说明

4.1 kylin 是一个开源的分布式分析引擎,提供hadoop之上的sql查询接口及多维分析,支持超大规模数据能力。

4.2 cube

Cube是一种典型的多维数据分析技术,一个CUBE可以有多个事实表,多个维表构成:

4.2.1 cube是维度的组合,任一维度的组合称为cubeoid,有N个维度的cube,那么就有2的n次方的维度组合

4.2.2 cube的构建过程,其实是将所有的维度组合事先计算,存储在Hbase中,以空间交换时间,Htable对应的rowkey,就是各种维度组合,指标存在column中,这样将不同维度组合的查询sql,转换成rowkey的范围扫描,然后对指标进行汇总计算。

4.2.3 kylin构建cube过程

(1)根据cube定义的事实表和维表,在hive中生成一张临时中间表

(2)使用mapreduce,从事实表中抽取维度的distinct值,并以字典树的方式压缩编码,同时也对所有维度表进行压缩编码,生成维度字典

(3)计算和统计所有的维度组合,并保存

(4)创建Hbase table

(5)利用hive中间临时表,使用mr,生成每种维度组合的数据,将其转换为Hfile,并导入到Hbase table中

(6)更新cube信息,清理中间表

4.2.4 增量cubeing

Kylin使用了一种增量cubing技术来进行cube数据的叠加,kylin根据时间段划分为多个segment,cube每次构建都会生成一个新的segment,增量cubing依赖已有的cube segment,在segment数目到达一定数量后尽可能会进行合并操作,合并成一个新的大的cube segment 来替代,Merge操作是一个异步的在线操作,不会对前端的查询业务产生影响。

合并操作步骤:

(1) 遍历指定的cube segment

(2) 合并维度字典目录和维度表快照

(3) 利用mapreduce 合并各种维度组合cuboid

(4) 将cuboid转换为Hfile ,生成新的Htable ,替代原来的多个Htable

5. 注意事项

5.1 事实表的准备

Kylin只支持简单的聚合函数,sum,count等,尽量在hive中做好预处理。对于维表比较大的情况,或者查询的逻辑复杂判断的,或者kylin不支持的语法的,可以事先将事实表和维表管理处理创建为hive的视图,之后根据视图来创建cube模型。

5.2 cube构建的高级设置

cube的计算量主要跟维度个数、维度基数紧密相关,尽量减少不必要的维度组合计算。

(1) Mandotary - 必需的维度:每次查询必然要带的条件建议在字典设置为Manadatory,故认为所有的查询都会包含有此维度,对于不包含此维度的组合,在构建cube时不会被计算,这样最终build出来的cube的大小会减少一半。

(2) Hierarchy - 层级维度:一些列具有层次关系的维度组成一个Hierachy,例如年,月,日等,如果不设置Hierachy,会形成各个维度的组合cuboid,设置了Hierachy后cuboid增加了一个约束,那些不满足层级的组合会被剪枝。

Eg:如果A, B, C是层级,并且A>B>C,那么只需要计算组合A, AB, ABC; 其它组合如B, C, BC, AC将不做预计算。

(3) Derived - 衍生维度:维度表的列值,可以从它的主键值衍生而来,那么通过将这些列定义为衍生维度,可以仅将主键加入到Cube的预计算来,而在运行时通过使用维度表的快照,衍生出非PK列的值,从而起到降维的效果。

(4) Joint Dimensions

将维度进行分组,以达到降低维度组合数目的手段,不同分组的维度之间不会进行组合计算.将经常一起出现的组合维度放在同一维度组中,将从不一起出现的维度设置在不同的维度组中。

Group分组的优化措施与查询sql习惯紧密依赖,即订制优化,如果查询的维度是跨组的,那么需要付出更大的代价来获取结果

(4)cube中rowkey顺序:按照查询频率从高到低,从前往后排,Mandatory维度,Where过滤条件中出现频率较多的维度,高基数维度,低基数维度。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 197,368评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,941评论 2 374
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 144,369评论 0 326
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,848评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,719评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,505评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,904评论 3 388
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,528评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,819评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,848评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,652评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,468评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,912评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,095评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,389评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,906评论 2 343
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,120评论 2 339

推荐阅读更多精彩内容