首页 > 其他分享 >5、apache-kylin-3.1.3-bin-hadoop3 segment管理及JDBC操作

5、apache-kylin-3.1.3-bin-hadoop3 segment管理及JDBC操作

时间:2023-07-01 10:36:40浏览次数:44  
标签:bin JDBC kylin 28 合并 Cube 构建 Segment


apache-kylin-3.1.3-bin-hadoop3 系列文章

1、apache-kylin-3.1.3-bin-hadoop3介绍及部署、验证详解2、apache-kylin-3.1.3-bin-hadoop3集群部署
3、apache-kylin-3.1.3-bin-hadoop3基本操作(创建model和cube、数据查詢)
4、apache-kylin-3.1.3-bin-hadoop3增量构建、全量构建详细示例
5、apache-kylin-3.1.3-bin-hadoop3 segment管理及JDBC操作
6、apache-kylin-3.1.3-bin-hadoop3 cube优化方向及减少cuboids和降低膨胀率详细示例



文章目录

  • apache-kylin-3.1.3-bin-hadoop3 系列文章
  • 一、kylin的segment管理
  • 1、引子
  • 2、管理Cube碎片
  • 3、手动触发合并Segment
  • 1)、单击Action→Merge
  • 2)、选中需要合并的Segment,可以同时合并多个Segment,但是这些Segment必须是连续的
  • 4、自动合并Segment-Auto Merge Thresholds
  • 1)、Auto Merge Thresholds
  • 2)、示例:配置自动合并4天的Segment
  • 1、配置自动合并阈值为(4、28)
  • 2、分别按照天构建分区Cube
  • 3、自动触发合并Segment构建
  • 5、删除Segment
  • 1)、disable Cube
  • 2)、点击 delete Segment,删除指定的segment
  • 6、配置保留Segment-Retention Threshold
  • 1)、示例:配置保留Segment为2天,分别构建增量Segment,测试Segment保留情况
  • 1、在Cube中设置Retention Range为2
  • 2、重新构建Cube
  • 3、测试超过指定保留时间的Segment,是否被自动移除
  • 二、使用JDBC连接操作Kylin



本文简单的介绍了可以林的segment的产生原因以及如何进行自动或手动合并,并介绍了通过java api进行操作kylin的数据集。
本文依赖kylin环境好用。
本文分为2个部分,即kylin的segment管理以及通过java api操作kylin数据集。

一、kylin的segment管理

1、引子

随着时间越来越长增量构建的Cube中的Segment越来越多,该Cube的查询性能也会越来越慢,因为需要在单点的查询引擎中完成越来越多的运行时聚合。为了保持查询性能,需要定期将某些Segment合并在一起或者让Cube根据Segment保留策略自动地淘汰那些不会再被查询到的陈旧Segment。

2、管理Cube碎片

增量构建示例,每天都会生成一个Segment,对应就是HBase中的一张表。增量构建的Cube每天都可能会有新的增量,这样的Cube中最终可能包含成百上千甚至更多个Segment,这将会导致Kylin性能受到严重的影响。原因如下:

  • 从执行引擎的角度来说,运行时的查询引擎需要聚合多个Segment的结果才能返回正确的查询结果
  • 从存储引擎的角度来说,大量的Segment会带来大量的文件,给存储空间的多个模块带来巨大的压力,例如Zookeeper、HDFS Namenode等
    基于上述情况,kylin提供了管理Cube中Segment数量的措施-合并Segments(手工合并或自动合并)。

3、手动触发合并Segment

在Web GUI中选中需要进行Segments合并的Cube,操作步骤如下。

1)、单击Action→Merge

5、apache-kylin-3.1.3-bin-hadoop3 segment管理及JDBC操作_kylin java api

2)、选中需要合并的Segment,可以同时合并多个Segment,但是这些Segment必须是连续的

单击提交后系统会提交一个类型为“MERGE”的构建任务,它以选中的Segment中的数据作为输入,将这些Segment的数据合并封装成为一个新的Segment。新的Segment的起始时间为选中的最早的Segment的起始时间,它的结束时间为选中的最晚的Segment的结束时间。

5、apache-kylin-3.1.3-bin-hadoop3 segment管理及JDBC操作_kylin java api_02


5、apache-kylin-3.1.3-bin-hadoop3 segment管理及JDBC操作_kylin java api_03


注意

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

4、自动合并Segment-Auto Merge Thresholds

在Cube Designer的“Refresh Settings”的页面中有Auto Merge Thresholds 和 Retention Threshold

5、apache-kylin-3.1.3-bin-hadoop3 segment管理及JDBC操作_kylin_04


两个设置项可以用来帮助管理Segment碎片。这两项设置搭配使用这两项设置可以大大减少对Segment进行管理的不便。

1)、Auto Merge Thresholds

  • 允许用户设置几个层级的时间阈值,层级越靠后时间阈值就越大
  • 每当Cube中有新的Segment状态变为 READY的时候,会自动触发一次系统自动合并
  • 合并策略,尝试最大一级的时间阈值,例如:针对(7天、28天)层级的日志,先检查能否将连续的若干个Segment合并成为一个超过28天的大Segment。如果有个别的Segment的时间长度本身已经超过28天,系统会跳过Segment;如果满足条件的连续Segment还不能够累积超过28天,那么系统会使用下一个层级的时间阈值重复寻找。

示例1 - 理解Kylin自动合并策略
假设自动合并阈值设置为7天、28天
如果现在有A-H8个连续的Segment,它们的时间长度为28天(A)、7天(B)、1天(C)、1天(D)、1天(E)、1天(F)、1天(G)、1天(H)
此时,第9个Segment I加入,时间长度为1天。
自动合并策略为:

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

2)、示例:配置自动合并4天的Segment

操作步骤:

1、配置自动合并阈值为(4、28)

5、apache-kylin-3.1.3-bin-hadoop3 segment管理及JDBC操作_apache kylin_05

2、分别按照天构建分区Cube
3、自动触发合并Segment构建

5、apache-kylin-3.1.3-bin-hadoop3 segment管理及JDBC操作_java_06

5、删除Segment

  • 使用WebUI删除Cube的segment

1)、disable Cube

5、apache-kylin-3.1.3-bin-hadoop3 segment管理及JDBC操作_java_07

2)、点击 delete Segment,删除指定的segment

5、apache-kylin-3.1.3-bin-hadoop3 segment管理及JDBC操作_java_08


5、apache-kylin-3.1.3-bin-hadoop3 segment管理及JDBC操作_kylin_09


5、apache-kylin-3.1.3-bin-hadoop3 segment管理及JDBC操作_segment管理_10


然后针对cuble进行 enable 即可。

  • 使用Postman发送请求删除Segment
    针对cube需要先disable,然后才能进行删除,否则会报如下异常。
"exception": "Cannot delete segment '20191011000000_20191015000000' from ready cube 'cube_order_dim_date'. Please disable the cube first.",

5、apache-kylin-3.1.3-bin-hadoop3 segment管理及JDBC操作_java_11


5、apache-kylin-3.1.3-bin-hadoop3 segment管理及JDBC操作_java_12


5、apache-kylin-3.1.3-bin-hadoop3 segment管理及JDBC操作_kylin_13

6、配置保留Segment-Retention Threshold

自动合并是将多个Segment合并为一个Segment,以达到清理碎片的目的。保留Segment则是及时清理不再使用的Segment。
该功能是为了满足过去一段时间的数据不再使用的情况。例如:

  • 对于某个只显示过去1年数据的报表
  • 支撑它的Cube其实只需要保留过去一年类的Segment即可
  • 由于数据在Hive中已经存在备份,则无需在Kylin中备份超过一年的历史数据
    可以将Retention Threshold设置为365。每当有新的Segment状态变为READY的时候,系统会检查每一个Segment。如果它的结束时间距离最晚的一个Segment的结束时间已经大于等于“Retention Threshold”,那么这个Segment将被视为无需保留。系统会自动地从Cube中删除这个Segment。图示如下:

1)、示例:配置保留Segment为2天,分别构建增量Segment,测试Segment保留情况

操作步骤:

1、在Cube中设置Retention Range为2

在Cube中设置Retention Range为2

5、apache-kylin-3.1.3-bin-hadoop3 segment管理及JDBC操作_java_14

2、重新构建Cube

重新构建segmnt,即对cube进行build。构建超过2天的数据,看是保留几天的segmnt。

3、测试超过指定保留时间的Segment,是否被自动移除

5、apache-kylin-3.1.3-bin-hadoop3 segment管理及JDBC操作_kylin java api_15


实际上是有4个segmnt

5、apache-kylin-3.1.3-bin-hadoop3 segment管理及JDBC操作_apache kylin_16


最终只保留2个segment

二、使用JDBC连接操作Kylin

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

# jdbc url
jdbc:kylin://serv4:7070/test
# 用户名密码
ADMIN/KYLIN

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

<!-- Kylin -->
<dependency>
    <groupId>org.apache.kylin</groupId>
    <artifactId>kylin-jdbc</artifactId>
    <version>2.6.3</version>
</dependency>
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>27.1-jre</version>
</dependency>
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

  
public class App {
    public static void main(String[] args) throws Exception {
        // 1、加载驱动
        Class.forName("org.apache.kylin.jdbc.Driver");
        // 2、创建Connection连接对象
        // 连接字符串:jdbc:kylin://ip地址:7070/项目名称(project)
        Connection connection = DriverManager.getConnection("jdbc:kylin://server4:7070/test", "ADMIN", "KYLIN");

        // 3、创建Statement对象,并执行executeQuery,获取ResultSet
        Statement statement = connection.createStatement();

        // 构建SQL和语句
        String sql = "select   t1.date1,   t2.regionname,   productname,   sum(t1.price) as total_money,   sum(t1.amount) as total_amount  from   dw_sales t1 "
                + "inner join dim_region t2 on t1.regionid = t2.regionid inner join dim_product t3  on t1.productid = t3.productid group by   t1.date1,   t2.regionid,   t2.regionname,   t3.productid,   t3.productname";
        ResultSet resultSet = statement.executeQuery(sql);

        // 4、打印ResultSet
        while (resultSet.next()) {
            // 4.1 获取时间
            String date1 = resultSet.getString("date1");
            // 4.2 获取区域名称
            String regionname = resultSet.getString("regionname");
            // 4.3 获取产品名称
            String productname = resultSet.getString("productname");
            // 4.4 总金额
            String total_money = resultSet.getString("total_money");
            // 4.5 总数量
            String total_amount = resultSet.getString("total_amount");

            System.out.println(date1 + " " + regionname + " " + productname + " " + total_money + " " + total_amount);
        }

        connection.close();
    }
}

运行结果

5、apache-kylin-3.1.3-bin-hadoop3 segment管理及JDBC操作_kylin_17


以上,简单的介绍了可以林的segment的产生原因以及如何进行自动或手动合并,并介绍了通过java api进行操作kylin的数据集。




标签:bin,JDBC,kylin,28,合并,Cube,构建,Segment
From: https://blog.51cto.com/alanchan2win/6598249

相关文章

  • Arrangement排列•Combination组合•Counting计数•Binomial Theorem二项式定理
    符号C-Combination组合数[1]A-Arrangement(旧教材为P-Permutation)N-Number元素的总个数(自然数集合).M-参与选择的元素个数(M不大于N,两者都是自然数集合).!-Factorial阶乘.Arrangement排列与Combination组合:注意:n,m都是自然数,且m<=n,下同.排列的定义:从n......
  • Maximum Depth of Binary Tree
    Giventherootofabinarytree,returnitsmaximumdepth.Abinarytree'smaximumdepth isthenumberofnodesalongthelongestpathfromtherootnodedowntothefarthestleafnode.Solution:classSolution(object):defmaxDepth(self,root):......
  • Doris 1.2.0 JDBC外表 及 Mutil Catalog
    环境doris需要版本1.2以上jar包根据不同的数据源需要不同的jar包https://mvnrepository.com/a.MySQLmysql-connector-java-5.1.47.jarb.PostgreSQLpostgresql-42.5.1.jarc.Oracleojdbc8.jard.Clickhouseclickhouse-jdbc-0.3.2-patch11......
  • Bing访问问题
    访问www.bing.com,但是问问题的时候报错:Sorry,lookslikeyournetworksettingsarepreventingaccesstothisfeatureheader-editor插件的安装与请求头的配置按照上面步骤安装并配置好即可访问......
  • 离线安装mysql报错解决方法:/usr/sbin/mysqld: error while loading shared libraries:
    Linux:centos7.664位mysql:5.6使用离线方式安装:rpm-ivh--nodepsmysql*,执行systemctlstartmysqld.service发现启动不了,通过vi/var/log/mysql.log看到如下关键字:libraries:libaio.so.1,之前也是按照网上帖子各种修改都没有解决问题,详细报错如下:/usr/sbin/mysqld:error......
  • bind:success 但是无法执行下面的操作
    perror:success但是无法执行后续操作intsockfd=socket(AF_INET,SOCK_STREAM,0); if(sockfd<0) { perror("socketerr"); return-1; } structsockaddr_insaddr; saddr.sin_family=AF_INET; saddr.sin_port=htons(atoi(argv[2])); saddr.sin_addr.s_......
  • jdbc
    1.jdbc的定义:java连接数据库进行数据的传递和交互2.为什么需要jdbc:利用jdbc才可以使服务器端和数据库进行数据的传递和交互jdbc场景1:客户端==>(本机+应用服务器)jdbc==》数据库jdbc场景2:本机==》访问==》应用程序==》jdbc==》数据库《==jdbc3.jdbc的工作原理java连接数据库的步......
  • JDBC p1 JDBC概述
    JDBC概述基本介绍JDBC为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题。Java程序员使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作。JDBC的基本原理:JDBC带来的好处JDBC是Java提供的一套用于数据库操作的接口API,Java程......
  • postman中 form-data、x-www-form-urlencoded、raw、binary的区别
    1、form-data:           就是http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有Content-Type来说明文件类型;content-disposition,用来说明字段的一些信息;......
  • sql server jdbc
    驱动<dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>6.2.0.jre8</version></dependency>SSL连接出错[08S01]驱动程序无法通过使用安全套接字层(SSL)加密与SQLServer建立安全连接。错误:“......