去年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 mail 邮件发送

    Linux mail 邮件介绍 在Linux系统下我们可以通过”mail“命令,发送邮件,在运维中通常我们它来实现邮件告警. 安装 (方案1) 一.安装邮件服务 yum install -y send ...

  2. Linux 系统TCP连接内存大小限制 调优

    系统TCP连接内存大小限制 TCP的每一个连接请求,读写都需要占用系统内存资源,可根据系统配置,对TCP连接数,内存大小,限制调优. 查看系统内存资源 记录内存 详情:cat /proc/meminf ...

  3. spring mvc 的上传图片是怎么实现的?

    spring mvc 的上传图片是怎么实现的? 导入jar包,commons-io.jar 及 commons-fileupload.jar 在springmvc的配置文件中配置Mutipart解析器 ...

  4. easyUI使用dailog实现弹出框带表单功能

    本文为博主原创,未经允许不得转载: 示例如下: 需要注意的地方在id为win的div中需要有:closed="true"这个属性,这个属性为控制dailogn对话框显示与隐藏的属性 ...

  5. vi中换行、翻页和查找功能

    vi时,按ESC进入Command模式, 1. 移动光标命令:j 向下移动一行:k 向上移动一行:h 向左移动一个字符:l 向右移动一个字符:对于 j.k.l和h键,命令前加数字,移动多行:如 3j, ...

  6. [IDE - Eclipse] JSP报错:The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path

    是因为Eclipse的Web项目不自动引入相关jar包. Right Click on the Project ❯ Properties ❯ Project Facets. You would be ...

  7. CentOS6上ftp服务器搭建实战

    1.安装程序包 [root@node1 ~]$ yum install -y vsftpd[root@node1 ~]$ yum install -y lftp # 安装测试软件 2.启动vsftpd ...

  8. 关于contenteditable属性

    今天刷刷看看,看到了发说说框,发现居然不是textarea的,百思不得其解围.后来看到contenteditable,心想应该就是这个搞怪的吧,百度了下.w3c的解释是contenteditable属 ...

  9. 漏洞复现——Apache SSI远程命令执行

    漏洞原理:当目标服务器开启了SSI与CGI支持,我们就可以上传shtml文件,利用<!--#exec cmd="id" -->语法执行命令. SSI:SSI(服务器端包 ...

  10. 在idea中用tomcat远程部署调试

    适用于生产环境下的调试. 1.catalina配置 在服务器的bin下创建setenv.sh,内容如下 1099是jmx,最后是服务器ip 2.启动tomcat ./catalina.sh jpda ...