基于Apache的电商数据仓库(十)

基于Apache的电商数据仓库(十)

  • 欢迎
    • 第22章 即席查询:Kylin
      • 22.1 Kylin简介
      • 22.2 Kylin核心概念
        • 22.2.1 OLAP
        • 22.2.2 OLAP Cube
        • 22.2.3 dimension and measure
      • 22.3 Kylin安装
        • 22.3.1 依赖环境
        • 22.3.2 搭建
          • 22.3.2.1 Hbase安装
          • 22.3.2.2 Kylin安装
      • 22.4 Kylin使用
        • 22.4.1 创建工程
        • 22.4.2 获取数据源
        • 22.4.3 创建model
        • 22.4.4 构建cube
        • 22.4.5 在cube构建流程中出现以下错误
        • 22.4.6 查询
        • 22.4.7 实现每日自动构建cube
      • 22.5 JDBC连接Kylin
      • 22.6 zeppelin连接kylin
    • 第23章 即席查询报错总结
      • 23.1 druid报错
      • 23.2 Kylin报错
    • 第24章 完结
      • 感谢亲朋好友的观看,祝愿您工作一切顺利!!!
      • 有任何问题欢迎私聊,评论,留言哇!!!
      • 觉得好的话别忘了三连哦!!!
      • 再次感谢您的观看!!!

欢迎

你好!这是我历经1个半月的学习(Apache和CDH),做完的一个项目,本次和你们分享一下Apache版。
感谢您的阅读!

第1章~第4章在基于Apache的电商数据仓库(一)
第5章~第5章在基于Apache的电商数据仓库(二)
第6章~第8章在基于Apache的电商数据仓库(三)
第8章~第9章在基于Apache的电商数据仓库(四)
第10章~第12章在基于Apache的电商数据仓库(五)
第13章~第15章在基于Apache的电商数据仓库(六)
第16章~第17章在基于Apache的电商数据仓库(七)
第18章~第19章在基于Apache的电商数据仓库(八)
第20章~第21章在基于Apache的电商数据仓库(九)
第22章~第24章在基于Apache的电商数据仓库(十)
第24章 完结

第22章 即席查询:Kylin

22.1 Kylin简介

  1. 概念

Apache Kylin是一个开源的分布式分析引擎

提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据

  1. 架构

基于Apache的电商数据仓库(十)_第1张图片

  1. 特点

·标准SQL接口
·支持超大数据集
·亚秒级响应
·可伸缩性和高吞吐率:单节点Kylin可实现每秒70个查询,还可以搭建Kylin的集群

22.2 Kylin核心概念

22.2.1 OLAP

  1. online analytical processing

从各方面观察信息,也就是从不同的维度分析数据,因此OLAP也成为多维分析

  1. 多维分析的一种特例

multi-dimensional analysis

  1. OLAP类型

ROLAP
给予关系型数据库
不需要预计算

MOLAP
基于多维数据集
需要预计算

22.2.2 OLAP Cube

  1. 什么是Cube

MOLAP里的,一个多维数据集是一个Cube

  1. Cube简介

cube在OLAP中称为数据立方体!从一个数据集合中,选取多个维度列再选取一个数据列!基于不同维度列的排列组合查询方式,对一个数据列进行统计,统计的所有结果的结合,称为cube(数据立方体)!

  1. CubeID

从cube中选取一种特定的维度视角查询的结果集合称为cubeid

  1. 例如

例如: 选择a表的地区,时间,品类作为维度列
	  选取a表的订单金额作为度量列。
	  
	  此时一共会产生 2的3次方-1种不同维度的组合方案!

			例如:  选择3个维度: 时间,地区,品类
			
				   选择2个维度: 地区,品类
							   时间,品类
							   时间,地区
								
				   任选1个维度:  时间
								地区
								品类

22.2.3 dimension and measure

  1. dimension

维度
分析数据的数据角度
2^n -1 个维度

  1. measure

度量
被分析的指标
对哪个列进行聚合或者计算,哪个就是度量

22.3 Kylin安装

22.3.1 依赖环境

  1. 先部署好Hadoop、Hive、Zookeeper、HBase

  2. 配置以下环境变量HADOOP_HOME,HIVE_HOME,HBASE_HOME

  3. 使用kylin时,必须启动Hadoop的历史日志服务

  4. 集群时间必须同步

22.3.2 搭建

22.3.2.1 Hbase安装
  1. 下载解压 hbase-1.3.1-bin.tar.gz

  2. 配置HBASE_HOME

  3. 修改 hbase_env.sh

 :set nu
 
第46  47行注释掉(因为JDK1.8没有永久代了,注释掉)
第128行注释打开 (export HBASE_MANAGES_ZK=false)
  1. 修改hbase_site.xml
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://hadoop102:9000/hbase</value>   
        </property>

        <property>   
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>

   <!-- 0.98后的新变动,之前版本没有.port,默认端口为60000 -->
        <property>
                <name>hbase.master.port</name>
                <value>16000</value>
        </property>

        <property>
                <name>hbase.zookeeper.quorum</name>
             <value>hadoop102,hadoop103,hadoop104</value>
        </property>

        <property>
                <name>hbase.zookeeper.property.dataDir</name>
             <value>/opt/module/zookeeper-3.4.10/datas</value>
        </property>
  1. 修改regionservers
hadoop102
hadoop103
hadoop104
  1. hbase分发到其它机器

  2. 启动

zookeeper启动
hadoop启动
hbase启动(start-hbase.sh)
  1. web查看
http://hadoop103:16010/
22.3.2.2 Kylin安装
  1. 下载地址

Kylin

  1. 解压

注意:启动前检查HADOOP_HOME,HIVE_HOME,HBASE_HOME是否配置完毕

  1. 启动
启动Kylin之前,需先启动Hadoop(hdfs,yarn,jobhistoryserver)、Zookeeper、Hbase

bin/kylin.sh start
  1. web查看
查看jps ,看看runjar在那个机器上

http://hadoop203:7070/kylin

用户名为:ADMIN,密码为:KYLIN
  1. 关闭
bin/kylin.sh stop

22.4 Kylin使用

22.4.1 创建工程

点击 + 号
project name
project description

22.4.2 获取数据源

Model里面

  1. 点击DataSource

  2. 点击下图按钮导入Hive表

例如
DWD_ORDER_INFO 
DWD_PAYMENT_INFO 
DWD_USER_INFO

点击中间那个按键
  1. 选择所需数据表,并点击Sync按钮

22.4.3 创建model

Model里面

  1. 点击Models,点击"+New"按钮,点击"★New Model"按钮

  2. 填写Model信息,点击Next

取名为
xxxx_Star_model
xxxx_Snowflake_model
  1. 指定事实表

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

+Add Lookup Table
维度表添加完毕之后,点击Next
  1. 指定维度字段,并点击Next

  2. 指定度量字段,并点击Next

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

  4. action

edit
clone
drop
edit(JSON) 修改存储元数据的JSON

22.4.4 构建cube

Model里面

  1. 点击new, 并点击new cube

  2. (Cube Info) 填写cube信息,选择cube所依赖的model,设置名称并点击next

取名为
xxxx_cube
  1. (Dimensions)选择所需的维度,构建立方体
Add Dimensions

	勾选维度
	
	里面有2个选项
		normal  正常维度
		derived  延伸维度
  1. 选择所需度量值
+Measure

	Name  给度量计算进行取名
	Expression  选择计算方式
	Param Type 所选的度量列是那种
		       column变量
		       constant常量
	Param Value 选择度量
	
下面有个ok,再点击next
Refresh Setting

	Auto Merge Thresholds    cube自动合并设置,cube需按照日期分区字段每天进行构建,每次构建的结果会保存在Hbase中的一张表内,为提高查询效率,需将每日的cube进行合并,此处可设置合并周期
	                         默认7天一小并,28天一大并
  1. (Advanced Setting)Kylin高级配置(优化相关,暂时跳过)
Aggregation Groups

Rowkeys 

Mandatory Cuboids

Cube Engine   MR或者Spark  默认MR

Advanced Dictionaries添加字典

Advanced Snapshot Table

Advanced ColumnFamily  列族
  1. (Configuration Overwrites)Kylin相关属性配置覆盖
添加配置,,在运行时,覆盖之前的配置

+Property     属性名   属性值

一般不用 next
  1. Cube信息总览,点击Save,Cube创建完成

  2. 构建Cube(计算),点击对应Cube的action按钮,选择build

  3. 选择要构建的时间区间,点击Submit

Start Date (Include)    End Date (Exclude)
包含起始时间,不包含终止时间
  1. 点击Monitor查看构建进度
hadoop103:8088   查看job
  1. actions
resume  重新开始

discard  抛弃

diagnosis  诊断

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

  1. UTC
Caused by: java.lang.IllegalStateException: The table: DWD_USER_INFO Dup key found, key=[1], 
value1=[1,gBkzOxXuhzbKtQYubYPdVvqsRhitvW,1992-11-22,F,[email protected],2,2021-02-24 10:48:30.0,2021-02-24], 
value2=[1,gBkzOxXuhzbKtQYubYPdVvqsRhitvW,1992-11-22,F,[email protected],2,2021-02-24 10:48:30.0,2021-02-25]

解决方法

创建视图(view),该view中只存放维度表最新的一份完整的数组

create view dwd_order_info_view as SELECT * from dwd_order_info where dt='2021-02-24'
create view dwd_user_info_view as SELECT * from dwd_user_info where dt='2021-02-24'
  1. 删除进度

discard —> drop

  1. 删除cube

action —> drop

  1. 修改data source

添加2个view数据源

  1. 修改model

删除里面Lookup Table
按照view重新添加
重新选view维度字段

  1. 重新创建cube

22.4.6 查询

  1. hbase shell
  • KYLIN_P64PDCA50C

cube结果集
查看存放的table (model —> cube —> storage —> HBase Table)

  • kylin_metadata

构建的元数据,DataSource,model,cube等

  1. Insight

只能写select支持使用聚集函数和group by
在join时,事实表必须放左边

22.4.7 实现每日自动构建cube

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

  • cube_build.sh
#! /bin/bash

if [ -n "$1" ]
then
         do_date=$1
else
        do_date=`date -d '-1 day' +%F`
fi
cube_name=$2

#获取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://hadoop103:7070/kylin/api/cubes/$cube_name/build
启动
cube_build.sh 2021-02-24 payment_sum_cube

22.5 JDBC连接Kylin

  1. 依赖导入
    <dependencies>
        <dependency>
            <groupId>org.apache.kylin</groupId>
            <artifactId>kylin-jdbc</artifactId>
            <version>2.5.1</version>
        </dependency>
    </dependencies>
  1. java写入

public class TestJDBC {
     

	public static void main(String[] args) throws SQLException, ClassNotFoundException {
     
		
		Class.forName("org.apache.kylin.jdbc.Driver");
		
		Connection connection = DriverManager.getConnection("jdbc:kylin://hadoop103:7070/gmall", "ADMIN", "KYLIN");
		
		String sql="select  t2.USER_LEVEL,t2.gender,sum(t1.TOTAL_AMOUNT) sum_amount  from DWD_PAYMENT_INFO t1 join DWD_USER_INFO_VIEW t2 on t1.USER_ID=t2.ID\r\n group by t2.USER_LEVEL,t2.gender;";
				
		PreparedStatement ps = connection.prepareStatement(sql);
		
		 ResultSet eq = ps.executeQuery();
		
		System.out.println("-------------------------------");
		System.out.println("USER_LEVEL,gender,sum_TOTAL_AMOUNT");
		
		while(eq.next()) {
     
			System.out.println(eq.getString("USER_LEVEL")+","+eq.getString("gender")+","+eq.getInt("sum_amount"));
		}
		
		eq.close();
		ps.close();
		connection.close();
	}
}

22.6 zeppelin连接kylin

  1. 下载解压 zeppelin-0.8.0-bin-all.tgz

  2. 修改名称 zeppelin

  3. 启动

bin/zeppelin-daemon.sh start
  1. web查看
http://hadoop103:8080
  1. 配置Zepplin支持Kylin
(1)点击右上角anonymous选择Interpreter

(2)搜索Kylin插件并修改相应的配置
	url:http://hadoop203:7070/kylin/api/query
	project  库   gmall
	
(3)修改完成点击Save完成

(4)实操
	(4.1)点击Notebook创建新的note
	(4.2)填写Note Name点击Create  选择kylin
	(4.3)执行查询
	(4.4)结果展示
	(4.5)其他图表格式  可以点击settings设置XY轴,拖动方式

第23章 即席查询报错总结

23.1 druid报错

  1. Caused by: java.lang.OutOfMemoryError: unable to create new native thread

OOM堆内存过大,jps把里面不需要的关掉

  1. Timed out before any events could be fetched from Kafka

topic_start里面没有数据
kafka配置,zk配置,imply配置

23.2 Kylin报错

1.Caused by: java.lang.IllegalStateException: The table: DWD_USER_INFO Dup key found, key=[1],
value1=[1,gBkzOxXuhzbKtQYubYPdVvqsRhitvW,1992-11-22,F,[email protected],2,2021-02-24 10:48:30.0,2021-02-24],
value2=[1,gBkzOxXuhzbKtQYubYPdVvqsRhitvW,1992-11-22,F,[email protected],2,2021-02-24 10:48:30.0,2021-02-25]

创建视图view,上面有参考

第24章 完结


感谢亲朋好友的观看,祝愿您工作一切顺利!!!


**

有任何问题欢迎私聊,评论,留言哇!!!

**

**

觉得好的话别忘了三连哦!!!

**


再次感谢您的观看!!!


你可能感兴趣的:(数据仓库,数仓项目,BUG,数据仓库,kylin,bug,hadoop)