当前位置: 首页 > news >正文

大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala

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

目前已经更新到了:

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

章节内容

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

  • 全量增量Cube的构建
  • Segment

在这里插入图片描述

基本流程

在 Apache Kylin 中,手动触发 Segment 合并的步骤如下:

  • 选择要合并的 Cube 和 Segments: 进入 Kylin Web UI,选择你要操作的 Cube,进入该 Cube 的详情页面。在“Segments”标签页下,可以看到当前 Cube 的所有 Segments。选择你希望合并的 Segments。

  • 合并 Segments: 点击页面上的 “Merge Segment” 按钮。通常情况下,Kylin 会自动计算可以合并的 Segments。如果你想手动控制合并的 Segments,可以在弹出的对话框中手动选择你想合并的 Segments。

  • 配置合并任务: 配置合并任务的参数,如目标时间范围等。Kylin 会根据你选择的 Segments 的范围自动填充一些默认的值。你可以根据需求调整这些参数。

  • 启动合并任务: 完成配置后,点击 “Submit” 按钮。Kylin 将会创建一个新的合并任务(Job),该任务将在后台执行。你可以在 “Job” 页面查看任务的执行状态。

  • 监控任务状态: 在 “Job” 页面,你可以查看合并任务的日志和状态。如果任务执行成功,你会看到新的 Segment 出现在 Segments 列表中,表示合并已经完成。

  • 如果合并成功,新的合并后 Segment 会替代原来的多个 Segments,而旧的 Segments 将被 Kylin 自动清理。

需要注意的是,手动合并的操作可能会占用大量资源,因此在高负载时需要谨慎操作,并在合适的时间段执行合并任务。

手动触发合并Segment

Kylin提供了一种简单的机制用于控制Cube中Segment的数量:合并Segment,在WebGUI中选中需要进行Segments合并的Cube。

单击Action => Merge

我们刚才分阶段进行了任务的Build操作,
01-01、01-02、01-03、01-04 的任务,我们可以使用 Merge 来进行合并:

在这里插入图片描述

选中需要合并的Segment,可以同时合并多个Segment,但这些Segment必须是连续的,单击提交系统会提交一个类型为 MERGE 的构建任务,这里可以选择时间阶段,我选择的是 01-03到01-04:
在这里插入图片描述

提交任务,可以看到是一个 Merge任务,看名字:【MERGE】,等待合并完毕:
在这里插入图片描述
合并完毕的结果如下图:
在这里插入图片描述

注意事项

  • 在MERGE构建结束之前,所有选中用来合并的Segment仍然处于可用的状态
  • 在MERGE类型的构建完成之前,系统将不允许提交这个Cube上任何类型的其他构建任务
  • 当MERGE构建结束的时候,系统将选中合并的Segment替换为新的Segment,而被替换下的Segment等待将被垃圾回收和清理,以节省系统资源

删除Segment

使用WebUI删除Cube的Segment,
这里选择 Disable 就可以删除Segment了:

在这里插入图片描述
Disable之后,可以看到下面的:DeleteSegment操作,就可以删除指定的Segment了:
在这里插入图片描述

自动合并

手动维护Segment很繁琐,人工成本高,Kylin中是可以支持自动合并Segment。
在Cube Designer的 Refresh Settings的页面中有:

  • Auto Merge Thresholds
  • Retention Thresholds

Refresh Settings的页面:
在这里插入图片描述
两个设置项可以用来帮助管理Segment碎片,这两项设置搭配使用这两项设置可以大大减少对Segment进行管理的麻烦。

Auto Merge Thresholds

  • 允许用户设置几个层级的时间阈值,层级越靠后,时间阈值越大
  • 每当Cube中有新的Segment状态变为READY的时候,就会自动触发一次系统自动合并

合并策略

  • 尝试最大一级的时间阈值,例如:针对(7天、28天)层级的日志,先检查能够将连续的若干个Segment合并成为一个超过28天的大Segment
  • 如果有个别的Segment的事件长度本身已经超过28天,系统会跳过Segment
  • 如果满足条件的连续Segment还不能够累积超过28天,那么系统会使用下一个层级的时间戳重复寻找

案例1 理解Kylin自动合并策略

  • 假设自动合并阈值设置为7天、28天
  • 如果现在有A-H 8个连续的Segment,它们的时间长度为28天(A)、7天(B)、1天(C)、一天(D)、一天(E)、一天(F)、一天(G)、一天(H)
  • 此时,第9个Segment加入,时间长度为1天

自动合并的策略为:

  • Kylin判断时能够将连续的Segment合并到28天这个阈值,由于Segment A已经超过28天,会被排除。
  • 剩下的连续Segment,所有时间加一起 B+C+D+E+F+G+H+I < 28天,无法满足28天的阈值,则开始尝试7天的阈值
  • 跳过 A(28)、B(7)均超过7天,排除
  • 剩下的连续Segment,所有时间加在一起 C+D+E+F+G+H+I 达到7天的阈值,触发合并,提交Merge任务,并构建一个SegmentX(7天)
  • 合并后,Segment为:A(28天)、B(7天)、X(7天)
  • 连续触发检查,A(28天)跳过,B+X(7+7=14)< 28天,不满足第一阈值,重新使用第二阈值触发
  • 跳过B、X尝试终止

案例2 配置自动合并4天的Segment

选中Model,选择Edit进行编辑:
在这里插入图片描述
直接到Refresh Setting选项卡,将选项修改为,4天:
在这里插入图片描述
后续将自动进行Segment的构建。

配置保留的Segment

自动合并是将多个Segment合并为一个Segment,以达到清理碎片的目的,保留Segment则是及时清理不再使用的Segment。
在很多场景中,只会对过去一段时间内的数据进行查询,例如:

  • 对于某个只显示过去1年数据的报表
  • 支持它的Cube其实只需要保留过去一年类的Segment即可
  • 由于数据在Hive中已经存在备份,则不需在Kylin中备份超过一年的类似数据

可以将Retention Threshold设置为365,每当有新的Segment状态变为READY的时候,系统会检查每一个Segment。如果它的结束时间距离最晚的一个Segment的结束时间已经大于等于RetentionThreshold,那么这个Segment将视为无需保留,系统会自动从Cube中删除这个Segment。

保留策略示意图如下所示:
在这里插入图片描述

使用JDBC连接操作Kylin

简单介绍

  • 要将数据以可视化方式展示出来,需要使用Kylin的JDBC方式连接执行SQL,获取Kylin的执行结果
  • 使用Kylin的JDBC与JDBC操作MySQL一致

业务需求

通过JDBC的方式,查询按照日期、区域、产品维度统计订单总额/总数量结果

开发步骤

添加依赖

<dependency><groupId>org.apache.kylin</groupId><artifactId>kylin-jdbc</artifactId><version>3.1.1</version>
</dependency>

实现规划

  • 创建Connection连接对象
  • 构建SQL语句
  • 创建Statement对象,并执行executeQuery
  • 打印结果

编写代码

我这里用Scala实现了,Java也差不多

package icu.wzk.kylinimport java.sql.DriverManagerobject KylinJdbcTest {def main(args: Array[String]): Unit = {// 创建连接对象val connection = DriverManager.getConnection("jdbc:kylin://h122.wzk.icu:7070/wzk_test_kylin", "ADMIN", "KYLIN")// 创建Statementval statement = connection.createStatement();// 构建SQL语句var sql ="""|select| t1.dt,| t2.regionid,| t2.regionname,| t3.productid,| t3.productname,| sum(t1.price) as total_money,| sum(t1.amount) as total_amount|from| dw_sales1 t1|inner join dim_region t2|on t1.regionid = t2.regionid|inner join dim_product t3|on t1.productid = t3.productid|group by| t1.dt,| t2.regionid,| t2.regionname,| t3.productid,| t3.productname|order by| t1.dt,| t2.regionname,| t3.productname|""".stripMarginval resultSet = statement.executeQuery(sql)println("dt region product_name total_money total_amount")while (resultSet.next()) {// 获取时间val dt = resultSet.getString("dt")// 获取区域名称val regionName = resultSet.getString("regionname")// 获取产品名称val productName = resultSet.getString("productname")// 获取累计金额val totalMoney = resultSet.getDouble("total_money")// 获取累计数量val totalAmount = resultSet.getDouble("total_amount")println(f"$dt $regionName $productName $totalMoney $totalAmount")}connection.close()}}

测试运行

我们运行代码,可以看到如下的运行结果:
在这里插入图片描述

相关文章:

大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…...

云手机与传统手机的区别是什么?

随着科技的快速进步&#xff0c;云手机逐渐成为手机市场的热门选择。与传统的智能手机相比&#xff0c;云手机具有许多独特的功能和优势&#xff0c;尤其在多账号管理和高效操作方面备受关注。那么&#xff0c;云手机究竟与普通手机有哪些区别呢&#xff1f; 1. 更灵活的操作与…...

微知-Bluefield DPU命名规则各字段作用?BF2 BF3全系列命名大全

文章目录 背景字段命名C是bmc的意思NOT的N是是否加密S表示不加密但是secureboot enable倒数第四个都是E倒数第五个是速率 V和H是200GM表示E serials&#xff0c;H表示P serials&#xff08;区别参考兄弟篇&#xff1a;[more](https://blog.csdn.net/essencelite/article/detail…...

Ubuntu 上使用 Nginx 实现反向代理并启用 HTTPS(详细教程)

拒绝使用宝塔&#xff0c;虽然宝塔很好用方便&#xff0c;但是他非常占用资源&#xff0c;所以我正在尝试转换我使用服务器的方式&#xff0c;通过命令来才做这些&#xff0c;下面是我的详细步骤。 在这篇教程中&#xff0c;我们将详细介绍如何在 Ubuntu 系统上使用 Nginx 搭建…...

2. 继承Mono的单例模式基类

前提 继承MonoBehaviour的脚本不能new继承MonoBehaviour的脚本一定得依附在GameObject上 实现挂载式的单例模式基类 挂载式 继承Mono的单例模式基类 /// <summary> /// 挂载式 继承Mono的单例模式基类 /// </summary> /// <typeparam name"T">&…...

数据治理:制造企业转型的关键要素与战略需求

制造业&#xff0c;作为国民经济的主体&#xff0c;是立国之本、兴国之器、强国之基。从工业文明的曙光初现&#xff0c;到今日全球化的激烈竞争&#xff0c;始终昭示着一个真理&#xff1a;没有强大的制造业&#xff0c;就没有国家和民族的强盛。 为全面推进制造强国建设&…...

FastAPI 基本路由

FastAPI 基本路由 FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,与 Python 3.6+ 类型提示一起使用。在本文中,我们将探讨 FastAPI 的基本路由概念,包括如何定义路由、处理请求和响应,以及一些高级特性。 什么是路由? 在 Web 框架中,路由是指将传入的…...

Python库matplotlib之六

Python库matplotlib之六 动画FuncAnimation构造器成员函数应用例子 动画 Matplotlib基于其绘图功能&#xff0c;还提供了一个使用动画模块&#xff0c;生成动画的接口。动画是一系列帧&#xff0c;其中每个帧对应于图形上的一个图。 Matplotlib使用两个类来实现动画&#xff…...

十一、数据库的设计规范

文章目录 1. 为什么需要数据库设计2. 范式2.1 范式介绍2.2 范式都包括哪些2.3 键和相关属性的概念2.4 第一范式(1st NF)2.5 第二范式(2nd NF)2.6 第三范式(3rd NF)2.7 小结3. 反范式化3.1 概述3.2 应用举例3.3 反范式的新问题3.4 反范式的使用场景3.4.1 增加冗余字段的建议3.…...

这届物理与化学诺奖对S2AIAI4S的启示

物理学与AI看似神秘而又简洁的纠缠 随着今年诺贝尔物理学奖&#xff08;这篇还没来得及发&#xff0c;化学奖也...&#xff09;的颁布&#xff0c;不管是国内某圈还是国外某管&#xff0c;无论是学术界又或产业界&#xff0c;充斥着震惊又或是“物理学不存在了”之类的调侃&am…...

压力测试指南-云环境中的压力测试实践

云环境中的压力测试实践 1. 云环境对压力测试的影响​ 在数字化转型的浪潮中&#xff0c;云环境已成为软件部署与测试的首选。它不仅提供了无限的可扩展性&#xff0c;还极大地改变了我们进行压力测试的方式。传统本地环境中&#xff0c;硬件资源的限制常导致无法模拟真实世界…...

基于多密钥同态加密的安全高效的联邦学习

文章目录 摘要与简介部分1、联邦学习 FL2、同态加密 HE3、文章创新点 一、简介1、基于 HE 的 FLs2、离线问题3、计算开销4、该文章的工作5、文章的贡献点 二、背景和相关研究1、基于多方安全计算 (SMC) 的联邦学习 (FL)2、基于差分隐私 (DP) 的联邦学习 (FL)3、基于可信执行环境…...

R语言统计分析——气泡图

参考资料&#xff1a;R语言实战【第2版】 气泡图&#xff08;bubble plot&#xff09;用来展示三个定量变量间的关系&#xff1a;先创建一个二维散点图&#xff0c;然后用点的大小来代表第三个边变量的值。 我们可以使用symbols()函数来创建气泡图。该函数可以在指定的(x,y)坐标…...

实用篇—Navicat复制多条INSERT语句,去除ID列执行

在数据库管理中&#xff0c;常常需要将数据从一个表复制到另一个表。使用 Navicat 等工具可以方便地导出多条 INSERT 语句&#xff0c;但有时我们不需要某些列&#xff08;如 ID 列&#xff09;。本文将介绍如何在 Navicat 中复制多条 INSERT 语句&#xff0c;并去除 ID 列以便…...

pytorch中张量的有关操作

pytorch中张量的有关操作 创建张量torch.tensor(data): 从数据创建张量torch.zeros(size): 创建元素全为0的张量torch.ones(size): 创建元素全为1的张量torch.empty(size): 创建未初始化的张量torch.randn(size): 创建服从标准正态分布的张量torch.arange(start, end, step): 创…...

Windows多线程编程 互斥量和临界区使用

Windows 多线程编程允许程序同时运行多个线程&#xff0c;提高程序的并发性和执行效率。多线程编程中的核心概念包括线程的创建、同步、调度、数据共享和竞争条件等。本文详细介绍了 Windows 多线程编程的关键技术点&#xff0c;并解释如何使用线程同步机制来保证线程安全。 1…...

Java中集合类型的转换

在Java编程中&#xff0c;集合框架&#xff08;Collections Framework&#xff09;提供了一套用于存储和处理对象集合的接口和类。由于集合框架的灵活性和强大功能&#xff0c;我们经常需要在不同的集合类型之间进行转换。本文将介绍Java中常见的集合类型转换方法&#xff0c;包…...

汽车售后TPMS浅谈

汽车售后中的TPMS&#xff0c;即轮胎压力监测系统&#xff08;Tire Pressure Monitoring System&#xff09;&#xff0c;是一种重要的汽车安全系统。以下是对汽车售后TPMS的详细解释&#xff1a; 一、TPMS的作用 TPMS的主要作用是在汽车行驶过程中对轮胎气压进行实时自动监测…...

LUCEDA IPKISS Tutorial 77:在版图一定范围内填充dummy

案例分享&#xff1a;在给定的Shape内填充dummy 所有代码如下&#xff1a; from si_fab import all as pdk from ipkiss3 import all as i3 from shapely.geometry import Polygon, MultiPolygon import numpy as np import matplotlib.pyplot as pltclass CellFilledWithCon…...

TON生态小游戏开发:推广、经济模型与UI设计的建设指南

随着区块链技术的快速发展&#xff0c;基于区块链的Web3游戏正引领行业变革。而TON生态小游戏&#xff0c;借助Telegram庞大的用户基础和TON&#xff08;The Open Network&#xff09;链上技术&#xff0c;已成为这一领域的明星之一。国内外开发者正迅速涌入&#xff0c;开发和…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...