zl程序教程

您现在的位置是:首页 >  其它

当前栏目

Kylin 即席查询

查询 Kylin
2023-09-14 09:14:49 时间

Kylin简介

Apache Kylin 是一个开源的分布式分析引擎,提供 Hadoop / Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,能在亚秒内查询巨大的 Hive 表

Kylin架构

在这里插入图片描述

REST Server

REST Server是一套面向应用程序开发的入口点,对 Kylin 平台的应用开发工作。 提供查询、获取结果、触发 cube 构建任务、获取元数据以及获取用户权限等等。还可以通过 Restful 接口实现 SQL 查询

查询引擎(Query Engine)

cube 准备后,查询引擎就能够获取并解析用户查询。会与系统中的其它组件进行交互,从而向用户返回对应的结果

路由器(Routing)

将 Kylin 不能执行的查询引导去 Hive 中继续执行 , 查询的速度堪忧 , 路由功能在发行版中默认关闭

元数据管理工具(Metadata)

Kylin 是一款元数据驱动型应用程序。元数据管理工具是一大关键性组件,用于对保存在 Kylin 当中的所有元数据进行管理,如 : cube 元数据。其它组件的正常运作都以元数据管理工具为基础

Kylin 的元数据存储在 Hbase 中

任务引擎(Cube Build Engine)

引擎设计目的 : 处理所有离线任务,其中包括 shell 脚本、Java API 、Map Reduce任务 等。任务引擎对 Kylin 中的全部任务进行管理与协调,保证每一项任务都能切实执行并解决故障

Kylin特点

Kylin 特点 :

  • 支持SQL接口
  • 支持超大规模数据集
  • 亚秒级响应
  • 可伸缩性
  • 高吞吐率
  • BI工具集成

标准 SQL 接口:Kylin 是以标准的 SQL 作为对外服务的接口

支持超大数据集:生产环境中能百亿记录的秒级查询,移动应用场景中能千亿记录秒级查询

亚秒级响应:以 预计算,很多复杂的计算 ( 连接、聚合 ),在离线的预计算过程中就已经完成,大大降低查询时计算量,提高了响应速度

可伸缩性和高吞吐率:单节点 Kylin 能每秒70个查询,还可以搭建 Kylin 的集群

Kylin 与 BI 工具集成 :

  • ODBC:与 Tableau、Excel、PowerBI 等工具集成
  • JDBC:与 Saiku、BIRT 等 Java 工具集成
  • RestAPI:与 JavaScript、Web 网页集成
  • Zepplin : 访问Kylin服务

Kylin安装

Kylin依赖环境

Kylin搭建

Kylin启动

先启动Hadoop(hdfs,yarn,jobhistoryserver)、Zookeeper、Hbase


启动 Kylin

kylin.sh start

查看Web页面

http://cpucode101:7070/kylin

用户名为:ADMIN
密码为:KYLIN

关闭 Kylin

kylin.sh stop

Kylin使用

事实表 : dwd_order_detail

维度表 : dim_user_infodim_sku_infodim_base_province

以上表构建星型模型

创建工程

点击下图中的 “+”

填写项目名称和描述信息,并点击 Submit 按钮提交

获取数据源

点击 DataSource

点击下图按钮导入 Hive 表

选择以下表格,并点击 Sync 按钮

dwd_order_detail
dim_sku_info
dim_user_info
dim_base_province

Kylin 不能处理 Hive 表中的复杂数据类型(Array , Map , Struct), 即便复杂类型的字段并未参与到计算之中

故在加载 Hive 数据源时,不能直接加载带有复杂数据类型字段的表。而在 dim_sku_info 表中存在两个复杂数据类型的字段(平台属性和销售属性),故 dim_sku_info 不能直接加载,需对其进行以下处理

在 hive 客户端创建一个视图,如下。该视图已经将 dim_sku_info 表中的复杂数据类型的字段去掉,在后续的计算中,不再使用 dim_sku_info ,而使用 dim_sku_info_view

create view dim_sku_info_view
as
select
    id,
    price,
    sku_name,
    sku_desc,
    weight,
    is_sale,
    spu_id,
    spu_name,
    category3_id,
    category3_name,
    category2_id,
    category2_name,
    category1_id,
    category1_name,
    tm_id,
    tm_name,
    create_time
from dim_sku_info;

在 kylin 中重新导入 dim_sku_info_view 视图

创建 model

点击 Models,点击 +New 按钮,点击 ★New Model 按钮

填写 Model 信息,点击 Next

指定事实表

选择维度表,并指定事实表和维度表的关联条件,点击Ok

维度表添加完毕之后,点击 Next

指定维度字段,并点击Next

指定度量字段,并点击Next

指定事实表分区字段(仅支持时间分区),点击Save按钮,model创建完毕

构建 cube

点击 new , 并点击 new cube

填写 cube 信息,选择 cube 所依赖的 model,并点击 next

选择所需的维度,如下图所示

选择所需度量值,如下图所示

点击 Monitor 查看构建进度

使用进阶

每日全量维度表及拉链维度表重复Key问题

在 cube 构建流程中出现以下错误 :

创建维度表视图

如何实现每日自动构建 cube

Kylin 提供了 Restful API ,因次我们可以将构建 cube 的命令写到脚本中,将脚本交给 azkaban或 oozie 这样的调度工具,以实现定时调度的功能

#!/bin/bash
cube_name=order_cube
do_date=`date -d '-1 day' +%F`

#获取00:00时间戳
start_date_unix=`date -d "$do_date 08:00:00" +%s`
start_date=$(($start_date_unix*1000))

#获取24:00的时间戳
stop_date=$(($start_date+86400000))

curl -X PUT -H "Authorization: Basic QURNSU46S1lMSU4=" -H 'Content-Type: application/json' -d '{"startTime":'$start_date', "endTime":'$stop_date', "buildType":"BUILD"}' http://hadoop102:7070/kylin/api/cubes/$cube_name/build

Kylin Cube构建原理

维度和度量

维度:即观察数据的角度。比如员工数据,可以从性别角度来分析,也可以更加细化,从入职时间或者地区的维度来观察。维度是一组离散的值,比如说性别中的男和女,或者时间维度上的每一个独立的日期。因此在统计时可以将维度值相同的记录聚合在一起,然后应用聚合函数做累加、平均、最大和最小值等聚合计算

度量:即被聚合(观察)的统计值,也就是聚合运算的结果。比如说员工数据中不同性别员工的人数,又或者说在同一年入职的员工有多少

Cube和Cuboid

在这里插入图片描述

一维度(1D)的组合有:[time]、[item]、[location]和[supplier]4种

二维度(2D)的组合有:[time, item]、[time, location]、[time, supplier]、[item, location]、[item, supplier]、[location, supplier]3种

每一种维度组合就是一个 Cuboid,16 个 Cuboid 整体就是一个 Cube

Cube构建算法

逐层构建算法(layer)

在这里插入图片描述

在这里插入图片描述

Cube存储原理

Kylin Cube构建优化

Kylin BI工具集成