去年12月挖的坑,今天找时间填上。update:20190119

一、kylin架构

核心是预计算,在此架构上做了一些优化。计算结果存储在Hbase,对Hive等查询转换为Hbase的Scan,提高速度。

缺点亦明显,先天没有AD-HOC能力

二、kylin高可用部署

Kylin的每个结点都可以部署为Job节点(build cube用)兼查询节点。并且每个节点之间对等。因此只要前面加个Nginx做请求转发即可。

Kylin支持通过增加节点水平扩容。

三、kylin on hbase vs kylin on druid

目前的 Kylin 数据存储使用 HBase,存储 Cube 时将维度值和度量值转换成 HBase 的 KeyValue。因为 HBase 不支持二级索引,只有一个行键 (RowKey) 索引,Kylin 的维度值会按照固定的顺序拼接作为 RowKey 存储,那么排在 RowKey 前面的维度,就会获得比后面的维度更好的过滤性能。
 
也就是说排在rowkey后面的维度查询,效率极低,因为需要scan Hbase的行数非常大,Druid可以解决这个问题。
 
其特点:
1)数据实时流入,毫秒级延迟即可查询。与ES有些像?
2)支持倒排索引,具有良好的过滤性能。(Hbase只支持一级索引,导致rowkey后面的维度过滤性能差)
 
 
这是其较于 Kylin On Hbase最重要的优势。

四、rowkey设计优化

直接贴结论:

1)查询频率高的维度在前
2)基数大的维度在前

两者冲突时,暂时没想明白。

五、维度优化

为什么需要维度优化
 
因为如果不进行任何维度优化,直接将所有的维度放在一个聚集组里,Kylin就会计算所有的维度组合(cuboid)。
 
比如,有12个维度,Kylin就会计算2的12次方即4096个cuboid,实际上查询可能用到的cuboid不到1000个,甚至更少。 如果对维度不进行优化,会造成集群计算和存储资源的浪费,也会影响cube的build时间和查询性能,所以我们需要进行cube的维度优化。
 

聚集组
聚集组:用来控制哪些cuboid需要计算。
 
适用场景:不是只需要计算base cuboid的情况下,都需要聚集组。
 
注意事项:一个维度可以出现在多个聚集组中,但是build期间只会计算一次。
 
如果不设置聚集组,默认情况下只会计算 base cuboid。
 
聚集组不宜太多。

 
衍生维度
衍生维度:维表中可以由主键推导出值的列可以作为衍⽣维度。
 
使用场景:以星型模型接入时。例如用户维表可以从userid推导出用户的姓名,年龄,性别。
 
优化效果:维度表的N个维度组合成的cuboid个数会从2的N次方降为2。
 

 
强制维度
强制维度:所有cuboid必须包含的维度,不会计算不包含强制维度的cuboid。
 
适用场景:可以将确定在查询时一定会使用的维度设为强制维度。例如,时间维度。
 
优化效果:将一个维度设为强制维度,则cuboid个数直接减半。
 

 
层次维度
层次维度:具有一定层次关系的维度。
 
使用场景:像年,月,日;国家,省份,城市这类具有层次关系的维度。
 
优化效果:将N个维度设置为层次维度,则这N个维度组合成的cuboid个数会从2的N次方减少到N+1。
 

 
联合维度
联合维度:将几个维度视为一个维度。
 
适用场景: 1 可以将确定在查询时一定会同时使用的几个维度设为一个联合维度。
 
2 可以将基数很小的几个维度设为一个联合维度。
 
3 可以将查询时很少使用的几个维度设为一个联合维度。
 
优化效果:将N个维度设置为联合维度,则这N个维度组合成的cuboid个数会从2的N次方减少到1。
 

Extended Column
 
在OLAP分析场景中,经常存在对某个id进行过滤,但查询结果要展示为name的情况,比如user_id和user_name。这类问题通常有三种解决方式:
 
a. 将ID和Name都设置为维度,查询语句类似select name, count(*) from table where id = 1 group by id,name。这种方式的问题是会导致维度增多,导致预计算结果膨胀;
 
b. 将id和name都设置为维度,并且将两者设置为联合。这种方式的好处是保持维度组合数不会增加,但限制了维度的其它优化,比如ID不能再被设置为强制维度或者层次维度;
 
c. 将ID设置为维度,Name设置为特殊的Measure,类型为Extended Column。这种方式既能保证过滤id且查询name的需求,同时也不影响id维度的进一步优化。
 
所以此类需求我们推荐使用 Extended Column。
 

另外需要提一个分片维度,集群目前用错了:
分片维度
 
Cube支持在构建阶段进行分片以提高效率,可以并只可以将一个维度设为分片(shard by)维度(注意分片维度和cube的partition维度不同,前者作用于构建阶段,后者是用于分割时间段以支持增量构建)。Cube build第二步需要将中间表的数据重新分布到HDFS各个节点上,默认的partition方式是随机,如果指定了分片维度,则改为使用分片维度进行partition。重新分布数据的意义在于防止中间表文件大小相差太大造成数据倾斜,因此分片维度应该是高基数列以保证分片的粒度足够小,可以较为均匀地分布到各个节点上,这能大大加速之后的MapReduce任务。

六、优化实践

优化
1,shop_id维度,由dict编码改为integer编码。is_pre_order修改为boolean编码。
2,前面理解错了partition的含义,它与Hive里面的Partition不同。用于build cube时中间表的HDFS分布,因此粒度超小越好,数据倾斜的可能越小,因此由dt->shop_id
3,Hbase存了太多的表?会不会因为metadata多影响效率?是否可以优化?Merge后自动删除之?什么情况不适应merge?待讨论。
4,设置shop_id, dt为必选维度,减小cube大小以及build时间。
5,hbase表,hive中间表,job中间数据使用snappy压缩,cpu换内存IO ——已经做了
6,Kylin On Druid?目前看还不需要,目前的表及维度查询实际并没达到触发Hbase的瓶颈问题。
 
七、Hybird模式
修改维度后,查询向前兼容,适用不能重新build旧的数据的情况(可能因为数据太多,build时间太久不可操作,可能由于旧原始数据已经遗失)
 
例:
原先维度shop_id、dt, 现新增一个维度is_pre_order。
在20190119这天做的cube维度修改。
 
则以后查询:
1)sql含有is_pre_order且日期>20190119,则自动路由到含is_pre_order dm的新cube。
2)sql含有is_pre_order但日期<= 20190119,则返回空数据。
3)若sql不含is_pre_order,可查所有日期,<=20190119路由到旧的cube,>20190119路由到新的cube。
 
也就是Hybird使新增dim不需要重新更换cube,dim的修改对用户透明,用户查询代码不需要任何改动。

apache kylin总结的更多相关文章

  1. 《基于Apache Kylin构建大数据分析平台》

    Kyligence联合创始人兼CEO,Apache Kylin项目管理委员会主席(PMC Chair)韩卿 武汉市云升科技发展有限公司董事长,<智慧城市-大数据.物联网和云计算之应用>作者 ...

  2. Apache Kylin 部署之不完全指南

    1. 引言 Apache Kylin(麒麟)是由eBay开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据.底层存储用的是HBase,数据输入与cu ...

  3. 【转】使用Apache Kylin搭建企业级开源大数据分析平台

    http://www.thebigdata.cn/JieJueFangAn/30143.html 本篇文章整理自史少锋4月23日在『1024大数据技术峰会』上的分享实录:使用Apache Kylin搭 ...

  4. 大数据分析神兽麒麟(Apache Kylin)

    1.Apache Kylin是什么? 在现在的大数据时代,越来越多的企业开始使用Hadoop管理数据,但是现有的业务分析工具(如Tableau,Microstrategy等)往往存在很大的局限,如难以 ...

  5. 【大数据安全】Apache Kylin 安全配置(Kerberos)

    1. 概述 本文首先会简单介绍Kylin的安装配置,然后介绍启用Kerberos的CDH集群中如何部署及使用Kylin. Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop/Spa ...

  6. Apache kylin概览

    一.Apache kylin的核心概念 表(Table ):表定义在hive中,是数据立方体(Data cube)的数据源,在build cube 之前,必须同步在 kylin中. 模型(model) ...

  7. apache kylin的单节点及多节点安装

    Kylin的使用安装文档Kylin简介Kylin是什么Apache Kylin是一个开源的分布式分析引擎,最初由eBay开发贡献至开源社区.它提供Hadoop之上的SQL查询接口及多维分析(OLAP) ...

  8. Apache kylin 入门

    本篇文章就概念.工作机制.数据备份.优势与不足4个方面详细介绍了Apache Kylin. Apache Kylin 简介 1. Apache kylin 是一个开源的海量数据分布式预处理引擎.它通过 ...

  9. Apache kylin进阶——元数据篇

    一.Apache kylin元数据的存储 Apache kylin的元数据包括 立方体描述(cube description),立方体实例(cube instances)项目(project).作业( ...

  10. Apache kylin的基础环境

    一.Apache kylin的基础环境 由于Apache kylin上的OLAP(wiki:OLAP)是构建在hadoop生态环境上的,所以hadoop环境的稳定性和健壮性对kylin的稳定运行至关重 ...

随机推荐

  1. Linux 文件时间记录属性 调优

    Linux 文件时间属性介绍 atime:(access time)显示的是文件中的数据最后被访问的时间,比如系统的进程直接使用或通过一些命令和脚本间接使用.(执行一些可执行文件或脚本) mtime: ...

  2. D7 割点 割边 强连通分量

    今天几道是模板题: 第一道:(粘不了链接呜呜呜) 题目描述 n个城市之间有通讯网络,每个城市都有通讯交换机,直接或间接与其它城市连接.因电子设备容易损坏,需给通讯点配备备用交换机. 但备用 交换机数量 ...

  3. JS求任意字符串中出现最多的字符以及出现的次数

    我爱撸码,撸码使我感到快乐!大家好,我是Counter本节讲讲如何利用JS来查找任意给定的字符串,求字符串中出现次数最多的字符,出现的次数.直接上代码了,该注释的都注释啦.非常轻松加愉快.效果如下: ...

  4. UVA1401 Remember the Word

    思路 用trie树优化dp 设f[i]表示到第i个的方案数,则有\(f[i]=\sum_{x}f[i+len[x]]\)(x是s[i,n]的一个前缀),所以需要快速找出所有前缀,用Trie树即可 代码 ...

  5. HAOI 2018 染色(容斥+NTT)

    题意 https://loj.ac/problem/2527 思路 设 \(f(k)\) 为强制选择 \(k\) 个颜色出现 \(s\) 种,其余任取的方案数. 则有 \[ f(k)={m\choos ...

  6. 如何用 python 优雅地完成数据库课设

    0 前言 偶然间发现 Google 收录了学校实验打卡系统的接口,正好要做数据库课设,便拿来作为 environment. 机房居然装了 python ,早就听说 python 写爬虫速度一流,课上的 ...

  7. echarts的axisLabel的文字内容过长的解决办法

    通过查找资料学习,我总结了四种解决的办法,不一定是最好的,但是希望能够帮助到需要的童鞋,同时如果大家有什么更好的方法欢迎指导. 方法一:这种方法就是将文本内容转换为字符串数组,然后再按需求换行,需要每 ...

  8. MySQL连接java

    1.创建一个java project,建一个lib文件. 下载MySQL-connecor. 将下载好的文件打开,将mysql-connector-java-5.0.8-bin.jar文件粘贴复制到l ...

  9. 了解多层交换中的CEF FIB CAM TCAM

    来源:http://blog.51cto.com/redant/314151 多层交换是指交换机使用硬件来交换和路由数据包,通过硬件来支持4-7层的交换.交换机执行硬件交换,第3层引擎(路由处理器)须 ...

  10. HTML 点击图片放大

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...