Skip to content

1. 每章的核心概念,尤其作业中的问答题
2. 大数据平台(Hadoop,HBase,Hive,Spark等)的架构和原理
3. MapReduce和Spark的编程模型和编程方法,可以结合讲义、作业和实验中的程序复习;不考MPI编程和HBase编程。其中程序填空要求填代码(可以用不同的语言,但要表达清楚),MapReduce程序设计可以写伪代码或代码,Spark编程要求能读懂程序,掌握常用API和算子。建议同学们复习时阅读讲义中的代码,并回顾下作业和实验中的编程题。

大数据概述

1 大数据背景简介

  • 大数据背景

    • 信息化浪潮:信息处理-信息传输-信息爆炸
    • 重点 科学研究范式

  • 什么是数据:对现实世界特定方面的一种记录。这些记录可以是数字、文字、图像、声音等多种形式。数据可以以多种形式存在:结构化、半结构化、非结构化数据。

  • 重点 docs/学校课程/归档课程/大数据/笔记/概述#2.请解释数据、信息、知识的区别和关系。

  • 什么是大数据:超大的难以用现有常规的数据库管理技术和工具处理的数据集。

  • 重点 大数据5v 特征

  • 大数据类型

    • 按照结构特征划分:
      • 结构化、半结构化、非结构化
    • 重点 docs/学校课程/归档课程/大数据/笔记/概述#3.请简述结构化数据/半结构化数据/非结构化数据的区别。

    • 按照获取和处理方式划分:
      • 在线 (实时)
      • 离线
    • 关联特征划分:
      • 无关联,简单关联数据(键值数据)
      • 复杂关联数据(图数据)
  • 大数据涉及的关键技术

    • 软件是大数据的引擎
    • 海量数据存储技术:分布式文件系统
    • 实时数据处理技术:流计算引擎
    • 数据高速传输技术:服务器/存储间高速通信
    • 搜索技术:文本检索、智能搜索、实时搜索
    • 数据分析技术:自然语言处理、文本情感分析、机器学习、聚类关联、数据模型

重点

  • docs/学校课程/归档课程/大数据/笔记/概述#5.请简述金融数据的特征。

2 并行计算基础

  • 提高计算机硬件性能的主要手段

    • 提高处理器字长
    • 提高集成度
    • 流水线等微体系结构技术(指令级并发)
    • 提高处理器频率
    • 单核处理器性能提升接近极限
  • Scale up:纵向扩展,指的是通过增强单个节点的硬件性能来提高系统的处理能力。 - 优点:维护简单,无需更改架构 - 缺点:成本高,物理上限,故障

  • Scale out:横向扩展,指的是通过增加更多的节点到现有系统中,分散处理负载。每个节点可能性能普通,但通过并行工作来提升整体性能。

    • 优点:灵活,中低端硬件,容错性
    • 缺点:分布式架构,管理较为复杂
  • 重点 为什么需要并行计算

  • 并行计算的分类

  • 并行计算的主要技术特点问题
    • 重点 docs/学校课程/归档课程/大数据/作业/p2#3.为什么可靠性设计与容错是并行计算的主要技术问题?

  • docs/学校课程/归档课程/大数据/笔记/概述#系统性能评估

  • MPI 并行程序设计的特点:提供可靠的、面向消息(基于消息传递)的通信;在高性能科学计算领域广泛使用,适合于处理计算密集型的科学计算;独立于语言的编程规范,可移植性好。并行计算粒度大*,特别适合于大规模可扩展并行算法

    • 用户必须通过显式地发送和接收消息来实现处理机间的数据交换
    • 每个并行进程均有自己独立的地址空间,相互之间访问不能直接进行,必须通过显式的消息传递来实现。(所有节点运行同一个程序,但处理不同的数据)
  • MPI 通信机制

    • 点对点通信:同步、异步
    • 节点集合通信:广播、同步、规约(对一组数据进程执行特定操作如求和并传送给一个进程)等
    • 用户自定义的复合数据类型传输
  • 不足:

  • 无良好的数据和任务划分支持
  • 缺少分布文件系统支持分布数据存储管理
  • 通信开销大,当计算问题复杂、节点数量很大时,难以处理,性能大幅下降
  • 无节点失效恢复机制,一旦有节点失效,可能导致计算过程无效
  • 缺少良好的构架支撑,程序员需要考虑以上所有细节问题,程序设计较为复杂

Hadoop 与 MapReduce

3 MapReduce 简介

  • 大数据处理:分而治之

    • 前后数据项之间具有强依赖关系的计算只能串行(如斐波那契)
    • 当大数据可以划分为具有同样计算过程的数据块,并且之间不存在数据依赖关系时使用并行计算
    • image.png|350
    • image-20230924175519140
  • docs/学校课程/归档课程/大数据/笔记/Hadoop#Map 和 Reduce

4 Google MapReduce 的基本架构

Google MapReduce

  • 重点 MapReduce的主要功能和设计思想

  • 工作过程

    • image.png
    • 首先对输入数据切片(slip)
    • 用户作业将程序提交给主节点,主节点寻找可用的 map、reduce 节点节点并传送程序给节点
    • map 节点启动任务,将中间结果存储在本地并告知主节点
    • 所有 map 节点完成之后启动 Reduce ,从 map 节点告诉主节点的位置取数据
    • reduce 节点将计算结果汇总到结果文件
  • docs/学校课程/归档课程/大数据/笔记/Hadoop#失效处理

  • docs/学校课程/归档课程/大数据/笔记/Hadoop#优化

GFS

  • Google GFS 是一个基于分布式集群的大型分布式文件系统,为 MapReduce 计算框架提供数据存储和数据可靠性支撑;数据存储在物理上分布的每个节点上,但通过 GFS 将整个数据形成一个逻辑上整体的文件。
  • docs/学校课程/归档课程/大数据/笔记/Hadoop#基本架构
  • 重点 docs/学校课程/归档课程/大数据/作业/p3#2.简述GFS的基本设计原则和数据访问过程。

BigTable 基本工作原理

  • 在 GFS 之上的一个结构化数据存储和访问管理系统
  • 主要解决一些大型媒体数据(Web 文档、图片等)的结构化存储问题。其结构化粒度没有那么高,也没有事务处理等能力,因此,它并不是真正意义上的数据库。

  • 设计目标:高度可扩展、高吞吐、海量服务、高容错、多类型数据

  • 重点 p3

  • docs/学校课程/归档课程/大数据/笔记/Hadoop#BigTable 基本架构

5 Hadoop MapReduce 基本架构

  • Hadoop 是一个能够对大量数据进行分布式处理的软件框架,并且是以一种可靠、高效、可伸缩的方式进行处理的,
  • 特性:高可靠性;高效性;高可扩展性;高容错性;成本低;运行在 Linux 平台上;支持多种编程语言。

HDFS

  • 基本构架
    • image.png|400
    • 重点 p4

    • 重点 p4

  • docs/学校课程/归档课程/大数据/笔记/Hadoop#纠错
  • HDFS 客户端:

    • HDFS 客户端是一个库,暴露了 HDFS 文件系统接口
    • 严格来说,客户端并不算是 HDFS 的一部分。
    • 客户端可以支持打开、读取、写入等常见的操作,提供 shell 命令以及 Java 接口
  • 读写过程

    • image.png|375
    • image.png|400
      • ack package:确认收到

Hadoop MapReduce

  • 基本构架 (1.0)

    • image.png|425
    • image.png|425
    • 所有任务由 JobTracker 调度分配,存在单点故障问题
    • TaskTracker 资源分配不够合理(只根据任务个数进行分配),不能按需分配
  • YARN (v2.0)

    • image.png|425
    • image.png|425**
  • image.png
    • 重点 p4

6/7/8/9 MapReduce 编程

docs/学校课程/归档课程/大数据/笔记/Hadoop#MapReduce 流水线

MapReduce 编程编程

  • docs/学校课程/归档课程/大数据/笔记/Hadoop#基本框架

  • 用户自定义数据类型

    • 实现 Writable 接口(或 WritableComparable)
    • 含 write、readFields
  • 复合键值对的使用:使用复合键值对进行分布式排序(避免进行本地排序)

    • docs/学校课程/归档课程/大数据/笔记/Hadoop#复合键值对
  • docs/学校课程/归档课程/大数据/笔记/Hadoop#自定义输入输出类型

  • docs/学校课程/归档课程/大数据/笔记/Hadoop#自定义Partitioner和Combiner

  • docs/学校课程/归档课程/大数据/笔记/Hadoop#迭代MapReduce

  • docs/学校课程/归档课程/大数据/笔记/Hadoop#链式MapReduce任务

重点

*10/11/12 MapReduce 数据挖掘基础算法(不考实现)

13 NoSQL 数据库

  • RDBMS:关系型数据库管理系统
    • 模式固定,面型行的数据库,具有 ACID 性质和复杂的 SQL 查询
    • 效率低、复杂、扩展性差
  • SQL:结构化查询语言,用于管理关系数据库管理系统(RDBMS)

  • 关系型数据库

  • 优势:以完善的关系代数理论作为基础,有严格的标准,支持事务ACID四性,借助索引机制可以实现高效的查询
  • 劣势:可扩展性较差,无法较好支持海量数据存储,数据模型过于死板无法较好支持 Web 2.0 应用,事务机制影响了系统的整体性能等

  • NoSQL 数据库

  • 优势:可以支持超大规模数据存储,灵活的数据模型可以很好地支持 Web 2.0 应用,具有强大的横向扩展能力
  • 劣势:缺乏数学理论基础,复杂查询性能不高,大都不能实现事务强一致性,很难实现数据完整性

重点

  • p6

NoSQL

  • Not Only SQL:不仅仅是 SQL,泛指非关系型数据库
  • 放松了对传统数据库ACID 事务处理特征和数据高度结构化的要求,以简化设计、提高数据存储管理的灵活性、提高处理性能、支持良好的水平扩展

  • docs/学校课程/归档课程/大数据/笔记/NoSQL#NoSQL兴起原因

  • docs/学校课程/归档课程/大数据/笔记/NoSQL#NoSQL分类

  • NoSQL 的三大基石

    • CAP
    • BASE
    • 最终一致性

重点

  • p6

重点

  • p6
  • docs/学校课程/归档课程/大数据/笔记/NoSQL#最终一致性
  • docs/学校课程/归档课程/大数据/笔记/NoSQL#NewSQL

14 HBase 基础原理与程序设计

  • 为什么需要 HBase

    • Hadoop 无法满足大数据实时访问(HDFS 面向面向批量访问而不是随机访问)
    • 传统关系型数据库扩展性差,结构化浪费空间
    • 解决大规模数据实时处理问题
  • 与 MapReduce 协同工作,为 MapReduce 提供数据输入输出,以完成数据的并行化处理 docs/学校课程/归档课程/大数据/笔记/HBase#^c0574a

HBase 数据模型

重点

  • p7

重点

  • p7
  • image.png|400

HBase 的基本架构

重点

  • p7
数据存储结构
  • image.png|450

    • 一个大表分隔为许多 Region 进行存储
  • image-20231123225704179

  • Region Server cluster->Region server->Region->store->memStore+StoreFile
  • Region:表的一个子集,包含了一系列连续的行,数据物理存储和分布的基本单元
    • 由一个 RegionServer 负责管理数据的读写,当大小增大到一定阈值会被分裂,新的 Region最初并不复制或移动数据。它们仍然读取原始 Region 的存储文件(由于不需要立即复制数据,这使得拆分操作可以非常快速地完成,几乎是瞬间的)。(异步)随后在后台进行合并过程,逐渐把原始文件中属于新 Region 的数据异步地写入新的独立文件
    • 即时可用:由于新 Region一开始就可以读取原始 Region 的文件,它们立即变得可用。
    • 最终一致性:随着时间的推移,新 Region最终会有自己独立的存储文件,完成分裂。
  • store
  • Store 是 Region 中的逻辑分区,对应于一个列族,每个列族存储在自己的 Store 中。
  • memstore
  • MemStore 是 Store 的一部分,是一个位于内存中的数据结构,用来缓存即将写入文件系统的数据。
  • storefile
  • StoreFile 是 Store 的持久化表示,是存储在HDFS 上的文件,具体格式为 HFile。
数据查询和定位

重点

  • p7 docs/学校课程/归档课程/大数据/笔记/HBase#HBase 数据工作原理

HBase Shell

docs/学校课程/归档课程/大数据/笔记/HBase#HBase表设计

难点

docs/学校课程/归档课程/大数据/笔记/HBase#HBase Shell

重点

15 Hive 简介

  • Hive 包括一个高层语言的执行引擎,类似于SQL的执行引擎,方便对数据进行查询汇总、分析

    • 自动将 SQL 转化为 MapReduce 执行
  • 优点:可扩展性、延展性、良好的容错性

  • 缺点:

    • 查询延时很严重,不适用于交互查询系统
    • 不是为在线事务处理设计,主要用于 OLAP 而不是而不是 OLTP
      • OLTP 是一种面向事务的数据处理方式。它主要用于管理日常事务和操作,如银行交易、零售销售等。(高实时性)
      • OLAP 是一种面向分析的数据处理方式。它主要用于复杂的数据分析和查询,包括趋势分析、报告生成等。
  • Hive 本身不存储数据,是逻辑表:通过元数据来描述 Hdfs 上的结构化文本数据。

  • 逻辑上,数据是存储在 Hive 表里面的,而表的元数据描述了数据的布局。我们可以对表执行过滤,关联,合并等操作。在 Hadoop 里面,物理数据一般是存储在 HDFS 的,而元数据是存储在关系型数据库的。

  • RDBMS vs. Hive

    • HiveQL 提供提供了与 SQL 类似的查询语言
    • Hive 使用的是 Hadoop 的 HDFS,关系数据库则是服务器本地的文件系统;
    • Hive 使用的计算模型是 MapReduce,而关系数据库则是自己设计的计算模型;
    • 关系数据库都是为实时查询的业务进行设计的,而 Hive 则是为海量数据做数据挖掘设计的,实时性很差

重点

p8

重点

p8

重点

p8

难点

Hive Shell

docs/学校课程/归档课程/大数据/笔记/Hive#Hive QL

重点

16 Spark 简介

  • MapReduce 计算模式的缺陷:2阶段固定模式,磁盘计算大量 I/O 性能低下
  • Spark基于内存计算思想提高计算性能,提出一种基于内存的弹性分布式数据集(RDD),通过对 RDD 的一系列操作完成计算任务,可以大大提高性能

  • RDDs

  • 基于 RDD 之间的依赖关系组成 lineage,通过重计算以及 checkpoint 等机制来保证整个分布式计算的容错性。
  • 只读、可分区,这个数据集的全部或部分可以缓存在内存中,在多次计算间重用,弹性是指内存不够时可以与磁盘进行交换

  • spark 与 hadoop

    • spark 中间数据中间数据在内存中,不需要反复 IO,处理效率高
    • spark 引入 RDD 抽象以及检查点,容错性更高
    • spark 支持支持更多种类的操作,更加通用

重点

docs/学校课程/归档课程/大数据/作业/p9#简述Spark的技术特点

Spark 架构

重点

docs/学校课程/归档课程/大数据/作业/p9#简述Spark的基本构架组成


重点

docs/学校课程/归档课程/大数据/作业/p9#简述 Spark 的调度过程

重点

docs/学校课程/归档课程/大数据/笔记/Spark#Spark的程序执行过程

17/18/19/20 Spark 编程

  • 以 RDD 为核心,RDD 一旦创建就不能修改,任何转换操作都会生成新的 RDD,并且 RDD 能在任何节点失败的情况下恢复数据 docs/学校课程/归档课程/大数据/笔记/Spark#RDD 的基本概念

docs/学校课程/归档课程/大数据/笔记/Spark#RDD 编程

docs/学校课程/归档课程/大数据/笔记/Spark#示例

高级编程

Spark SQL
  • 用来操作结构化和半结构化数据
  • 很好的兼容性:兼容 Hive,还可以从 RDD、Parquet 文件、JSON 文件中获取数据,可以在 Scala 代码里访问 Hive 元数据,执行 Hive 语句,并且把结果取回作为 RDD 使用,也支持从外部工具中通过 JDBC/ODBC 连接 Spark SQL 进行查询;

  • SparkContext 是 Spark 的早期编程接口,主要用于 RDD 操作。而 SparkSession 是 Spark 2.0 之后引入的新接口,是 DataFrame 和 DataSet API 的主要入口点。

    val conf = new SparkConf().setAppName("Spark Pi").setMaster("local")
    val sc = new SparkContext(conf)
    
    val spark = SparkSession.builder.appName("Spark").master("local").getOrCreate()
    

重点

docs/学校课程/归档课程/大数据/作业/p10#简述RDD、DataFrame、DataSet的区别

docs/学校课程/归档课程/大数据/笔记/Spark#Spark SQL 编程

Spark 机器学习
  • MLlib 是 Spark 实现一些常见的机器学习算法和实用程序,面向 RDD;

  • Spark ML 是基于 DataFrame 进行机器学习 API 的开发,抽象层次更高。把数据处理的流水线抽象出

  • ML Optimizer 优化器会选择最合适的,已经实现好了的机器学习算法和相关参数

docs/学校课程/归档课程/大数据/笔记/Spark#MLlib

docs/学校课程/归档课程/大数据/笔记/Spark#ML

Spark 流式计算
  • Spark Streaming 将流式计算分解成一系列短小的批处理作业
  • 使用 DStream,可以在全部数据到达之前开始进行计算,实现所谓的 "在线算法" 或 "流式处理",将实时计算分解为一系列小的、时间间隔内批处理任务。这些任务独立而确定,易于管理和调度。
  • 在每个时间间隔内,系统会接收输入数据并将其可靠地存储在集群中,形成一个输入数据集
  • 当一个时间间隔结束时,Spark 对应的数据集会并行地进行 Map、Reduce、groupBy 等操作,产生中间数据或新的输出数据集,这些数据被存储在 RDD 中。

  • 基本流程:

    • 首先创建 StreamingContext
    • 通过创建输入 DStream 来创建输入数据源。
    • 通过对 DStream 定义 transformation 和 output 算子操作,来定义实时计算逻辑
    • 调用StreamingContext的start()方法,来开始实时处理数据

重点

docs/学校课程/归档课程/大数据/作业/p10#简述批量计算和流式计算的区别

docs/学校课程/归档课程/大数据/笔记/Spark#Apache Kafka

重点

docs/学校课程/归档课程/大数据/作业/p10#简述Spark Streaming和Spark Structured Streaming的区别

GraphX
  • GraphX 是 Spark 中用于图和图并行计算的 API
  • GraphX通过扩展Spark RDD引入一个新的图抽象,一个将有效信息放在顶点和边的有向多重图

重点

docs/学校课程/归档课程/大数据/作业/p10#简述GraphX的弹性分布式属性图的设计思想

重点

p4

21 云计算简介

docs/学校课程/归档课程/大数据/笔记/云计算