BigData-数据仓库学习
一、相关技术1、技术选型
2、系统数据流程设计
二、数仓分层1、数据仓库分层
2、范式理论
第一范式:属性不可分割性。
第二范式:不能存在“部分函数依赖”
第三范式:不能存在传递函数依赖。
3、关系建模和维度建模
联机事务处理OLTP(on-line transaction processing)
OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。
联机分析处理OLAP(On-Line Analytical Processing)
OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
二者对比
对比属性
OLTP
OLAP
读特性
每次查询只返回少量记录
对大量记录进行汇总
写特性
随机、低延时写入用户的输入
批量导入
使用场景
用户,Java EE项目
内部分析师,为决策提供支持
数据表征
最新数据状态
随时间变化的历史状态
数据规模
GB
TB到PB
3.1 关系建模
关系模型如图所示,严格遵循第三范式(3NF),从图中可以看出,较为松散、零碎,物理表数量多 ...
算法学习记录
一、介绍1、常见的数据结构
「队列」、「栈」这两种数据结构既可以使⽤链表也可以使⽤数组实现。⽤数组实现,就要处理扩容缩容的问题;⽤链表实现,没有这个问题,但需要更多的内存空间存储节点指针。
「图」的两种表⽰⽅法,邻接表就是链表,邻接矩阵就是⼆维数组。邻接矩阵判断连通性迅速,并可以进⾏矩阵运算解决⼀些问题,但是如果图⽐较稀疏的话很耗费空间。邻接表⽐较节省空间,但是很多操作的效率上肯定⽐不过邻接矩阵。
「散列表」就是通过散列函数把键映射到⼀个⼤数组⾥。⽽且对于解决散列冲突的⽅法,拉链法需要链表特性,操作简单,但需要额外的空间存储指针;线性探查法就需要数组特性,以便连续寻址,不需要指针的存储空间,但操作稍微复杂些。
「树」,⽤数组实现就是「堆」,因为「堆」是⼀个完全⼆叉树,⽤数组存储不需要节点指针,操作也⽐较简单;⽤链表实现就是很常⻅的那种「树」,因为不⼀定是完全⼆叉树,所以不适合⽤数组存储。为此,在这种链表「树」结构之上,⼜衍⽣出各种巧妙的设计,⽐如⼆叉搜索树、AVL树、红⿊树、区间树、B 树等等,以应对不同的问题。
2、常见的算法框架
数组遍历框架,典型的线性迭代结构:
12345 ...
BigData--分布式流数据流引擎Apache Flink
官网:https://flink.apache.org/
一、Flink的重要特点1)事件驱动型(Event-driven)
事件驱动的应用程序是一个有状态的应用程序,它从一个或多个事件流接收事件,并通过触发计算、状态更新或外部操作对传入事件作出反应。
事件驱动应用程序是传统应用程序设计的一种发展,它具有分离的计算和数据存储层。在这种体系结构中,应用程序从远程事务数据库读取数据并将其持久化。
相反,事件驱动应用程序基于有状态流处理应用程序。在这个设计中,数据和计算被放在同一个位置,从而产生本地(内存或磁盘)数据访问。容错是通过定期将检查点写入远程持久存储来实现的。下图描述了传统应用程序体系结构与事件驱动应用程序之间的区别。
kafka作为消息队列就是一种典型的事件驱动型应用。
2) 流、批(stream,micro-batching)
Spark中,一切都是批次组成的,离线数据是一个大批次,实时数据是一个个无限的小批次组成的。
Flink中,一切都是由流组成的,离线数据是有界限的流,实时数据是一个没有界限的流,这就是所谓的有界流和无界流。
3)分层API
越顶层越抽象,最 ...
BigData--大数据技术之Spark机器学习库MLLib
MLlib fits into Spark’s APIs and interoperates with NumPy in Python (as of Spark 0.9) and R libraries (as of Spark 1.5). You can use any Hadoop data source (e.g. HDFS, HBase, or local files), making it easy to plug into Hadoop workflows.
1、Spark MLib介绍
MLlib 是 Spark 的机器学习库,旨在简化机器学习的工程实践工作,并方便扩展到更大规模。
MLlib 由一些通用的学习算法和工具组成,包括分类、回归、聚类、协同过滤、降维等,同时还包括底层的优化原语和高层的管道 API。
名称
说明
数据类型
向量、带类别的向量、矩阵等
数学统计计算库
基本统计量、相关分析、随机数产生器、假设检验等
算法评测
AUC、准确率、召回率、F-Measure 等
机器学习算法
分类算法、回归算法、聚类算法、协同过滤等
...
BigData--大数据技术之SparkStreaming
Spark Streaming用于流式数据的处理。Spark Streaming支持的数据输入源很多,例如:Kafka、Flume、Twitter、ZeroMQ和简单的TCP套接字等等。数据输入后可以用Spark的高度抽象原语如:map、reduce、join、window等进行运算。而结果也能保存在很多地方,如HDFS,数据库等。
1、SparkStreaming架构
依赖(采用scala 2.12.x版本)123456789101112131415161718192021222324252627282930<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.12</artifactId> <version>2.4.6</version></dependency><dependency> <groupId>org.apache.spark&l ...
BigData--大数据技术之SparkSQL
一、Spark SQL概述1、DataFrame
与RDD类似,DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息,即schema。同时,与Hive类似,DataFrame也支持嵌套数据类型(struct、array和map)。从API易用性的角度上看,DataFrame API提供的是一套高层的关系操作,比函数式的RDD API要更加友好,门槛更低。
2、DataSet
1)是Dataframe API的一个扩展,是Spark最新的数据抽象。
2)用户友好的API风格,既具有类型安全检查也具有Dataframe的查询优化特性。
3)Dataset支持编解码器,当需要访问非堆上的数据时可以避免反序列化整个对象,提高了效率。
4)样例类被用来在Dataset中定义数据的结构信息,样例类中每个属性的名称直接映射到DataSet中的字段名称。
5) Dataframe是Dataset的特列,DataFrame=Dataset[Row] ,所以可以通过as方法将Dataframe转换为Dataset。Row是一个类 ...
BigData--大数据分析引擎Spark
一、Spark运行1、Spark内置模块
Spark Core:实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core中还包含了对弹性分布式数据集(Resilient Distributed DataSet,简称RDD)的API定义。
Spark SQL:是Spark用来操作结构化数据的程序包。通过Spark SQL,我们可以使用 SQL或者Apache Hive版本的SQL方言(HQL)来查询数据。Spark SQL支持多种数据源,比如Hive表、Parquet以及JSON等。
Spark Streaming:是Spark提供的对实时数据进行流式计算的组件。提供了用来操作数据流的API,并且与Spark Core中的 RDD API高度对应。
Spark MLlib:提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据 导入等额外的支持功能。
集群管理器:Spark 设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计 算。为了实现这样的要求,同时获得最大灵活性,Spark支 ...
大数据利器--Scala语言学习(高级)
Scala高级一、集合
Scala 的集合有三大类:序列 Seq、集 Set、映射 Map,所有的集合都扩展自 Iterable 特质,在 Scala 中集合有可变(mutable)和不可变(immutable)两种类型。
1.Set、Map 是 Java 中也有的集合。
2.Seq 是 Java 没有的,我们发现 List 归属到 Seq 了,因此这里的 List 就和 java 不是同一个概念了。
3.我们前面的 for 循环有一个 1 to 3 ,就是 IndexedSeq 下的 Vector。
4.String 也是属于 IndexeSeq。
5.我们发现经典的数据结构比如 Queue 和 Stack 被归属到 LinearSeq。
6.大家注意 Scala 中的 Map 体系有一个 SortedMap,说明 Scala 的 Map 可以支持排序。
7.IndexSeq 和 LinearSeq 的区别[IndexSeq 是通过索引来查找和定位,因此速度快,比如 String 就是一个索引集合,通过索引即可定位] [LineaSeq 是线型的,即有头尾的概念,这种数据结构 ...
大数据利器--Scala语言学习(基础)
Scala
Scala combines object-oriented and functional programming in one concise, high-level language. Scala’s static types help avoid bugs in complex applications, and its JVM and JavaScript runtimes let you build high-performance systems with easy access to huge ecosystems of libraries.
给大家推荐一个在线的scala文档网站:https://static.runoob.com/download/Scala%E8%AF%AD%E8%A8%80%E8%A7%84%E8%8C%83.pdf
1、Scala基本的程序结构说明123456789101112131415161718//对 scala 的基本的程序结构说明//1. object 是一个关键字,表示一个伴生对象//2. 如果该文件只出现了一个 o ...
BigData-Apache HBase数据库
HBaseHBase
Apache](https://www.apache.org/) HBase™ is the Hadoop database, a distributed, scalable, big data store.
一、HBase原理1、数据模型1 ) Name Space
命名空间,类似于关系型数据库的 DatabBase 概念,每个命名空间下有多个表。HBase有两个自带的命名空间,分别是 hbase 和 default,hbase 中存放的是 HBase 内置的表,default 表是用户默认使用的命名空间。
2 ) Region
类似于关系型数据库的表概念。不同的是,HBase 定义表时只需要声明列族即可,不需要声明具体的列。这意味着,往 HBase 写入数据时,字段可以动态、按需指定。因此,和关系型数据库相比,HBase 能够轻松应对字段变更的场景。
3 ) Row
HBase 表中的每行数据都由一个 RowKey 和多个 Column(列)组成,数据是按照 RowKey的字典顺序存储的,并且查询数据时只能根据 RowKey 进行检索,所以 RowKe ...