36 大数据项目之电商数仓(即席查询之Kylin)

第 3 章 Kylin

3.0 前置知识

在这里插入图片描述
2^n-1各角度

select
location
type
sum(money)
from tb
group by location,type

在这里插入图片描述

OLAP类型
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.1 Kylin 简介

3.1.1 Kylin 定义

Apache Kylin 是一个开源的分布式分析引擎,提供 Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay Inc 开发并贡献至开源社区。它能在亚秒内查询巨大的 Hive 表。

3.1.2 Kylin 架构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.1.3 Kylin 特点

在这里插入图片描述
在这里插入图片描述

3.2 Kylin 安装

3.2.1 Kylin 依赖环境

hbase参考文档安装

在这里插入图片描述
并且不需要分发因为只在dw1上有kylin

3.2.2 Kylin 搭建

1)下载 Kylin 安装包

下载地址:http://kylin.apache.org/cn/download/

2)解压 apache-kylin-2.5.1-bin-hbase1x.tar.gz 到/opt/module
在这里插入图片描述
3)启动

检验jobhistoryserver:

hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-example-2.7.2.jar pi 1 1
访问dw1:8088 点击history正常则没问题

(1)启动 Kylin 之前,需先启动 Hadoop(hdfs,yarn,jobhistoryserver)、Zookeeper、Hbase、hive元数据服务
在这里插入图片描述
(2)启动 Kylin

[dw@dw1 kylin]$bin/kylin.sh start

在这里插入图片描述
如果起不来可能是kylin.sh脚本启动时调用check-hive-usability.sh中hive -e查询将时间调大
访问 http://dw1:7070/kylin
在这里插入图片描述

用户名为:ADMIN,密码为:KYLIN

3.3 Kylin 使用

在这里插入图片描述

3.2.1创建工程

在这里插入图片描述
在这里插入图片描述

3.2.2获取数据源

1)点击 DataSource
在这里插入图片描述
2)点击下图按钮导入 Hive 表
在这里插入图片描述
3)选择所需数据表,并点击 Sync 按钮
在这里插入图片描述

3.2.3创建model

1)点击 Models,点击"+New"按钮,点击"★New Model"按钮。
在这里插入图片描述
2)填写 Model 信息,点击 Next
在这里插入图片描述

3)指定事实表
在这里插入图片描述
4)选择维度表,并指定事实表和维度表的关联条件,点击 Ok

在这里插入图片描述
维度表添加完毕之后,点击 Next
在这里插入图片描述
5)指定维度字段,并点击 Next
在这里插入图片描述
6)指定度量字段,并点击 Next
在这里插入图片描述
7)指定事实表分区字段(仅支持时间分区),点击 Save 按钮,model 创建完毕
在这里插入图片描述

3.2.4构建cube

1)点击 new, 并点击 new cube

在这里插入图片描述

2)填写 cube 信息,选择 cube 所依赖的 model,并点击 next
在这里插入图片描述
3)点击 add dimensions (维度表选normal)
在这里插入图片描述

4)选择所需的维度,如下图所示,点击next
在这里插入图片描述
5)选择所需度量值,如下图所示,并点击ok保存
在这里插入图片描述
在这里插入图片描述
6)cube 自动合并设置,cube 需按照日期分区字段每天进行构建,每次构建的结果会保存在
Hbase 中的一张表内,为提高查询效率,需将每日的 cube 进行合并,此处可设置合并周期。

在这里插入图片描述
注意:与hbase合并表不一样的是,kylin是多表合并一张表。hbase是一张大表内部hfile合并

7)Kylin 高级配置(优化相关,暂时跳过)
在这里插入图片描述
8)Kylin 相关属性配置覆盖(只在当前cube生效)
在这里插入图片描述
9)Cube 信息总览,点击 Save,Cube 创建完成
在这里插入图片描述
10)构建 Cube(计算),点击对应 Cube 的 action 按钮,选择 build
在这里插入图片描述
11)选择要构建的时间区间,点击 Submit
在这里插入图片描述
12)点击 Monitor 查看构建进度
在这里插入图片描述

3.2.5使用进阶

1)每日全量维度表及拉链维度表重复 Key 问题如何处理

按照上述流程,会发现,在 cube 构建流程中出现以下错误
在这里插入图片描述
原因:事实表根据日期分区与用户拉链表join时,会出现多个有修改过操作的用户,所以导致重复key

重复key解决方案

方案一:在 hive 中创建维度表的临时表,该临时表中只存放维度表最新的一份完整的数据,在 kylin 中创建模型时选择该临时表作为维度表。

方案二:与方案一思路相同,但不使用物理临时表,而选用视图(view)实现相同的功
能。

此处采用方案二: 创建维度表视图

(1)创建维度表视图

--拉链维度表视图
create view	dwd_dim_user_info_his_view	as select * from dwd_dim_user_info_his where end_date='9999-99-99';

--全量维度表视图
create view	dwd_dim_sku_info_view	as select * from dwd_dim_sku_info where dt=date_add(current_date,-1);

--当前情形我们先创建一个 dwd_dim_user_info_his  的视图
create view	dwd_dim_user_info_his_view	as select * from dwd_dim_user_info_his where end_date='9999-99-99';

创建视图完毕后:
1.discard失败的任务并drop => 2.drop cube => 3.drop model => 4.unload table dwd_dim_user_info_his
并重新创建model执行下去

2)历史服务器错误 (方案:修改到今天日期)

hadoop fs -ls /tmp/hadoop-yarn/staging/history (存放jobhistory的日志)
done  显示在web界面
^
|
done_intermediate 日期往前则一直在 done_intermediate里无法显示
使用kylin进行查询

在这里插入图片描述

select l.region_name, sum(payment_amount)
from dwd_fact_payment_info p
left join dwd_dim_base_province l
on p.province_id = l.id
group by l.region_name

在这里插入图片描述
注意:第一次可能比较慢,因为与hbase需要建立一次连接需要消耗一些时间

如何实现每日自动构建 cube -->Restful API

http://kylin.apache.org/cn/docs/howto/howto_use_restapi.html

查询 example

curl -X POST -H “Authorization: Basic XXXXX=” -H “Content-Type: application/json” -d ‘{ “sql”:“select count(*) from TEST_KYLIN_FACT”, “project”:“learn_kylin” }’ http://localhost:7070/kylin/api/query

1.需要将登陆的账号密码进行加密

http://tool.chinaz.com/Tools/Base64.aspx

在这里插入图片描述
2.改写命令
curl -X POST -H “Authorization: Basic QURNSU46S1lMSU4=” -H “Content-Type: application/json” -d ‘{ “sql”:“select l.region_name, sum(payment_amount) from dwd_fact_payment_info p left join dwd_dim_base_province l on p.province_id = l.id group by l.region_name”, “project”:“gmall” }’ http://dw1:7070/kylin/api/query

构建 cube example

curl -X PUT -H “Authorization: Basic XXXXXXXXX” -H ‘Content-Type: application/json’ -d ‘{“startTime”:‘1423526400000’, “endTime”:‘1423612800000’, “buildType”:“BUILD”}’ http://:/kylin/api/cubes/{cubeName}/build

改写命令并编写成脚本

#!/bin/bash

cube_name=payment_view_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://dw1:7070/kylin/api/cubes/$cube_name/build

3.4 Kylin Cube 构建原理

3.4.1Cube 存储原理

在这里插入图片描述
在这里插入图片描述
底层存储16进制,并且有位数约定来表达第几个维度

3.4.2Cube 构建算法

1)逐层构建算法(layer)
在这里插入图片描述
在这里插入图片描述

2)快速构建算法(inmem)
在这里插入图片描述
在这里插入图片描述

3.5Kylin Cube 构建优化

3.5.1使用衍生维度(derived dimension)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.5.2使用聚合组(Aggregation group)

在这里插入图片描述
(1)强制维度(Mandatory)
在这里插入图片描述
(2)层级维度(Hierarchy)
在这里插入图片描述
(3)联合维度(Joint) 如sku与spu
在这里插入图片描述
在这里插入图片描述

3.5.3Row Key 优化

在这里插入图片描述
在这里插入图片描述
2)基数大的维度放在基数小的维度前边。
在这里插入图片描述
在这里插入图片描述

3.5.4并发粒度优化

在这里插入图片描述

3.6Kylin BI 工具集成

在这里插入图片描述

3.6.1JDBC

1)新建项目并导入依赖

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

2)编码

package com.atguigu;
import java.sql.*; public class TestKylin {
public static void main(String[] args) throws Exception {

//Kylin_JDBC 驱动
String KYLIN_DRIVER = "org.apache.kylin.jdbc.Driver";
//Kylin_URL
String KYLIN_URL = "jdbc:kylin://dw1:7070/gmall";
//Kylin 的用户名
String KYLIN_USER = "ADMIN";

//Kylin 的密码
String KYLIN_PASSWD = "KYLIN";

//添加驱动信息
Class.forName(KYLIN_DRIVER);
//获取连接
Connection connection = DriverManager.getConnection(KYLIN_URL, KYLIN_USER, KYLIN_PASSWD);
//预编译 SQL
PreparedStatement ps = connection.prepareStatement("select l.region_name, sum(payment_amount) from dwd_fact_payment_info p left join dwd_dim_base_province l on p.province_id = l.id group by l.region_name");
//执行查询
ResultSet resultSet = ps.executeQuery();

//遍历打印
while (resultSet.next()) {
		System.out.println(resultSet.getString(1) + ":" +resultSet.getDouble(2) );
		}
	}
}

3)结果展示
在这里插入图片描述

3.6.2Zepplin

1)Zepplin 安装与启动
(1)将 zeppelin-0.8.0-bin-all.tgz 上传至 Linux
(2)解压 zeppelin-0.8.0-bin-all.tgz 之/opt/module
(3)修改名称
(4)启动 bin/zeppelin-daemon.sh start (后台运行)
在这里插入图片描述

可登录网页查看,web 默认端口号为 8080
http://dw1:8080
2)配置 Zepplin 支持 Kylin
(1)点击右上角 anonymous 选择 Interpreter
在这里插入图片描述
(2)搜索 Kylin 插件并修改相应的配置
在这里插入图片描述
(3)修改完成点击 Save 完成

(4)点击 Notebook 创建新的 note
在这里插入图片描述
在这里插入图片描述
切换解释器
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、课程简介随着技术的飞速发展,经过多年的数据积累,各互联网公司已保存了海量的原始数据和各种业务数据,所以数据仓库技术是各大公司目前都需要着重发展投入的技术领域。数据仓库是面向分析的集成化数据环境,为企业所有决策制定过程,提供系统数据支持的战略集合。通过对数据仓库中数据的分析,可以帮助企业改进业务流程、控制成本、提高产品质量等。二、课程内容本次精心打造的数仓项目的课程,从项目架构的搭建,到数据采集模块的设计、数仓架构的设计、实战需求实现、即席查询的实现,我们针对国内目前广泛使用的Apache原生框架和CDH版本框架进行了分别介绍,Apache原生框架介绍中涉及到的技术框架包括Flume、Kafka、Sqoop、MySql、HDFS、Hive、Tez、Spark、Presto、Druid等,CDH版本框架讲解包括CM的安装部署、Hadoop、Zookeeper、Hive、Flume、Kafka、Oozie、Impala、HUE、Kudu、Spark的安装配置,透彻了解不同版本框架的区别联系,将大数据全生态系统前沿技术一网打尽。在过程中对大数据生态体系进行了系统的讲解,对实际企业数仓项目中可能涉及到的技术点都进行了深入的讲解和探讨。同时穿插了大量数仓基础理论知识,让你在掌握实战经验的同时能够打下坚实的理论基础。三、课程目标本课程以国内电商巨头实际业务应用场景为依托,对电商数仓的常见实战指标以及难点实战指标进行了详尽讲解,具体指标包括:每日、周、月活跃设备明细,留存用户比例,沉默用户、回流用户、流失用户统计,最近连续3周活跃用户统计,最近7天内连续3天活跃用户统计,GMV成交总额分析,转化率及漏斗分析,品牌复购率分析、订单表拉链表的设计等,让学生拥有更直观全面的实战经验。通过对本课程的学习,对数仓项目可以建立起清晰明确的概念,系统全面的掌握各项数仓项目技术,轻松应对各种数仓难题。四、课程亮点本课程结合国内多家企业实际项目经验,特别加入了项目架构模块,从集群规模的确定到框架版本选型以及服务器选型,手把手教你从零开始搭建大数据集群。并且总结大量项目实战中会遇到的问题,针对各个技术框架,均有调优实战经验,具体包括:常用Linux运维命令、Hadoop集群调优、Flume组件选型及性能优化、Kafka集群规模确认及关键参数调优。通过这部分学习,助学生迅速成长,获取前沿技术经验,从容解决实战问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值