大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(已更完)
  • Kudu(已更完)
  • Druid(已更完)
  • Kylin(正在更新…)

章节内容

上节我们完成了如下的内容:

  • 手动合并 Segment
  • 案例 1 Kylin 策略
  • 案例 2 自动合并
  • JDBC 连接 Kylin

在这里插入图片描述

Cuboid剪枝优化

Cuboid 特指 Kylin 中在某一种维度组合下所计算的所有数据,以减少Cuboid数量为目的的优化统称为Cuboid剪枝。
在没有采取任何优化措施的情况下,Kylin会对每一种维度的组合进行预计算。

  • 如果有4个维度,可能最终会有 2^4 = 16个 Cuboid需要计算
  • 如果有10个维度,那么没有经过任何优化的Cube就存在2^10 = 1024个Cuboid
  • 如果有20个维度,那么Cube中总共会存在2^20 = 1048576个Cuboid
    过多的Cuboid数量对构建引擎、存储引擎压力是非常巨大的,因此,在构建维度数量较多的Cube时候,尤其要注意Cube的剪枝优化。

Cube的剪枝优化是一种试图减少额外空间占用的方法,这种方法的前提是不会明显影响查询时间,在做剪枝优化的时候:

  • 需要选择跳过那些多余的Cuboid
  • 有的Cuboid因为查询样式的原因永远不会被查询到,因此显得多余
  • 有的Cuboid的能力和其他Cuboid接近,因此显得多余

Kylin提供了一系列简单的工具来帮助他们完成Cube的剪枝优化。

检查Cuboid数量

ApacheKylin 提供了一个简单的工具,检查Cube中哪些Cuboid最终被预计算了,称这些Cuboid被物化的Cuboid,该工具还能给出每个Cuboid所占空间的估计值。由于该工具需要在对数据进行一定阶段的处理之后才能估算Cuboid的大小,一般来说在Cube构建完毕之后再使用该工具。

使用如下的命令行工具去检查这个Cube中的Cuboid状态:

# 我要查看 wzk_kylin_test_cube_4
kylin.sh org.apache.kylin.engine.mr.common.CubeStatsReader wzk_kylin_test_cube_4

执行之后的结果如下图所示:
在这里插入图片描述
具体的Cube信息如下所示:

Cube statistics hll precision: 14
Total cuboids: 15
Total estimated rows: 213
Total estimated size(MB): 0.002885580062866211
Sampling percentage:  100
Mapper overlap ratio: 1.0
Mapper number: 1
Length of dimension WZK_KYLIN.DW_SALES1.DT is 1
Length of dimension WZK_KYLIN.DW_SALES1.PRODUCTID is 1
Length of dimension WZK_KYLIN.DW_SALES1.CHANNELID is 1
Length of dimension WZK_KYLIN.DW_SALES1.REGIONID is 1
|---- Cuboid 1111, est row: 47, est MB: 0|---- Cuboid 0111, est row: 47, est MB: 0, shrink: 100%|---- Cuboid 0011, est row: 16, est MB: 0, shrink: 34.04%|---- Cuboid 0001, est row: 4, est MB: 0, shrink: 25%|---- Cuboid 0010, est row: 4, est MB: 0, shrink: 25%|---- Cuboid 0101, est row: 15, est MB: 0, shrink: 31.91%|---- Cuboid 0100, est row: 4, est MB: 0, shrink: 26.67%|---- Cuboid 0110, est row: 16, est MB: 0, shrink: 34.04%|---- Cuboid 1011, est row: 16, est MB: 0, shrink: 34.04%|---- Cuboid 1001, est row: 4, est MB: 0, shrink: 25%|---- Cuboid 1000, est row: 1, est MB: 0, shrink: 25%|---- Cuboid 1010, est row: 4, est MB: 0, shrink: 25%|---- Cuboid 1101, est row: 15, est MB: 0, shrink: 31.91%|---- Cuboid 1100, est row: 4, est MB: 0, shrink: 26.67%|---- Cuboid 1110, est row: 16, est MB: 0, shrink: 34.04%
----------------------------------------------------------------------------
============================================================================
Statistics of wzk_kylin_test_cube_4[20240102000000_20240104000000]Cube statistics hll precision: 14
Total cuboids: 15
Total estimated rows: 160
Total estimated size(MB): 0.00215911865234375
Sampling percentage:  100
Mapper overlap ratio: 0.0
Mapper number: 0
Length of dimension WZK_KYLIN.DW_SALES1.DT is 1
Length of dimension WZK_KYLIN.DW_SALES1.PRODUCTID is 1
Length of dimension WZK_KYLIN.DW_SALES1.CHANNELID is 1
Length of dimension WZK_KYLIN.DW_SALES1.REGIONID is 1
|---- Cuboid 1111, est row: 22, est MB: 0|---- Cuboid 0111, est row: 21, est MB: 0, shrink: 95.45%|---- Cuboid 0011, est row: 12, est MB: 0, shrink: 57.14%|---- Cuboid 0001, est row: 4, est MB: 0, shrink: 33.33%|---- Cuboid 0010, est row: 4, est MB: 0, shrink: 33.33%|---- Cuboid 0101, est row: 13, est MB: 0, shrink: 61.9%|---- Cuboid 0100, est row: 4, est MB: 0, shrink: 30.77%|---- Cuboid 0110, est row: 13, est MB: 0, shrink: 61.9%|---- Cuboid 1011, est row: 14, est MB: 0, shrink: 63.64%|---- Cuboid 1001, est row: 6, est MB: 0, shrink: 42.86%|---- Cuboid 1000, est row: 2, est MB: 0, shrink: 33.33%|---- Cuboid 1010, est row: 7, est MB: 0, shrink: 50%|---- Cuboid 1101, est row: 16, est MB: 0, shrink: 72.73%|---- Cuboid 1100, est row: 7, est MB: 0, shrink: 43.75%|---- Cuboid 1110, est row: 15, est MB: 0, shrink: 68.18%

对应的截图如下图:
在这里插入图片描述

  • 估计Cuboid大小的精度(HII Precision)
  • 总共的Cuboid数量
  • Segment 的总行数估计
  • Segment的大小估计,Segment的大小决定Mapper、Reducer的数量、数据分片数量等
  • 所有的Cuboid及它的分析结果都以树状的形式打印了出来
  • 在这颗树上,每个节点代表一个Cuboid,每个Cuboid都由一连串1和0的数字组成
  • 数字串的长度等于有效维护度的数量,从左到右每个数字依次代表RowKeys设置中的各个维度,如果数字为0,则代表这个Cuboid中不存在相应的维度,如果数字为1,则代表这个Cuboid中存在相应的维度
  • 除了最顶端的Cuboid之外,每个Cuboid都有一个父亲Cuboid,且都比父亲Cuboid少了一个“1”,其意义是这个Cuboid就是由它的父亲节点减少一个维度聚合而来的(上卷)
  • 最顶端的Cuboid成为Base Cuboid,它直接由源数据计算而来,Base Cuboid的具体信息,包括该Cuboid的输出中除了0和1的数字串以外,后面还有每个Cuboid的具体信息,包括该Cuboid行数的估计值、该Cuboid大小的估计值,以及这个Cuboid的行数与父亲节点的对比(Shrink值)
  • 所有Cuboid行数的估计值之和应该等于Segment的行数估计值,所有Cuboid的大小估计值应该等于该Segment的大小估计值,每个Cuboid都是在它的父亲节点的基础上进一步聚合而成的

检查Cube大小

在WebGUI的Model页面选择一个READ状态为Cube,光标移动到该Cube的CubeSize列时,WebGUI会提示Cube的源数据大小,以及当前Cube的大小除以数据源大小的比例,称为膨胀率(Expansion Rate)。

我们可以在页面上看到Cube的大小信息,如下图所示:
在这里插入图片描述
一般来说,Cube的膨胀率应该在0%-1000%之间,如果一个Cube的膨胀率超过1000%,那么应该查找当中的原因,膨胀率高可能有以下几个方面的原因:

  • Cube中的维度数量较多,且没有进行很好的Cuboid剪枝优化,导致Cuboid数量极多
  • Cube中存在较高基数的维度(基数的维度是指维度中有多少个不同的值),导致包含这类维度的每个Cuboid占用的空间都很大,这些Cuboid累积造成整体Cube体积变大。
  • 存在占用空间大的度量,例如Count Distinct,因此需要Cuboid的每一行中都为其保存了一个较大度量数据,最坏的情况会导致Cuboid中每一行都有数十KB,从而造成整个Cube的体积变大

对于Cube的膨胀率居高不下的情况,需要结合实际数据进行分析,优化。

使用衍生维度

一个维度可以是普通维度或者衍生维度(Derived)
将维度表的维度设置为衍生维度,这个维度不会参与计算,而是使用维度表的主键(或事实表的外键)来替代它。
Kylin会在底层记录维表主键与其他维度之间的映射关系,以便在查询时能够动态的将维度表的主键翻译成这些非主键维度,并进行实时聚合。
创建Cube的时候,这些维度如果指定为衍生维度,Kylin将会排除这些维度,而是使用维度表的主键来代替它们创建Cuboid,后续查询的时候,再基于主键的聚合结果,在进行一次聚合。
使用衍生角度会有效减少Cube中的Cuboid数量,但在查询的时候会增加聚合的时间。

不适合的场景:

  • 如果从维度表主键到某个维度表所需要的聚合工作量非常大,此时作为一个普通的维度表聚合更合适,否则会影响Kylin的查询性能。

案例1-定义衍生维度及对比

基本介绍

有以下时间日期维表:
在这里插入图片描述

编写 SQL

-- 建表
drop table wzk_kylin.dim_date;
create table wzk_kylin.dim_date(
dateid string,
dayofyear string,
dayofmonth string,
day_in_year string,
day_in_month string,
weekday string,
week_in_month string,
week_in_year string,
date_type string,
quarter string
)ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';-- 加载数据
LOAD DATA LOCAL INPATH 'dim_date.txt' OVERWRITE
INTO TABLE wzk_kylin.dim_date;

备注信息:
日期维度代表 dim_date中两个字段,dayofyear、dayofmonth、不能是year、month。

测试数据

dim_date里,少放几条数据(机器太弱了跑不动):

2024-01-01,2024,01,001,01,1,1,01,workday,Q1
2024-01-02,2024,01,002,02,2,1,01,workday,Q1
2024-01-03,2024,01,003,03,3,1,01,workday,Q1
2024-01-04,2024,01,004,04,4,1,01,workday,Q1

上传数据

cd /opt/wzk/kylin_test
vim dim_date.txt

写入如下的数据:
在这里插入图片描述

cd /opt/wzk/kylin_test
vim dim_date.sql

写入的数据如下图所示:
在这里插入图片描述
执行如下的脚本:

cd /opt/wzk/kylin_test
hive -f dim_date.sql

执行结果如下图所示:
在这里插入图片描述

Cube设计

在这里插入图片描述
对应的SQL:

select dim_date.dayofyear, sum(price)
from lagou_kylin.dw_sales join lagou_kylin.dim_date ondw_sales.date1 = dim_date.dateid
group by dim_date.dayofyear;

基本的执行流程如:
创建项目 - 指定数据源 - 定义Model- 定义Cube - 查询

加载数据源

之前已经操作过很多次了,这里就简单一些写了,添加日期维度表:
在这里插入图片描述
创建Model,wzk_test_model_5,选择如下的连表关系:
在这里插入图片描述

维度按照按照如下图的配置进行:
在这里插入图片描述
度量还是按原来的:
在这里插入图片描述
剩下的部分默认即可。

构建Cube

我们分别构建刚才创建的两个Cube:
在这里插入图片描述

构建结果

构建的结果如下图所示:

wzk_test_kylin_cube_5

在这里插入图片描述

wzk_test_kylin_cube_5_2

在这里插入图片描述

检查Cube的Cuboid数量

我们刚才创建了两个Cube如下图所示:
在这里插入图片描述

wzk_test_kylin_cube_5

查看 wzk_test_kylin_cube_5:

kylin.sh org.apache.kylin.engine.mr.common.CubeStatsReader wzk_kylin_test_cube_5

查询结构如下:

============================================================================
Statistics of wzk_kylin_test_cube_5[FULL_BUILD]Cube statistics hll precision: 14
Total cuboids: 2047
Total estimated rows: 7999
Total estimated size(MB): 0.03921151161193848
Sampling percentage:  100
Mapper overlap ratio: 1.0
Mapper number: 1
Length of dimension WZK_KYLIN.DW_SALES.DATE1 is 1
Length of dimension WZK_KYLIN.DIM_DATE.DATEID is 1
Length of dimension WZK_KYLIN.DIM_DATE.DAYOFYEAR is 1
Length of dimension WZK_KYLIN.DIM_DATE.DAYOFMONTH is 1
Length of dimension WZK_KYLIN.DIM_DATE.DAY_IN_YEAR is 1
Length of dimension WZK_KYLIN.DIM_DATE.DAY_IN_MONTH is 1
Length of dimension WZK_KYLIN.DIM_DATE.WEEKDAY is 1
Length of dimension WZK_KYLIN.DIM_DATE.WEEK_IN_MONTH is 1
Length of dimension WZK_KYLIN.DIM_DATE.WEEK_IN_YEAR is 1
Length of dimension WZK_KYLIN.DIM_DATE.DATE_TYPE is 1
Length of dimension WZK_KYLIN.DIM_DATE.QUARTER is 1
|---- Cuboid 11111111111, est row: 4, est MB: 0|---- Cuboid 00110001111, est row: 1, est MB: 0, shrink: 25%
----------------------------------------------------------------------------
2024-08-10 16:46:06,454 INFO  [close-hbase-conn] hbase.HBaseConnection:137 : Closing HBase connections...
2024-08-10 16:46:06,454 INFO  [close-hbase-conn] client.ConnectionManager$HConnectionImplementation:2155 : Closing master protocol: MasterService
2024-08-10 16:46:06,456 INFO  [close-hbase-conn] client.ConnectionManager$HConnectionImplementation:1712 : Closing zookeeper sessionid=0x200dd291db1003c
2024-08-10 16:46:06,467 INFO  [main-EventThread] zookeeper.ClientCnxn:512 : EventThread shut down
2024-08-10 16:46:06,467 INFO  [close-hbase-conn] zookeeper.ZooKeeper:684 : Session: 0x200dd291db1003c closed
root@h122:~# 

对应的截图如下所示:
在这里插入图片描述

wzk_test_kylin_cube_5_2

查看 wzk_test_kylin_cube_5_2:

kylin.sh org.apache.kylin.engine.mr.common.CubeStatsReader wzk_test_kylin_cube_5_2

查询结果如下:
在这里插入图片描述

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

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

相关文章

Blazor Web APP学习记录

目录 1 呈现模式1.1 静态SSR1.2 服务器端交互SSR1.3 客户端交互CSR1.4 自动交互式1.5 注意 2 Blazor Web APP项目3 会话状态3.1 Blazor Server会话状态保存3.2 Blazor WebAssembly 会话状态保存 1 呈现模式 参见:https://learn.microsoft.com/zh-cn/aspnet/core/bl…

Golang | Leetcode Golang题解之第474题一和零

题目: 题解: func findMaxForm(strs []string, m, n int) int {dp : make([][]int, m1)for i : range dp {dp[i] make([]int, n1)}for _, s : range strs {zeros : strings.Count(s, "0")ones : len(s) - zerosfor j : m; j > zeros; j--…

点评项目-7-缓存击穿的两种解决方案、缓存工具类的编写

缓存击穿 在高并发访问的访问中,对于复杂业务 key 的缓存,可能会在缓存生效前打入大量的请求,导致大量的请求打到数据库 解决方案: 1.互斥锁,给缓存的构建过程加上一个锁,当拿到锁时才进行下一步&#x…

【Boss直聘-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞 …

线性自抗扰控制(LADRC)系统算法框图

非线性ADRC(NLADRC)详细算法框图和源代码请参考专栏系列文章,常用链接如下: 1、NLADRC自抗扰控制 NLADRC自抗扰控制从Simulink仿真到PLC控制实现_自抗扰控制器 simulink仿真-CSDN博客文章浏览阅读1.6k次,点赞2次,收藏7次。本文介绍了如何将ADRC自抗扰控制算法从Simulink…

牛只行为及种类识别数据集18g牛只数据,适用于多种图像识别,目标检测,区域入侵检测等算法作为数据集。数据集中包括牛只行走,站立,进食,饮水等不同类型的数据

18g牛只数据,适用于多种图像识别,目标检测,区域入侵检测等算法作为数据集。 数据集中包括牛只行走,站立,进食,饮水等不同类型的数据,可以用于行为检测 数据集中包含多种不同种类的牛只&#xff…

【MATLAB源码-第249期】基于matlab的信道量化反馈的预编码仿真,采用均匀量化方式和LDL分解的预编码。

操作环境: MATLAB 2022a 1、算法描述 基于信道量化反馈的预编码技术是当今无线通信系统中的一个核心研究方向。随着多输入多输出(MIMO)系统的广泛应用,如何有效地利用信道状态信息(CSI)进行预编码成为提…

用自己的数据集复现YOLOv5

yolov5已经出了很多版本了,这里我以目前最新的版本为例,先在官网下载源码:GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite 然后下载预训练模型,需要哪个就点击哪个模型就行&am…

统一时序预测模型,上下文长度首次扩展至千级别!!!

统一时序预测模型,上下文长度首次扩展至千级别,适用各类数据集! 今天给大家介绍一篇清华大学的时间序列预测最新工作,提出了统一的Transformer时序预测模型,能同时处理单变量和多变量时序预测,并将时序预测…

PPT分享:埃森哲-如何利用大数据进行数据挖掘与分析

PPT下载链接见文末~ 在当今信息爆炸的时代,大数据已成为企业决策、科学研究及社会发展的重要驱动力。数据挖掘与分析作为大数据应用的核心环节,能够帮助我们从海量数据中提取有价值的信息和知识。 本文将引导您了解如何利用大数据进行数据挖掘与分析&a…

Android从上帝视角来看PackageManagerService

戳蓝字“牛晓伟”关注我哦! 用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章,技术文章也可以有温度。 前言 阅读该篇之前,建议先阅读下面的系列文章: Android深入理解包管理–PackageManagerService和它的“小伙伴…

苹果正式宣布:iPhone全面开放近场通信(Near Field Communication,简称NFC)【使用安全元件提供app内NFC数据交换功能】

文章目录 引言I iPhone的NFC功能开发者用户数据交换的体验革新安全与隐私II 知识扩展:近场通信(NFC)技术钱包NFC开关打开读取NFC标签(NFC tags )权限demo引言 2014年iPhone 6开始,苹果首次引入了NFC功能,但最初只允许自家的Apple Pay进行移动支付。慢慢地适配了交通卡,增…

【CSS】纯css3螺旋状loading加载特效

效果图 <div class"ai-loader"><div class"dot"></div><div class"dot"></div><div class"dot"></div><div class"dot"></div><div class"dot">&…

【AI知识点】三种不同架构的大语言模型(LLMs)的区别

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】 在自然语言处理&#xff08;NLP&#xff09;中&#xff0c;预训练语言模型&#xff08;LLMs, Large Language Models&#xff09;通常基于不同的架构&#xff0c;如仅编码器的模型&#xff08;Encoder-only&#xff09;、…

量子计算机的原理与物理实现

量子计算机的原理与物理实现很复杂 指导性原则 首先思考制备一台量子计算机需要些什么&#xff1f; 需要量子比特——二能级量子系统。除了量子计算机需要满足一些物理特性&#xff0c;它还必须要把量子比特绘制到某种初态上&#xff0c;以及测量系统的输出态。 而实验上的挑战…

基于SSM+微信小程序的实验室设备故障报修管理系统2

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序的实验室设备故障报修管理系统2实现了管理员&#xff0c;用户&#xff0c;维修员三个角色。 管理员功能有 个人中心&#xff0c;用户管理&#xff0c;维修员管理&#…

[网络基础]——ICMP(互联网控制消息协议)协议介绍

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;网络通信基础TCP/IP专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年10月15日8点23分 在现代网络通信中&#xff0c;互联网控制消息协议&#xff08;ICMP&#xff09;扮演着至关重要的角色…

使用Go语言的gorm框架查询数据库并分页导出到Excel实例

文章目录 基本配置配置文件管理命令行工具: Cobra快速入门基本用法 生成mock数据SQL准备gorm自动生成结构体代码生成mock数据 查询数据导出Excel使用 excelize实现思路完整代码参考 入口文件效果演示分页导出多个Excel文件合并为一个完整的Excel文件 完整代码 基本配置 配置文…

Java项目实战II基于Spring Boot的问卷调查系统的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 基于Spring…

第十三章 RabbitMQ之消息幂等性

目录 一、引言 二、消息幂等解决方案 2.1. 方案一 2.2. 方案二 一、引言 幂等是一个数学概念&#xff0c;用函数表达式来描述是这样的&#xff1a;f(x) f(f(x)) 。在程序开发中&#xff0c;则是指同一个业务&#xff0c;执行一次或多次对业务状态的影响是一致的。有些业务…