你好!这是我历经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章 完结
Apache Kylin是一个开源的分布式分析引擎
提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据
·标准SQL接口
·支持超大数据集
·亚秒级响应
·可伸缩性和高吞吐率:单节点Kylin可实现每秒70个查询,还可以搭建Kylin的集群
从各方面观察信息,也就是从不同的维度分析数据,因此OLAP也成为多维分析
multi-dimensional analysis
ROLAP
给予关系型数据库
不需要预计算
MOLAP
基于多维数据集
需要预计算
MOLAP里的,一个多维数据集是一个Cube
cube在OLAP中称为数据立方体!从一个数据集合中,选取多个维度列再选取一个数据列!基于不同维度列的排列组合查询方式,对一个数据列进行统计,统计的所有结果的结合,称为cube(数据立方体)!
从cube中选取一种特定的维度视角查询的结果集合称为cubeid
例如: 选择a表的地区,时间,品类作为维度列
选取a表的订单金额作为度量列。
此时一共会产生 2的3次方-1种不同维度的组合方案!
例如: 选择3个维度: 时间,地区,品类
选择2个维度: 地区,品类
时间,品类
时间,地区
任选1个维度: 时间
地区
品类
维度
分析数据的数据角度
2^n -1 个维度
度量
被分析的指标
对哪个列进行聚合或者计算,哪个就是度量
先部署好Hadoop、Hive、Zookeeper、HBase
配置以下环境变量HADOOP_HOME,HIVE_HOME,HBASE_HOME
使用kylin时,必须启动Hadoop的历史日志服务
集群时间必须同步
下载解压 hbase-1.3.1-bin.tar.gz
配置HBASE_HOME
修改 hbase_env.sh
:set nu
第46 47行注释掉(因为JDK1.8没有永久代了,注释掉)
第128行注释打开 (export HBASE_MANAGES_ZK=false)
<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>
hadoop102
hadoop103
hadoop104
hbase分发到其它机器
启动
zookeeper启动
hadoop启动
hbase启动(start-hbase.sh)
http://hadoop103:16010/
Kylin
注意:启动前检查HADOOP_HOME,HIVE_HOME,HBASE_HOME是否配置完毕
启动Kylin之前,需先启动Hadoop(hdfs,yarn,jobhistoryserver)、Zookeeper、Hbase
bin/kylin.sh start
查看jps ,看看runjar在那个机器上
http://hadoop203:7070/kylin
用户名为:ADMIN,密码为:KYLIN
bin/kylin.sh stop
点击 + 号
project name
project description
Model里面
点击DataSource
点击下图按钮导入Hive表
例如
DWD_ORDER_INFO
DWD_PAYMENT_INFO
DWD_USER_INFO
点击中间那个按键
Model里面
点击Models,点击"+New"按钮,点击"★New Model"按钮
填写Model信息,点击Next
取名为
xxxx_Star_model
xxxx_Snowflake_model
指定事实表
选择维度表,并指定事实表和维度表的关联条件,点击Ok
+Add Lookup Table
维度表添加完毕之后,点击Next
指定维度字段,并点击Next
指定度量字段,并点击Next
指定事实表分区字段(仅支持时间分区),点击Save按钮,model创建完毕
action
edit
clone
drop
edit(JSON) 修改存储元数据的JSON
Model里面
点击new, 并点击new cube
(Cube Info) 填写cube信息,选择cube所依赖的model,设置名称并点击next
取名为
xxxx_cube
Add Dimensions
勾选维度
里面有2个选项
normal 正常维度
derived 延伸维度
+Measure
Name 给度量计算进行取名
Expression 选择计算方式
Param Type 所选的度量列是那种
column变量
constant常量
Param Value 选择度量
下面有个ok,再点击next
Refresh Setting
Auto Merge Thresholds cube自动合并设置,cube需按照日期分区字段每天进行构建,每次构建的结果会保存在Hbase中的一张表内,为提高查询效率,需将每日的cube进行合并,此处可设置合并周期
默认7天一小并,28天一大并
Aggregation Groups
Rowkeys
Mandatory Cuboids
Cube Engine MR或者Spark 默认MR
Advanced Dictionaries添加字典
Advanced Snapshot Table
Advanced ColumnFamily 列族
添加配置,,在运行时,覆盖之前的配置
+Property 属性名 属性值
一般不用 next
Cube信息总览,点击Save,Cube创建完成
构建Cube(计算),点击对应Cube的action按钮,选择build
选择要构建的时间区间,点击Submit
Start Date (Include) End Date (Exclude)
包含起始时间,不包含终止时间
hadoop103:8088 查看job
resume 重新开始
discard 抛弃
diagnosis 诊断
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'
discard —> drop
action —> drop
添加2个view数据源
删除里面Lookup Table
按照view重新添加
重新选view维度字段
cube结果集
查看存放的table (model —> cube —> storage —> HBase Table)
构建的元数据,DataSource,model,cube等
只能写select支持使用聚集函数和group by
在join时,事实表必须放左边
Kylin提供了Restful API,因次我们可以将构建cube的命令写到脚本中,将脚本交给azkaban或者oozie这样的调度工具,以实现定时调度的功能
#! /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
<dependencies>
<dependency>
<groupId>org.apache.kylin</groupId>
<artifactId>kylin-jdbc</artifactId>
<version>2.5.1</version>
</dependency>
</dependencies>
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();
}
}
下载解压 zeppelin-0.8.0-bin-all.tgz
修改名称 zeppelin
启动
bin/zeppelin-daemon.sh start
http://hadoop103:8080
(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轴,拖动方式
OOM堆内存过大,jps把里面不需要的关掉
topic_start里面没有数据
kafka配置,zk配置,imply配置
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,上面有参考
**
**
**
**