第六章 Spark Core进阶
Spark核心概述
1 Application = 1 Driver + n Executors
Driver :
用来创建SparkContext和执行袋中的main方法
Cluster Manager :
为集群上的任务分配资源(包括CPU、内存等),有Mesos、Standalone、YARN等
Deploy Mode:
cluster模式:Driver运行在集群上
client模式:Driver运行在本地
Worker node:
执行运算的节点
Executor:
运行在Worker node上的进程,作用是执行计算任务和在计算过程中将数据写入内存或磁盘中
每一个Application都有独自的Executors
Task:
被发送到Executor上的一个工作单元(计算任务)
Job:
包含多个Task的并行的计算任务
被Spark的action触发
Stage:
每个Job会被分割成多个task集,每个task集就叫做Stage,Stage之间有依赖关系
Spark运行架构以及注意事项
Cluster Manger可以给Application分配Core、Memory、Executor(去工作节点上申请),SparkContext发送jar包或py文件给Executor,也会发送task给Executor运行
注意:
- (非常重要!)每个Application有自己独立的Executors,这些Executors到Application结束都会一直存在,task在Executors中以多线程方式运行。这样使得各个Application之间是独立运行的。但是,如果不把数据写在外部的存储系统里的话,Spark Application之间是不能进行数据共享的。
- Spark对于底层的Cluster Manager是不感知的,就是不知道代码运行在哪里,写Spark不需要关注运行在哪里。
- Driver需要监听和接收来自Executors的心跳。所以Driver和Executor之间需要建立网络链接。
- Driver需要距离Worker node尽可能近,最好在同一个局域网
Spark 和 Hadoop 重要概念区分
Spark Cache详解
直接将数据存入内存,下次使用时直接从缓存中获取
存储级别
StorageLevel源码分析
Spark也会自动在shuffle之后缓存数据
Spark使用LRU对内存中的数据进行删除
从缓存中手动删除RDD
如何选择StorageLevel?
Spark Lineage 详解
Spark Dependency 详解
能够触发shuffle的操作