没有合适的资源?快使用搜索试试~ 我知道了~
spark课程复习资料
资源推荐
资源详情
资源评论
1
第一章
1、Spark 的生态系统:Spark:基于内存运算,代替 Hadoop 中的计算(MapReduce)
Sqoop:基于内存(内存编程模式);MapReduce:离线编程模式
Spark 和 Hadoop 的区别和联系:
对比项
Spark
Hadoop
大数据框架
是
是
分布式存储
本身没有存储特性,支持 HDFS
自带 HDFS
并行计算
是
是
计算效率
内存计算效率高
调用磁盘 ID 较多,相对慢
框架
支持 Yarm,HDFS,但是不强制依赖
强制依赖 YARN 和 HDFS
2、Spark 的构架设计和运行流程:
Spark 作业运行流程
1、构建 Spark Application 的运行环境,启动𝑆𝑝𝑎𝑟𝑘𝐶𝑜𝑛𝑡𝑒𝑥𝑡
2、𝑆𝑝𝑎𝑟𝑘𝐶𝑜𝑛𝑡𝑒𝑥𝑡向资源管理器 Spark Master(可以是 Standalone、Mesos、
YARN)注册申请运行 Executor 资源
3、资源管理器分配 Executor 资源,并启动 Executor。并且 Executor 发送心跳给资源管理器
4、Executor 向𝑆𝑝𝑎𝑟𝑘𝐶𝑜𝑛𝑡𝑒𝑥𝑡申请 Task
5、𝑆𝑝𝑎𝑟𝑘𝐶𝑜𝑛𝑡𝑒𝑥𝑡将应用程序分发给 Executor。具体包括构建 DAG 图,将 DAG 图分
解成 Stage,将 Taskset 发送给𝑇𝑎𝑠𝑘𝑆𝑐ℎ𝑒𝑑𝑢𝑙𝑒𝑟,以及由 Task Scheduler 将 Task 发
送给 Executor 运行。
6、Task 在 Executor 上运行,运行完释放所有资源。
Spark 使用 Scala 语言进行开发,Scala 运行在 Java 平台之上
Spark 运行在 Linux 操作系统下
Linux 的操作系统的好处:文件操作系统(一切皆为文件)、开源(免费)
2
3、𝑆𝑝𝑎𝑟𝑘𝐶𝑜𝑛𝑡𝑒𝑥𝑡:
①𝑆𝑝𝑎𝑟𝑘𝐶𝑜𝑛𝑡𝑒𝑥𝑡是开发 Spark 应用的入口,它负责和整个集群的交互,包括创建𝑅𝐷𝐷、构
建 DAG 图。
②从本质上来说,𝑆𝑝𝑎𝑟𝑘𝐶𝑜𝑛𝑡𝑒𝑥𝑡是 Spark 的对外接口,负责向调用这提供 Spark 的各种功能
4、Spark 支持部署方式:常见模式
(1)Local(本地)模式(2)Standalone 模式(3)Spark on YARN 模式
(4)Spark on Mesos 模式(5)部署到 Amazon 𝐸𝐶2
Standalone 模式:由 Master+Slaves 构成的 Spark 集群,分为伪分布式或全分布
式,不需要依赖资源管理器如 YARN,Mesos 等。
Spark on YARN 模式:运行在 YARN 资源管理器框架之上,由 YARN 负责资源管
理,Spark 负责任务调度和计算。
Spark On Mesos 模式:运行在 Apache Mesos 资源管理器框架之上,由 Mesos
负责资源管理,Spark 负责任务调度和计算。
Spark 其他部署方式
1、Amazon 𝐸𝐶2——亚马逊弹性云计算平台
2、Kubernetes(𝐾8𝑠)——开源的自动部署,扩展和管理容器的系统。
5、Spark 启动模式
常用端口:域名解析器:翻译成 IP 地址 8081:worker 的𝑊𝑒𝑏𝑈𝐼
7077:spark 基于 standalone 的提交任务的端口号 8080:master 的𝑊𝑒𝑏𝑈𝐼
启动基于 Python 的 Spark 交互式命令行的命令是:𝑝𝑦𝑠𝑝𝑎𝑟𝑘
6、Spark 提交任务方式:
spark-submit --master xxx --class xxx --name xxx 𝑥𝑥𝑥.jar args
3
7、Spark 的特点:处理速度快、基于内存、高容错率、实时
第四章:𝑹𝑫𝑫知识点
MPP 数据库(Massively Parallel Processing):
MPP 架构是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自
部分的结果汇总在一起得到最终的结果。采用 MPP 架构的数据库称为 MPP 数据库。
𝑅𝐷𝐷是一种可扩展的弹性分布式数据集,是 Spark 最基本的数据抽象,表示一个只读、
分区且不变的数据集合,是一种分布式的内存抽象,不具备 Schema 的数据结构,可以
基于任何数据结构创建,如 tuple(元组)、𝑑𝑖𝑐𝑡(字典)和 list(列表)等。
详解:
只读:不能修改,只能通过转换操作生成新的 𝑅𝐷𝐷。
分布式:可以分布在多台机器上进行并行处理。
弹性:计算过程中内存不够时它会和磁盘进行数据交换。
基于内存:可以全部或部分缓存在内存中,在多次计算间重用
为什么𝑅𝐷𝐷无 Schema?
1、schema 可以理解为关系数据库的表结构,是强约束的,如果操作不存在的列,会报
错,业务变化是扩充列比较麻烦
2、no schema 也就是不用表结构,数据结构自由度很高,可以随意指定
𝑅𝐷𝐷的特性:parallelize--取最大核数(分区数)、textFile--取最小核数 来源于文本
1、𝑅𝐷𝐷是分区(分片)组成的列表 2、𝑅𝐷𝐷是以单个分区为单位进行计算
3、𝑅𝐷𝐷之间存在依赖关系 4、𝑅𝐷𝐷决定计算数据如何分区
5、𝑅𝐷𝐷决定在哪些位置计算分区数据
1、𝑅𝐷𝐷是分区(分片)组成的列表(分区是一个物理概念;𝑅𝐷𝐷是一个逻辑概念)
✓数据会被切分为多个分区,分布在 worker 上处理
✓每个分区都会被一个任务处理。(并行处理任务<=分区)
✓sc.𝑝𝑎𝑟𝑎𝑙𝑙𝑒𝑙𝑖𝑧𝑒 创建 𝑅𝐷𝐷 时,可以指定𝑅𝐷𝐷的分区数,如果没有指定,采用默认
值。默认值=min(2,分配的 CPU 核数)
✓使用外部文件创建 𝑅𝐷𝐷 时,在默认情况下,Spark 为文件的每一个 block(块)
创建的一个 partition 分区(HDFS 中块大小默认值是 128𝑀𝐵、有三个进程)
3、𝑅𝐷𝐷之间存在依赖关系
𝑅𝐷𝐷每一次转换都生成一个新的𝑅𝐷𝐷,多个𝑅𝐷𝐷之间有前后依赖关系。在某个分区数据
丢失时,Spark 可以通过依赖关系重新计算丢失的分区数据,而不是重头对𝑅𝐷𝐷的所有
分区数据进行计算。→容错性
4、𝑅𝐷𝐷决定计算数据如何分区
✓Partitioner 是𝑅𝐷𝐷中的分区函数,key-value 数据按一定规则分配到指定的 Partitioner
上去处理。
✓两种分区:Hash Partitioner、𝑅𝑎𝑛𝑔𝑒𝑃𝑎𝑟𝑡𝑖𝑡𝑖𝑜𝑛𝑒𝑟
Transformation(转换算子、懒加载)&Action(动作算子):
1、𝑅𝐷𝐷经过 Transform 以后还是𝑅𝐷𝐷。
2、𝑅𝐷𝐷经过 Action 算子操作之后,不再返回𝑅𝐷𝐷。
3、𝑅𝐷𝐷运行 Transform 都是惰性的,只记录不执行,直至 Action 算子才会全部执行。
𝑅𝐷𝐷的创建方法:
1.Spark 可以通过调用𝑆𝑝𝑎𝑟𝑘𝐶𝑜𝑛𝑡𝑒𝑥𝑡的方法(是以下的𝑠𝑐)将一个已存在的集合变成𝑅𝐷𝐷。
2.Spark 可以从本地文件系统、文本文件、𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒𝐹𝑖𝑙𝑒𝑠、HDFS、Cassandra、
4
HBase、𝐴𝑚𝑎𝑧𝑜𝑛𝑆3以及 Hadoop 所支持的任何存储源中创建𝑅𝐷𝐷。
代码:
#1 从外部本地文件系统创建
>>> 𝑟1=sc.textFile(“/home/hadoop/spark-exp/wc.txt”) #r1 是𝑅𝐷𝐷
>>> 𝑟1.collect()
#2 通过已存在的并行集合创建
>>> 𝑟2=sc.parallelize([1,2,3,4,5,6,7,8,9,10]) #r2 是𝑅𝐷𝐷
#第 2 个参数可以指定分区数量,例如这里是 5
>>> 𝑟3=𝑠𝑐.parallelize([1,2,3,4,5,6,7,8,9,10],5)
#3 分区
𝑠𝑐.𝑝𝑎𝑟𝑎𝑙𝑙𝑒𝑙𝑖𝑧𝑒(['a','b','c','d','e','f','g'],4). 𝑔𝑙𝑜𝑚().collect
[['a'],[′𝑏′,'c'],['d','e'],['f','g']] #如何进行分区
𝑠𝑐. 𝑝𝑎𝑟𝑎𝑙𝑙𝑒𝑙𝑖𝑧𝑒(['a','b']).𝑓𝑙𝑎𝑡𝑚𝑎𝑝(lambda x: (𝑥,[x,1]))
[′𝑎′,'a',1,'b','b',1]:flatmap 函数-压平
#4、如何进行分区--转换算子里-重点
𝑟3=𝑠𝑐.parallelize(𝑟𝑎𝑛𝑔𝑒(0,7),3)
#parallelize():对𝑅𝐷𝐷进行分区
𝑟3. 𝑔𝑙𝑜𝑚(). 𝑐𝑜𝑙𝑙𝑒𝑐𝑡()
#collect():以列表形式返回𝑅𝐷𝐷,最后是列表形式
[[0,1], [2,3], [4,5,6]]
具体过程:
[split*size/𝑛𝑢𝑚𝑠𝑙𝑖𝑐𝑒𝑠,(split+1)*size/numslices)
[0,1,2,3,4,5,6],𝑝𝑠=3(分区数),num=7,index=0,1,2(分区数:3)
𝑅𝐷𝐷 算子:
算子
T/A
作用分类
说明
collect
A
输出
返回𝑅𝐷𝐷所有元素组成的列表
reduce
A
输出
类似 MapReduce 的
Reducer,执行归并操作
𝑠𝑎𝑣𝑒𝐴𝑠𝑇𝑒𝑥𝑡𝐹𝑖𝑙𝑒
A
输出
输出文本结果到文件目录
map
T
map 操作
类似 MapReduce 的
Mapper,处理每个元素,可以
返回新的数据结构
𝑓𝑙𝑎𝑡𝑀𝑎𝑝
T
map 操作
会把所有返回的集合类型如
list,𝑑𝑖𝑐𝑡,tuple 全部遍历展平
foreach
A
map 操作
处理每个元素,无返回值
filter
T
筛选
自定义过滤
5
distinct
T
筛选
去重
take(n)
A
筛选
取前 N 个
first
A
筛选
取第一个
𝑠𝑜𝑟𝑡𝐵𝑦
T
排序
返回排序的数据,默认升序
top(n)
A
排序
返回降序的数据前 N 个元素
join
T
连接操作
内连接
𝑙𝑒𝑓𝑡𝑂𝑢𝑡𝑒𝑟𝐽𝑜𝑖𝑛
T
连接操作
左外连接
𝑟𝑖𝑔ℎ𝑡𝑂𝑢𝑡𝑒𝑟𝐽𝑜𝑖𝑛
T
连接操作
右外连接
𝑢𝑛𝑖𝑜𝑛(𝑅DD)
T
集合
合并
𝑖𝑛𝑡𝑒𝑟𝑠𝑒𝑐𝑡𝑖𝑜𝑛(RDD)
T
集合
交集
𝑠𝑢𝑏𝑡𝑟𝑎𝑐𝑡(RDD)
T
集合
减去交集
𝑚𝑎𝑝𝑃𝑎𝑟𝑡𝑖𝑡𝑖𝑜𝑛𝑠
T
分区
针对每一个分区做 Map 操作
𝑚𝑎𝑝𝑃𝑎𝑟𝑡𝑖𝑡𝑖𝑜𝑛𝑠𝑊𝑖𝑡ℎ𝐼𝑛𝑑𝑒𝑥
T
分区
针对每一个分区做 Map 操作,
带分区参数
glom
T
分区
把每个分区数据列表作为元素,
组成新列表
coalesce
T
分区
归并(reduce)分区数量 n
aggregate:从初始值开始,聚合各个分区结果,再把分区结果聚合。类似 MapReduce。
aggregate(𝑧𝑒𝑟𝑜𝑉𝑎𝑙𝑢𝑒【初始值】,𝑠𝑒𝑞𝑂𝑝【分区操作】,𝑐𝑜𝑚𝑏𝑂𝑝【分区结果
聚合操作】)
代码:
>>> 𝑟𝑑𝑑=sc.𝑝𝑎𝑟𝑎𝑙𝑙𝑒𝑙𝑖𝑧𝑒([1, 2, 3, 4], 2)
>>> 𝑟𝑑𝑑.aggregate(0,lambda x,y:max(𝑥,y),𝑙𝑎𝑚𝑏𝑑𝑎 x,𝑦:x+y)
6
𝑔𝑒𝑡𝑁𝑢𝑚𝑃𝑎𝑟𝑡𝑖𝑡𝑖𝑜𝑛𝑠():统计分区数(去重后,分区数不变。除非指定分区数)
Pair 𝑅𝐷𝐷 简介:
1、Spark 为包含键值对(key-value)类型的𝑅𝐷𝐷提供了一些专有的操作,这些𝑅𝐷𝐷
被称为𝑃𝑎𝑖𝑟𝑅𝐷𝐷。在 Python 数据结构体现为 2 个元素的元组,例如(‘𝑘𝑒𝑦’, ‘𝑣𝑎𝑙𝑢𝑒’)
2、键值对 𝑅𝐷𝐷 是一种常见的数据类型,具有广泛的应用,像聚合计算等。
3、𝑃𝑎𝑖𝑟𝑅𝐷𝐷 提供了并行操作各个键或跨节点重新进行数据分组的操作接口。
𝑷𝒂𝒊𝒓𝑹𝑫𝑫 的转换(Transformation)
𝑟𝑒𝑑𝑢𝑐𝑒𝐵𝑦𝐾𝑒𝑦(f)
将相同 key 的值聚合到一起,与
𝑔𝑟𝑜𝑢𝑝𝐵𝑦𝐾𝑒𝑦类似,reduce 任务的个数
可以通过第二个可选的参数来设置
𝑔𝑟𝑜𝑢𝑝𝐵𝑦𝐾𝑒𝑦()
在一个(K,𝑉)的𝑅𝐷𝐷上调用,返回一个
(K, Iterator[V])的𝑅𝐷𝐷,(没有入参)
剩余29页未读,继续阅读
资源评论
大象代码
- 粉丝: 219
- 资源: 13
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功