数据分析之二:Kylin环境构建,维度、度量的概念
xsobi 2024-11-24 00:29 1 浏览
我们常做重复的事情,重复的事情做多了,成就了当下的我们!
统计某个页面的访问次数,其上按钮的点击次数,按照分钟、小时、日、周、月、年汇总;统计某个商品的销售件数,按日、周、月、年汇总;统计服务的调用次数,失败次数,平均耗时,最大耗时,最小耗时,也按照分钟、小时、日、周、月、年汇总;...... 进而我们会去输出设备的可用性指标、输出员工的代码提交频次、输出BUG率等等
从日志、队列、数据库去抓取数据,使用Map-Reduce的思想,分层运算,渐次汇总; 安排一两个人来开发,再让产品或运营来描述需求,让相关的技术负责人来讲解数据的来龙去脉.....
Kylin
Kylin是这样一个产品,使用空间换时间的概念,对需要经常执行的统计进行预先运算,并存放下来,以此来加速数据的访问。其清晰定义了维度、度量,简单来理解维度就是如何对数据分类(时间区间、类别等),度量就是对应分类下的统计值(最大、最小、平均、求和、计数);可清晰用一个select cat,type,dayofyear,sum(price) from tabel1 group by cat,type,dayofyear来类比。度量就是price,维度就是cat,type,dayofyear。
Kylin将数据表分为事实表和维度表,分别表述实际发生的每一个事件,以及用来对这些事件进行分类的维度。其提供的示例数据表中典型的有KYLIN_SALES为事实表,
维度表如下:
安装
环境如下
<@:~>uname -a
Linux VM_0_2_centos 3.10.0-1160.6.1.el7.x86_64 #1 SMP Tue Nov 17 13:59:11 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
<@:~>free -m
total used free shared buff/cache available
Mem: 7820 4931 957 1 1931 2589
Swap: 0 0 0
<@:~>cat /proc/meminfo
MemTotal: 8008644 kB
使用docker安装kylin体验环境:
docker run -d \
-m 8G \
-p 7070:7070 \
-p 8088:8088 \
-p 50070:50070 \
-p 8032:8032 \
-p 8042:8042 \
-p 16010:16010 \
apachekylin/apache-kylin-standalone:3.1.0
实例
基于kylin给出的数据,直接使用hive查询要花20秒,基于kylin查询只要0.2秒。
hive> select part_dt,count(1) from kylin_sales group by part_dt limit 2;
Query ID = root_20220115120506_6601f25e-7ead-49f7-a78f-96c2246df66d
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks not specified. Estimated from input data size: 1
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
set mapreduce.job.reduces=<number>
Starting Job = job_1642243053002_0019, Tracking URL = http://69277e2e84c9:8088/proxy/application_1642243053002_0019/
Kill Command = /home/admin/hadoop-2.7.0/bin/hadoop job -kill job_1642243053002_0019
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1
2022-01-15 12:05:11,993 Stage-1 map = 0%, reduce = 0%
2022-01-15 12:05:17,150 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 1.83 sec
2022-01-15 12:05:22,324 Stage-1 map = 100%, reduce = 100%, Cumulative CPU 4.21 sec
MapReduce Total cumulative CPU time: 4 seconds 210 msec
Ended Job = job_1642243053002_0019
MapReduce Jobs Launched:
Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 4.21 sec HDFS Read: 807423 HDFS Write: 28 SUCCESS
Total MapReduce CPU Time Spent: 4 seconds 210 msec
OK
2012-01-01 12
2012-01-02 17
Time taken: 16.512 seconds, Fetched: 2 row(s)
再来一个,按照周来汇总数据;kylin要0.18s,hive要25s。
select KYLIN_CAL_DT.week_beg_dt,count(1),sum(kylin_sales.price)
from kylin_sales as kylin_sales
INNER JOIN KYLIN_CAL_DT as KYLIN_CAL_DT
ON kylin_sales.PART_DT = KYLIN_CAL_DT.CAL_DT
group by KYLIN_CAL_DT.week_beg_dt limit 2;
集成Superset
在superset运行环境中按照kylin客户端,并重启superset。
pip install kylinpy
然后就可以在superset里面访问此数据源了
superset使用kylin大多数都是要用组合查询,所以添加表基本没啥意义,基于sqllab构建sql后再可视化最佳【这里要把superset改为支持动态sql template】
小坑
hive启动会报错,需修改hive的启动脚本【/home/admin/apache-hive-1.2.1-bin/bin/hive】
hive
show database;
use kylin4;
show tables;
相关推荐
- js向对象中添加元素(对象,数组) js对象里面添加元素
-
一、添加一个元素对象名["属性名"]=值(值:可以是一个值,可以是一个对象,也可以是一个数组)这样添加进去的元素,就是一个值或对象或数组...
- JS小技巧,如何去重对象数组?(一)
-
大家好,关于数组对象去重的业务场景,想必大家都遇到过类似的需求吧,这对这样的需求你是怎么做的呢。下面我就先和大家分享下如果是基于对象的1个属性是怎么去重实现的。方法一:使用.filter()和....
- 「C/C++」之数组、vector对象和array对象的比较
-
数组学习过C语言的,对数组应该都不会陌生,于是这里就不再对数组进行展开介绍。模板类vector模板类vector类似于string,也是一种动态数组。能够在运行阶段设置vector对象的长度,可以在末...
- 如何用sessionStorage保存对象和数组
-
背景:在工作中,我将[{},{}]对象数组形式,存储到sessionStorage,然后ta变成了我看不懂的形式,然后我想取之用之,发现不可能了~记录这次深刻的教训。$clickCouponIndex...
- JavaScript Array 对象 javascript的array对象
-
Array对象Array对象用于在变量中存储多个值:varcars=["Saab","Volvo","BMW"];第一个数组元素的索引值为0,第二个索引值为1,以此类推。更多有...
- JavaScript中的数组Array(对象) js array数组
-
1:数组Array:-数组也是一个对象-数组也是用来存储数据的-和object不同,数组中可以存储一组有序的数据,-数组中存储的数据我们称其为元素(element)-数组中的每一个元素都有一...
- 数组和对象方法&数组去重 数组去重的5种方法前端
-
列举一下JavaScript数组和对象有哪些原生方法?数组:arr.concat(arr1,arr2,arrn);--合并两个或多个数组。此方法不会修改原有数组,而是返回一个新数组...
- C++ 类如何定义对象数组?初始化数组?linux C++第43讲
-
对象数组学过C语言的读者对数组的概念应该很熟悉了。数组的元素可以是int类型的变量,例如int...
- ElasticSearch第六篇:复合数据类型-数组,对象
-
在ElasticSearch中,使用JSON结构来存储数据,一个Key/Value对是JSON的一个字段,而Value可以是基础数据类型,也可以是数组,文档(也叫对象),或文档数组,因此,每个JSON...
- 第58条:区分数组对象和类数组对象
-
示例设想有两个不同类的API。第一个是位向量:有序的位集合varbits=newBitVector;bits.enable(4);bits.enable([1,3,8,17]);b...
- 八皇后问题解法(Common Lisp实现)
-
如何才能在一张国际象棋的棋盘上摆上八个皇后而不致使她们互相威胁呢?这个著名的问题可以方便地通过一种树搜索方法来解决。首先,我们需要写一个函数来判断棋盘上的两个皇后是否互相威协。在国际象棋中,皇后可以沿...
- visual lisp修改颜色的模板函数 怎么更改visual studio的配色
-
(defunBF-yansemokuai(tuyuanyanse/ss)...
- 用中望CAD加载LISP程序技巧 中望cad2015怎么加载燕秀
-
1、首先请加载lisp程序,加载方法如下:在菜单栏选择工具——加载应用程序——添加,选择lisp程序然后加载,然后选择添加到启动组。2、然后是添加自定义栏以及图标,方法如下(以...
- 图的深度优先搜索和广度优先搜索(Common Lisp实现)
-
为了便于描述,本文中的图指的是下图所示的无向图。搜索指:搜索从S到F的一条路径。若存在,则以表的形式返回路径;若不存在,则返回nil。...
- 两个有助于理解Common Lisp宏的例子
-
在Lisp中,函数和数据具有相同的形式。这是Lisp语言的一个重大特色。一个Lisp函数可以分析另一个Lisp函数;甚至可以和另一个Lisp函数组成一个整体,并加以利用。Lisp的宏,是实现上述特色的...
- 一周热门
- 最近发表
- 标签列表
-
- grid 设置 (58)
- 移位运算 (48)
- not specified (45)
- patch补丁 (31)
- strcat (25)
- 导航栏 (58)
- context xml (46)
- scroll (43)
- element style (30)
- dedecms模版 (53)
- vs打不开 (29)
- nmap (30)
- webgl开发 (24)
- parse (24)
- c 视频教程下载 (33)
- android 开发环境 (24)
- paddleocr (28)
- listview排序 (33)
- firebug 使用 (31)
- transactionmanager (30)
- characterencodingfilter (33)
- getmonth (34)
- commandtimeout (30)
- hibernate教程 (31)
- label换行 (33)