第六章 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运行

注意:

  1. (非常重要!)每个Application有自己独立的Executors,这些Executors到Application结束都会一直存在,task在Executors中以多线程方式运行。这样使得各个Application之间是独立运行的。但是,如果不把数据写在外部的存储系统里的话,Spark Application之间是不能进行数据共享的。
  2. Spark对于底层的Cluster Manager是不感知的,就是不知道代码运行在哪里,写Spark不需要关注运行在哪里。
  3. Driver需要监听和接收来自Executors的心跳。所以Driver和Executor之间需要建立网络链接。
  4. Driver需要距离Worker node尽可能近,最好在同一个局域网

Spark 和 Hadoop 重要概念区分

Spark Cache详解

直接将数据存入内存,下次使用时直接从缓存中获取


存储级别

StorageLevel源码分析


Spark也会自动在shuffle之后缓存数据

Spark使用LRU对内存中的数据进行删除
从缓存中手动删除RDD


如何选择StorageLevel?

Spark Lineage 详解

Spark Dependency 详解




能够触发shuffle的操作