0%

聚类

聚类概念

聚类基本概念

簇:数据对象集合

聚类与分类的差别

分类是有监督学习,聚类是无监督学习

特征属性

  • 间隔尺度属性(可加可比):如.长度、温度。
  • 有序尺度属性(不可加,但可比):如.等级变量(一等、二等、三等奖学金)
  • 名义尺度属性(不可加不可比):如.性别、职业等

相似度计算

明考斯基距离

曼哈坦距离

欧几里德距离

聚类基本方法

聚类方法

  • 基于模型
  • 基于层次
  • 基于划分
  • 基于密度

K-means(K均值)

属于基于划分的聚类方法

输入:数据集D(包括n个对象),簇的个数K

输出:K个簇的集合

方法:

  • 选择K个对象作为初始的簇的质心
  • 计算对象与各个簇的质心的距离,将对象划分到距离最近的簇
  • 更新每个簇的中心点

优点:聚类时间快

缺点:

  1. 必须事先指定聚类簇的个数
  2. 常常终止与局部最优

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/**
* Following sample is adopted from original wordcount sample from
* http://wiki.apache.org/hadoop/WordCount.
*/
package chapter1;

import java.io.IOException;
import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;


/**
* <p>The word count sample counts the number of word occurrences within a set of input documents
* using MapReduce. The code has three parts: mapper, reducer, and the main program.</p>
* @author Srinath Perera (srinath@wso2.com)
*/
public class WordCount {

/**
* <p>
* The mapper extends from the org.apache.hadoop.mapreduce.Mapper interface. When Hadoop runs,
* it receives each new line in the input files as an input to the mapper. The map function
* tokenize the line, and for each token (word) emits (word,1) as the output. </p>
*/
public static class TokenizerMapper
extends Mapper<Object, Text, Text, IntWritable>{

private final static IntWritable one = new IntWritable(1);
private Text word = new Text();

public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
}
}

/**
* <p>Reduce function receives all the values that has the same key as the input, and it output the key
* and the number of occurrences of the key as the output.</p>
*/
public static class IntSumReducer
extends Reducer<Text,IntWritable,Text,IntWritable> {
private IntWritable result = new IntWritable();

public void reduce(Text key, Iterable<IntWritable> values,
Context context
) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}

/**
* <p> As input this program takes any text file. Create a folder called input in HDFS (or in local directory if you are running this locally)
* <ol>
* <li>Option1: You can compile the sample by ant from sample directory. To do this, you need to have Apache Ant installed in your system.
* Otherwise, you can use the complied jar included with the source code. hange directory to HADOOP_HOME, and copy the hadoop-cookbook.jar to the HADOOP_HOME.
* Then run the command > bin/hadoop jar hadoop-cookbook.jar chapter1.WordCount input output.</li>
* <li>As an optional step, copy the input directory to the top level of the IDE based project (eclipse project) that you created for samples. Now you can run
* the WordCount class directly from your IDE passing input output as arguments. This will run the sample same as before. Running MapReduce Jobs from IDE in this manner is very useful
* for debugging your MapReduce Jobs. </li>
* </ol>
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
JobConf conf = new JobConf();
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Usage: wordcount <in> <out>");
System.exit(2);
}

Job job = new Job(conf, "word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(TokenizerMapper.class);
//Uncomment this to
//job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}


大数据补充

大数据三种计算模式

  1. 离线计算,小时级,批处理,机器学习,MapReduce,Spark
  2. 在线计算,分钟级和秒级,交互分析和查询,Hive,Impala,Spark
  3. 流计算,秒、毫秒级,实时分析,Storm,Flume,Spark

大数据分层结构

数据收集层:数据抽取、转换、加载(Extract,Transform,Load,ETL),代表技术平台或产品:Kettle,Kafka,Flume(日志收集),Sqoop 数据存储层:分布式文件系统GFS/HDFS,半结构化/结构化数据分布式存储BigTable/HBase,NoSQL(键值、列、图、文档),NewSQL(关系数据库+云计算) 数据分析层:分布式计算框架MapReduce,Spark,Hive(提供大数据类SQL查询接口),Impala,Storm,Mahout(大数据挖掘) 数据应用层:

云计算特点

服务计算: 按需计算: 弹性计算:扩展、收缩 虚拟化计算:磁盘存储、CPU计算、网络带宽进行集中和虚拟化 透明计算:

云计算分层结构

Iaas层(Infrastructure as a Service):基础设施即服务,磁盘、CPU、网络带宽进行虚拟化,以服务形式提供 PaaS层(Platform as a Service):平台即服务,操作系统、存储、计算中间件服务 SaaS层(Software as a Service):软件即服务,应用程序作为服务

云计算类型

公有云 私有云 混合云

Hadoop

Apache 开源分布式存储与计算平台/框架 包括分布式存储HDFS,分布式计算Hadoop MapReduce,CPU、内存等资源管理Yarn等三大组件 主从架构:一主多从,主节点进行数据和计算任务的管理,从节点进行具体数据的存储和任务的计算

Java语言

一般是要安装在Linux操作系统(Ubuntu,CentOS),64位操作系统; 实验一般要搭建一个小型的集群,即1台主机(主节点,master,名称节点name node)2台从机(从节点,slave,数据节点data node),e.g. 4G内存,主机2G内存,从机1G内存 事实上的大数据标准

Google(老)三大技术(三驾马车)

GFS:Google File System,Google分布式文件存储系统 MapReduce:Google分布式计算框架 BigTable:Google半结构/结构化数据分布式存储

Hadoop特点

  1. 高扩展性:横向扩展(增加单机数量),传统的小型机等纵向扩展(增强单机性能)

  2. 高容错性:三副本机制,热点数据请求卸载(offload) 传统并行分布式计算技术MPI(消息传递机制)

  3. 高易用性:提供了分布式存储和计算框架,将通用的分布式存储和计算任务(e.g. 不同节点的通讯、任务或数据的划分、任务或数据的容错处理)进行实现, 用户主要实现Map和Reduce函数

Linux常用操作命令

Linux常用操作命令

(以Ubuntu为例,打开终端快捷键:ctrl+alt+t,如果设置的话) 文件(夹)操作命令: ls:显示文件夹/目录内容,ll显示详细的内容信息 cd:切换文件夹/目录 mkdir:创建文件夹/目录 cp:拷贝文件(夹) (参数:srcdir desdir) mv:移动文件(夹) rm:删除文件(夹) cat:查看文件内容 pwd:显示当前目录路径 vi/vim:Linux的命令方式的记事本 gedit:Linux的窗口界面的记事本

. 当前目录 .. 上级目录 ~ 用户主目录 / 根目录

权限管理命令

chown:修改文件(夹)权限,文件(夹)权限:可读、可写、可执行 sudo:临时提升到更高权限,例管理员或超级用户 su:切换用户 ssh:远程访问命令,提供安全访问机制(公钥、私钥);在Hadoop中用于保障安全下无需输入密码来远程启动集群节点的计算进程、数据访问

用户创建命令

useradd:增加Linux操作系统用户 passwd:修改密码

apt-get install:安装包

sudo tar -zxf:压缩包解压

hostname:查看机器名称 ifconfig:查看机器ip gedit /etc/hosts:修改机器名称与ip映射 (vi /etc/hosts:修改机器名称与ip映射)

ping:ping对方机器

exit:退出

ssh-keygen:生成公钥和私钥

Hadoop操作接口

  1. 终端命令接口
  2. Web界面

Hadoop解压后的主要配置文件: core-site.xml hdfs-site.xml mapred-site.xml

Hadoop命令: hadoop namenode -format:HDFS 分布式文件系统格式化 start-all.sh:Hadoop 启动所有进程 jps:显示所有Java进程,包括: Hadoop master的必要进程:NameNode,ResourceManager,SecondaryNameNode Hadoop slave的必要进程:DataNode,NodeManager

stop-all.sh:Hadoop 关闭所有进程

hadoop dfs:HDFS操作命令 e.g. hadoop dfs -ls / hadoop dfs -mkdir hadoop dfs -cat hadoop dfs -put:将本地文件上传到HDFS分布式文件系统中 hadoop dfs -get:将HDFS分布式文件系统中文件下载到本地

HDFS系统结构

一主多从

HDFS主节点,又称名称节点,NameNode,进行数据的划分以及位置等元数据(metadata,保存了文件、数据块和数据节点的映射关系)管理,并转发数据访问请求; HDFS从节点,又称数据节点,DataNode,进行具体数据的存储和访问;

(HDFS第二主节点,又称HDFS第二名称节点)

HDFS特点

流数据读写:适合顺序读写,而不是随机读写 大容量数据读写:高吞吐量数据读写,而不是多个小文件读写

HDFS默认数据块大小64MB,默认的数据块副本3个

HDFS操作接口

  1. 终端命令接口
  2. Web界面:http://master:50070
  3. 编程接口API

例子:假设有2个文件,共5个数据块,其id分别为1,2,3,4,5,2副本机制,分布式存储到3个数据节点,请设计相应的分布式存储方案。 (满足1. 每个数据块2副本;2. 每个数据节点的数据块个数(几乎)相等 ) 设计方案之一: 1:1,4,2,5 2:2,5,3 3:3,1,4

Hadoop安装部署

(系统配置一般需要root用户权限,其它一般是hadoop用户,如zkpk用户)

  1. 安装或载入(Ubuntu)虚拟机,如果该虚拟机没有Hadoop打包文件,则需要下载并解压
  2. 修改节点名称为好记的名称(hostname),e.g. master, slave, slave2
  3. 配置/etc/hosts(gedit、vim进行编辑),可以ping从节点机器名称
  4. 在主节点生成公钥和私钥(ssh-keygen,ssh-copy-id),将公钥拷贝到其它从节点机器,可以无密码ssh远程访问其它从节点机器
  5. 配置/hadoop-2.5.2/etc/hadoop/slaves(gedit、vim进行编辑)
  6. 如果需要,配置core-site.xml、hdfs-site.xml、mapred-site.xml(/hadoop-2.5.2/etc/hadoop路径下)
  7. 在主节点启动Hadoop所有进程 start-all.sh
  8. jps查看进程,master有4个进程,slave有3个进程
  9. 进行HDFS分布式文件系统命令操作,e.g. hadoop dfs -ls / , hadoop dfs -ls mkdir input-20211114, hadoop dfs -put
  10. 进行MapReduce示例程序运行,hadoop jar wordcount.jar WordCount input output e.g. hadoop jar wordcount.jar org/zkpk/day0909/WordCount /input-20211114 /output-20211114

以上步骤2、3、5、6要在每台虚拟机都需要操作。

MapReduce

MapReduce与传统并行编程框架的区别

MapReduce可扩展性好,容错性好、廉价、编程容易(数据划分、任务分发、数据通讯、负载均衡等通用任务自动处理)、数据密集型计算(不是计算密集型应用)、移动计算而不是移动数据

MapReduce体系结构 Client:客户端,提交分布式应用程序给主节点(的JobTracker); JobTracker+Task Scheduler:在主节点运行的作业跟踪和调度(一个Job有多个Task,一个Task可以是Map计算任务或者Reduce计算任务) TaskTracker:在从节点运行的具体任务执行(通过CPU、内存资源槽(slot)来分配Map或Reduce计算任务)

MapReduce工作流程

主要分为四个阶段 (数据先上传到HDFS) 1)Split:对数据进行分片 -> (key, value);

2)Map:每个数据分片上启动一个Map计算任务,计算该数据分片的数据; (key, value) -> list(out_key, intermediate_value)

3)Shuffle:对数据进行混排,类似group by; (out_key, intermediate_value) -> (out_key, list(intermediate_value))

(Combine:对相同out_key的值提前进行合并,即提前进行本地的Reduce,从而有效减少Shuffle的输出)

4)Reduce:对混排后的数据进行聚集、约减 (out_key, list(intermediate_value)) -> (out_key, out_value) (其中out_value = Agg(list(intermediate_value)) (最终结果HDFS文件系统)

MapReduce编程示例

输入: Hello World Bye World Hello Hadoop Bye Hadoop Bye Hadoop Hello Hadoop

输出: <Bye, 3> <Hello, 3> <World, 2> <Hadoop, 4>

Map输入: [Hello World Bye World] [Hello Hadoop Bye Hadoop] [Bye Hadoop Hello Hadoop]

Map输出: <Hello, 1> <World,1> <Bye, 1> <World, 1>

<Hello, 1> <Hadoop, 1> <Bye, 1> <Hadoop, 1>

<Bye, 1> <Hadoop,1> <Hello, 1> <Hadoop, 1>

Shuffle输入(=Map输出): <Hello, 1> <World,1> <Bye, 1> <World, 1>

<Hello, 1> <Hadoop, 1> <Bye, 1> <Hadoop, 1>

<Bye, 1> <Hadoop,1> <Hello, 1> <Hadoop, 1>

Shuffle输出: <Bye, <1, 1, 1>> <Hello, <1,1,1>> <World, <1,1>> <Hadoop, <1,1,1,1>>

Reduce输入(=Shuffle输出): <Bye, <1, 1, 1>> <Hello, <1,1,1>> <World, <1,1>> <Hadoop, <1,1,1,1>>

Reduce输出: <Bye, 3> <Hello, 3> <World, 2> <Hadoop, 4>

决策树

决策树分类

决策树的概念

是一种类似于流程图的树结构

  • 其中,每个内部结点表示在一个属性上的测试,每个分枝代表一个测试输出

  • 每个树叶结点存放一个类标签

实例

张(被介绍):多大年纪了?

王(介绍):25。

张:长的帅不帅?

王:挺帅的。

张:收入高不?

王:不算很高,中等情况。

张:是公务员不?

王:是,在税务局上班呢。

张:那好,我去见见。

image-20221026141318967

决策树分类ID3方法

熵(Entropy)

信息熵

实例

Race Income Child Insurance
black high no yes
white high yes yes
white low yes yes
white low yes yes
black low no no
black low no no
black low no no
white low no no

计算Race属性

计算Income属性

计算Child属性

选择Child属性后 计算Race属性

计算Income属性

选择Income属性

ID3算法缺点

  • 倾向于选择更多不同属性值的特征属性
  • 适合于处理离散属性,连续属性需要离散化

CART

Gini

数据仓库Hive理论和实践

Hive

查询接口,提供SQL -> MapReduce的转换。 Hive依托底层的HDFS进行分布式数据存储、MapReduce进行分布式数据处理或计算。

数据仓库:将异构的来自不同应用的数据源进行抽取、转换、加载到中心数据库,以提供决策分析支持。

数据仓库四大特色:面向主题、集成的、时变的、非易失的。

传统的数据仓库面临的挑战:海量数据、数据类型多样、可扩展性有限

Hive架构

Hive访问接口:命令行(CLI)、Web页面(HWI)、开放数据库连接接口(ODBC或JDBC)、Thrift Server

Driver:SQL -> MapReduce

元数据:MetaStore,存储表的定义等元数据,这些元数据存储在Derby或MySQL等关系数据库中。

Hive QL(Hive 语句) /etc/init.d/mysqld restart hive

create database *** ; show databases;

use database;

create table [if not exists] ... [partitioned by ...] [row format delimited fields terminated by '] location ' '; e.g. create table student(id int, name string, age int) row format delimited fields terminated by ' location "/data";

alter table *** add partition (...) location '...';

show tables;

load data [local] inpth '' overwrite into table *** ; e.g. load data local inpath 'student_data' overwrite into table student;

insert overwrite table *** select *** from ... ;

另一个例子(来自https://docs.cloudera.com/HDPDocuments/HDP2/HDP-2.3.4/bk_dataintegration/content/new-feature-insert-values-update-delete.html): CREATE TABLE students (name VARCHAR(64), age INT, gpa DECIMAL(3,2)) CLUSTERED BY (age) INTO 2 BUCKETS STORED AS ORC;

INSERT INTO TABLE students VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);

CREATE TABLE pageviews (userid VARCHAR(64), link STRING, from STRING) PARTITIONED BY (datestamp STRING) CLUSTERED BY (userid) INTO 256 BUCKETS STORED AS ORC;

INSERT INTO TABLE pageviews PARTITION (datestamp = '2014-09-23') VALUES ('jsmith', 'mail.com', 'sports.com'), ('jdoe', 'mail.com', null);

INSERT INTO TABLE pageviews PARTITION (datestamp) VALUES ('tjohnson', 'sports.com', 'finance.com', '2014-09-23'), ('tlee', 'finance.com', null, '2014-09-21');

echo ... > file.txt e.g. echo "Hello Hadoop!" > westart.txt ... echo "Bye Hadoop!" > wecomplete.txt

hope every guy enjoys our special time ...

关联规则

关联规则的挖掘原理

相关概念

项集(Itemset)

项(Item)的集合

关联规则

支持度(supp)

其中,|D|表示事务数据库D的事务个数

置信度(conf)

其中,|A|表示数据库中包含项集A的事务个数

阈值

  • 最小支持度(min_supp)
  • 最小置信度(min_conf)

频繁项集(Frequent Itemset)

项集满足最小支持度,即: 性质:

  • 频繁项集的子集必是频繁项集
  • 非频繁项集的超集一定是非频繁的

强关联规则

同时满足最小支持度(min_supp)和最小置信度(min_conf)的规则称之为强关联规则,即

Apriori算法

min_supp=2

MapReduce

MapReduce与传统并行编程框架的区别

MapReduce可扩展性好,容错性好、廉价、编程容易(数据划分、任务分发、数据通讯、负载均衡等通用任务自动处理)、数据密集型计算(不是计算密集型应用)、移动计算而不是移动数据

补充:CPU、内存、磁盘的组合:共享内存(多个CPU共用一块内存)、共享磁盘(多个CPU共用一块磁盘)、非共享(每个CPU都独享内存和磁盘)、计算存储分离

分布式并行编程框架 MPI(Message Passing Interface,消息传递接口):多进程通讯标准,主要有6个标准函数; PThread:多线程并行编程框架; 编译制导:OpenMP

MapReduce体系结构 一主多从 Client:客户端,提交分布式应用程序给主节点(的JobTracker); JobTracker+Task Scheduler:在主节点运行的作业跟踪和调度(一个Job有多个Task,一个Task可以是Map计算任务或者Reduce计算任务) TaskTracker:在从节点运行的具体任务执行(通过CPU、内存资源槽(slot)来分配Map或Reduce计算任务)

MapReduce工作流程

主要分为四个阶段 (数据先上传到HDFS) 1)Split:对数据进行分片 -> (key, value);

2)Map:每个数据分片上启动一个Map计算任务,计算该数据分片的数据; (key, value) -> list(out_key, intermediate_value)

3)Shuffle:对数据进行混排,类似group by; (out_key, intermediate_value) -> (out_key, list(intermediate_value))

(Combine: 对相同out_key的值提前进行合并,即提前进行本地的Reduce,从而有效减少Shuffle的输出 Map之后,Shuffle之前进行的本地Reduce操作)

4)Reduce:对混排后的数据进行聚集、约减 (out_key, list(intermediate_value)) -> (out_key, out_value) (其中out_value = Agg(list(intermediate_value)) (最终结果HDFS文件系统)

补充:分区一般分为:范围分区、哈希分区、列表分区 Shuffle:计算->溢写(分区、排序、合并(combine))->合并(多个文件)

Hadoop+Eclipse/IntelliJ IDEA(从而可以在IDE上用Java进行分布式计算应用程序开发,如:WordCount)

Hadoop MapReduce框架中的数据类型

字符串:Text 整型:IntWritable (长整型:LongWritable) 浮点型:FloatWritable, DoubleWritable 布尔型:BooleanWritable 空类型:NullWritable

Writable:需要序列化和反序列化

序列化:A: object -> byte -> B: object :反序列化

如何用Java程序定义Wordcount的map和reduce的输入和输出,即它们的输入输出类型和含义分别是什么? map() 输入:<Object row, Text value> 输出:<Text word, IntWritable one>

reduce() 输入:<Text word, List(IntWritable value)> 输出:<Text word, IntWritable count>

Wordcount部署

1)编译并打包(可用Eclipse的export打为jar包或命令行模式javac和jar进行编译和打包 ); (编译需要的Hadoop jar包:hadoop-common-.jar, hadoop-mapreduce-core-.jar, commons-cli-**.jar)

2)运行Hadoop Wordcount程序;(先要将数据上传到HDFS中) (运行命令:hadoop jar WordCount.jar WordCount input output)

3)(到HDFS中)查看结果。

数据挖掘原理

知识发现过程

知识发现过程定义

  • 知识发现(KDD):从数据中发现有用知识的整个过程。

  • 数据挖掘(DM) :KDD过程中的一个特定步骤,它用专门算法从数据中抽取模式。

数据挖掘方法和技术概述

数据挖掘常用技术

  • 关联分析

  • 分类

  • 聚类

  • 人工神经网络等

关联分析

若两个或多个数据项的取值之间重复出现且概率很高时,它就存在某种关联,可以建立起这些数据项的关联规则。

一般用“支持度”和“可信度”两个阈值来淘汰无用的关联规则。

数据挖掘工具

  • SAS Enterprise Miner
  • SPSS Clementine
  • IBM Intelligent Miner
  • Oracle Data Miner
  • SSAS、SSIS、SSRS

云数据库理论

云计算

云计算:通过对(硬件、平台、软件)资源的虚拟化提供按需服务。

IaaS:基础设施即服务,存储、计算、网络等硬件资源通过虚拟化以服务形式提供,关键词:host; PaaS:平台即服务,开发平台和操作系统以服务的形式提供,关键词:build; SaaS:软件即服务,应用软件以服务形式提供,关键词:consume。

云数据库的特点

高可扩展性、高可用性、易用性、易维护、高性能、廉价、安全

亚马逊云数据库(Database): SimpleDB:键值数据库云服务 DynamoDB:键值数据库云服务 RDS(Relational Database Service):关系数据库云服务 ElastiCache:内存缓存云服务

补充: Amazon 云计算服务AWS: IaaS(内容分发网络,边缘节点) Networking:Route 53 Compute:EC2(Elastic Compute Cloud),ELB(Elastic Load Balancing) Storage:S3(Simple Storage Service),EBS(Elastic Block Storage),Glacier

Google云数据库

Microsoft云数据库: Azure

UMP(Unified MySQL Platform):阿里云的云数据库产品 数据库:MySQL Mnesia:分布式数据管理系统、支持事务、数据分片管理等 RabbitMQ:组件间异步消息传递和处理 Zookeeper:分布式协调管理,例如:集群管理、统一命名服务,状态同步服务、分布式锁 LVS(Linux Virtual Server):负载均衡(IP负载均衡、内容请求均衡)、请求路由 Controller:控制服务器,元数据(如集群成员、配置信息、状态信息、路由信息)管理,运行Mnesia Proxy:代理服务器,面向用户提供连接管理(认证、配额、转发等) Agent:运行在MySQL的节点上,管理MySQL实例(例如:MySQL数据库的创建、删除、备份等) 愚公系统:基于bin-log分析进行不停机的数据增量复制和迁移 其它:日志分析、信息统计、Web控制台

补充: 消息传递:同步消息(面向连接)、异步消息(面向队列(小站?) QPS:Queries Per Second,IOPS:I/O Per Second

全栈贯通技术人才:大数据系统人才、智能计算系统人才

联机分析处理

OLAP的概念

联机分析处理(OLAP)

A、交互性:联机

B、维(dimension):分析数据的角度

立方体(超过三维的立方体称为超立方体或多维空间)

维的层次(hierarchy)

例.时间维:

​ 年-季度-月-天

​ 年-学期-周 (每一层称为 级别(level)

维的成员(member)

维的一个取值

多维数组(多维空间)

维和度量的组合

数据单元(单元格)

多维数组的一个取值

如果查询结果保存起来,则称该查询视图物化

OLAP的多维数据分析

多维分析

切片(slice)/切块(dice)

切片:单个维度分析

切块:两个或以上维度分析

钻取

向下钻取(Drill-down)下钻:粗粒度----->细粒度分析

向上钻取(Roll-up)上卷:细粒度----->粗粒度分析

旋转(pivot)

不同维度的置换

求不同城市的总销售量

1
2
3
4
select sum(sale_unit) from sale
join time on time.Q = sale.Q
join city on city.C = sale.C
group by city.C;

OLAP的存储模型

OLAP实现架构

ROLAP:关系表 ----->存储空间更小

MOLAP:多维数组----->查询效率高

Eg.sale(产品)(季度)(城市)------->value

产品 季度 城市 value
TV Q1 北京
CD Q2 上海
PC Q3 广州
ALL ALL ALL

实现框架:

1、ROLAP:基于关系表,存储空间效率高,利用关系数据库特性

​ Relational

2、MOLAP:基于多维数组,查询效率高

​ Multi-dimensional

3、HOLAP:包含综合数据(MOLAP)和详细数据(ROLAP)

​ Hybrid

HTAP

事务型数据库:OLTP,以写为主,行存

分析型数据库:OLAP,以读为主,列存

混合事务分析型数据库:HTAP

  • TP、AP资源物理分离
  • TP、AP数据一致性:
    • 强一致性
    • 弱一致性

国产数据库示例

PolarDB-X数据库

结构框架:

下推

BI

image-20221019192403264

数据立方体和商立方体

物化视图选择

Greedy Algorithm(贪心算法)

  • k = number of views to be materialized

  • Given

    • v is a view

    • S is a set of views which are selected to be materialized

  • Define the benefit of selecting v for materialization as

    • B(v, S) = Gain(S U v, S)
  • S <--{top view};

  • For i = 1 to k do

    • Select that view v not in S such that B(v, S) is maximized;

    • S <-- S U {v}

  • Resulting S is the greedy selection

1st Choice(M) 2nd Choice(M)
pc (6-6)*3 = 0 (6-6)*2 = 0
ps (6-0.8)*3 = 15.6
sc (6-6)*3 = 0 (6-6)*2 = 0
p (6-0.2)*1 = 5.8 (0.8-0.2)*1=0.6
s (6-0.01)*1 = 5.99 (0.8-0.01)*1 = 0.79
c (6-0.1)*1 = 5.9 (6-0.1)*1 = 5.9

Two views to be materialized are

1、ps 2、c

V = {ps, c}

Gain(V U {top view}, {top view})

= 15.6 + 5.9 = 21.5

数据立方体

商立方体

习题讲解

数据转换一般可以分为:

  • 工具转换

  • 人工转换

事实表的特点:

  • 数据量大
  • 表中行数多
  • 表中数据常进行追加

数据集市的特点:

  • 主题少
  • 数据少
  • 建设周期短
  • 风险小