Apache Kylin原理学习之Cube的创建与Build

原文地址:http://lxw1234.com/archives/2016/05/655.htm
Cube是一种典型的多维数据分析技术,一个Cube可以有多个事实表,多个维表构成。如果您还不了解这些概念,建议您搜索下数据仓库、OLAP、Cube、星型模型、事实表、维度表等等。比如一个简单例子,分析网站流量的Cube,包含一个事实表和四个维度表:
事实表可能有以下字段:
天、来源ID、浏览器ID、操作系统ID、PV、PageNumber等等;
其中,小时、来源ID、浏览器ID、操作系统ID 为维度;
PV、PageNumber为指标;
一般事实表中的维度都采用外键ID的形式,一来可以节省存储,也可以很好的适用于其他分析工具;
维度表包括:
时间维表:年、月、日,其中天为最细粒度,也为该表主键;
访问来源维表:来源ID、来源名称;
浏览器维表:浏览器ID、浏览器名称、etc.
操作系统维表:操作系统ID、操作系统名称、etc.
事实表中的维度,分别与这四张维度表,通过主外键的方式关联。
Kylin中的Cube亦是这种模型。

创建Cube

之前的文章《分布式大数据多维分析(OLAP)引擎Apache Kylin安装配置及使用示例》介绍过在Kylin中定义数据模型和Cube。

Build Cube

定义好Cube之后,Apache Kylin通过MapReduce,将存储在Hive中的事实表和维度表,转换成Cube,存储在HBase中,以实现快速分析查询,整个过程如下图所示:

kylin

STEP1. 根据Cube定义的事实表和维度,在Hive中生成一张中间表;

Create Intermediate Flat Hive Table;

STEP2. 使用MapReduce,从事实表中抽取维度的Distinct值,并以字典树的方式压缩编码,同时也对所有维度表进行压缩编码,生成维度字典;

Extract Fact Table Distinct Columns

Build Dimension Dictionary

STEP3. 计算和统计所有的维度组合,并保存,其中,每一种维度组合,称为一个Cuboid,后面会详细介绍。

Save Cuboid Statistics

STEP4. 创建HBase Table;

Create HTable

STEP5. 利用step1中间表的数据,使用MapReduce,生成每一种维度组合(Cuboid)的数据;

Build Base Cuboid Data;

Build N-Dimension Cuboid Data : 7-Dimension;

Build N-Dimension Cuboid Data : 6-Dimension;

。。。。。。

Build N-Dimension Cuboid Data : 2-Dimension;

Build Cube;

STEP6. 将Cuboid数据转换成HFile,并导入到HBase Table中:

Convert Cuboid Data to HFile;

Load HFile to HBase Table;

STEP7. 更新Cube信息,清理中间表:

Update Cube Info;

Garbage Collection;

整个Build过程结束。

关于维度组合Cuboid

Kylin中Cube的Build过程,其实是将所有的维度组合事先计算,存储于HBase中,以空间换时间,HTable对应的RowKey,就是各种维度组合,指标存在Column中,这样,将不同维度组合查询SQL,转换成基于RowKey的范围扫描,然后对指标进行汇总计算。

理论上来说,一个N维的Cube,便有2的N次方种维度组合,参考网上的一个例子,一个Cube包含time, item, location, supplier四个维度,那么组合(Cuboid)便有16种:

kylin

一个Cube中,当维度数量N超过一定数量后,空间以及计算消耗将会非常大,Kylin在定义Cube时候,可以将维度拆分成多个聚合组(Aggregation Groups),只在组内计算Cube,聚合组内查询效率高,跨组查询效率较差,所以需要根据业务场景,将常用的维度组合定义到一个聚合组中,提高查询性能,这也是Kylin中查询性能优化的一个重要方面。

后续将继续学习Kylin的原理及优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5-12

1,每个递归函数都有两部分,基线条件和递归条件 base case and recursive case 2,调用一个函数的时候,其他的函数调用会暂停并处于未完成的状态 3.调用栈会消耗大量的内存,栈很高的时候意味着计算机要存储大量的函数调用信息,此时的…

kylin与superset集成实现数据可视化

原文地址:http://minirick.duapp.com/kylinyu-supersetji-cheng-shi-xian-shu-ju-ke-shi-hua/?utm_sourcetuicool&utm_mediumreferral apache kylin是一个开源分布式引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以…

Ambari离线部署Hadoop集群踩到的坑

1、远程拷贝HDP组件不全导致安装client时缺少rpm包,手动拷贝解决 2、安装HAWQ,启动时报错 passwordlell ssh hawq hosts ,hawq master 和其他主机机拷贝文件输入密码受限,两方面原因: 一 root 用户 ssh 无密登录时 权…

2016012026 管凌波 散列函数的应用及其安全性

2016012026 管凌波 散列函数的应用及其安全性 一、散列函数是什么。 散列函数即为Hash函数,就是把任意长度的输入(预映射),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射&a…

Team Foundation Server (TFS) 2015 安装指导

原文地址:http://www.cnblogs.com/danzhang/p/4718035.html http://www.cnblogs.com/danzhang 张洪君 微软ALM MVP 1. 概述 微软于8月6日发布了大家期待已久的TFS 2015正式版, https://www.visualstudio.com/en-us/news/tfs2015-vs.aspx ,…

VM虚拟机链接克隆及linux eth0网卡的快速设置方法

对于后台开发者来说,在学习过程中必然接触众多中间件,在自己的虚拟机进行操作甚至搭建cluster是很常见的事情.我在初学者时摸索出一套快速的克隆虚拟机方法.分享给大家.产品VMware Workstation版本10.0.2 build-1744117这是我的虚拟机命名,我觉得这样的命名比较合适,clone机/服…

一加手机虚拟键失灵解决方案

1、手机摔了一下后下方虚拟键无法使用,尝试多种小白点工具如悬浮菜单、超级小白点、easytouch,安装完后并取得root权限后仍不能弹出悬浮框,找不到原因,原则上来讲的话如果是硬件屏幕摔坏,某哥区域无法响应触摸不应影响…

scrapy newspaper bug

发现一个newspaper的bug,在github上已修复,但pip下载的包还是有这个错fix for "jpeg error with PIL, Cant convert NoneType object to str implicitly"修复办法: 打开python27/Lib/site-packages/newspaper/images.pyclass Scraper:def largest_image_url:把log.de…

Spring MVC+Mybatis 多数据源配置

文章来自:https://www.jianshu.com/p/fddcc1a6b2d8 1. 继承AbstractRoutingDataSource AbstractRoutingDataSource 是spring提供的一个多数据源抽象类。spring会在使用事务的地方来调用此类的determineCurrentLookupKey()方法来获取数据源的key值。我们继承此抽象类…

C#如何Json转字符串;字符串转Json;Newtonsoft.Json(Json.Net)

什么是JSON C#如何Json转字符串 字符串转Json Newtonsoft.Json(Json.Net)学习笔记(转) 转载于:https://www.cnblogs.com/macT/p/9040901.html

mysql更改root用户密码

不同版本命令不一样 MySQL 5.7.6 and later: ALTER USER ‘root’’localhost’ IDENTIFIED BY ‘MyNewPass’; MySQL 5.7.5 and earlier: SET PASSWORD FOR ‘root’’localhost’ PASSWORD(‘MyNewPass’);

python2.7 安装numpy no module name zlib

CentOS6.7默认安装Python-2.6 而numpy支持python2.7以上,所以需要安装Python2.7,安装的步骤就不细说了,编译安装,然后再建立软连接。 之后安装numpy时报错no module named setuptools ,pip 安装或者源码安装,我采用源…

java : nio 学习

https://github.com/astutesparrow/nio https://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.html 转载于:https://www.cnblogs.com/chen-msg/p/9041510.html

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署 Amazon ElastiCache 连接至 Redis 节点 通过 AWS Command Line Interface使用高级别 s3 命令 在 Linux 上安装 AWS Command Line Interface 在Amazon EC2主机上安装Zmodem协议传输工具lrzsz 安装lrzsz出现configure: …

pip install mysqlclient报错fails with EnvironmentError: mysql_config not found

解决: CentOS yum install mysql-devel 再重新执行pip install mysqlclient解决

管理外部程序的流程

本部分包含: 关于外部程序DBA任务来启用外部过程调用关于外部程序 外部程序是用C,C ,Java或其他语言编写的程序,编译并存储在数据库之外,然后由用户会话调用。例如,PL / SQL程序单元可以调用执行特殊用途处…

ssh登陆慢/xhell访问主机慢

用ssh连其他linux机器,会等待10-30秒才有提示输入密码。严重影响工作效率。登录很慢,登录上去后速度正常,这种情况主要有两种可能的原因: DNS反向解析的问题 OpenSSH在用户登录的时候会验证IP,它根据用户的IP使用反向…

围观神龙架构首次开箱,现场直播暴力拆机

围观神龙架构首次开箱,现场直播暴力拆机 发布时间:2018-05-16 13:43:01686人关注34人参与阿里云X-Dragon大事记2017年4月:阿里云X-Dragon项目立项;2017年10月:阿里云正式推出基于X-Dragon架构的弹性裸金属服务器&#…

windows-server-2012R2离线中文语言包安装

1、离线包下载地址http://download.csdn.net/detail/github_38358734/9858412 2、安装方法: 解压离线包 Dism /online /Add-Package /PackagePath:C:\test\LangPacks\lp.cab 大概10分钟,完成。 然后重启电脑,到控制面板语言区域选项&…

文字闪烁效果

效果图&#xff1a; HTML Code: <a class"blink" href"#" target"_blank"> 扁平化设计看上去非常简单、直观扁平化设计看上去非常简单、直去非化设计看上去非常简单、直观扁平化设计看上去非常简单、直观扁平常简单</a> JQuery Code…