Spark总结02

下面的是对Spark总结01的复习以及详细的讲解

一、作业提交的执行流程

Spark总结02

 Spark总结02

Spark总结02

1)Spark程序写完之后,就要提交到spark集群上面去运行,这就是spark作业(一次代码的运行+一份数据的处理+一次结果的产出)。

2) Spark作业是通过spark集群中的多个独立的进程(executor)并行执行的,每个进程处理一部分数据,从而做到分布式并行计算,才能做到对大数据并行处理和计算。作业在多个进程中的运行,是通过sparkContext对象来居中调度的,该对象在Driver进程中。(包含main方法的程序进程)

3)sparkContext支持连接多种集群管理器(spark Standalone,Yarn,Mesos),集群管理器负责sparkContext代表的spark application

在集群中分配资源的。

这里说的资源是什么?就是分配多少个进程(executor),然后每个进程都得有cpu core和内存资源,有了进程、cpu、内存,spark应用程序才能运行。

这里的进程具体是什么?怎么工作的?

sparkContext会向集群管理器去申请资源,然后集群管理器就会在集群节点上,分配一个或者多个executor进程,这些进程就会负责运行spark作业代码。

每个进程怎么运行我们的代码的呢?

申请到了executor进程之后,sparkContext会发送我们的工程jar包到executor上,接着SparkContext会将一些task分发到executor上,每个task执行具体的代码,并处理一小片数据,此外注意的一点是executor进程,会负责存储你的spark作业代码计算出来的一些中间数据,或者最终结果数据。

二、Spark集群架构的几点说明:

对上述的具体说明(spark application和executor的之间的关系、spark application和集群管理器的之间的关系、driver进程和executor的之间的关系、driver一定和executor所在的集群距离要近可以减少网络通信)

1)每个spark application应用程序,都有属于自己的executor进程,绝对不可能出现多个spark application 共享一个executor进程的。

 executor进程,在整个spark application运行的生命周期内,都会一直存在,不会自己消失的。

executor进程,最主要的就是使用了多线程的方式,运行sparkContext分配过来的task,来一批task就会执行一批,一批执行完了,再去执行下一批task。

2)spark application,跟集群管理器之间是透明的,不管是哪个集群管理器(Master、Yarn、Mesos),我就知道,我找你申请到executor进程就好了。通常我们在生成环境下会使用Yarn作为集群管理器。

3)driver(其实就是main类运行的进程),必须时刻监听属于他这个spark application的executor进程发来的通信和连接,而且除了监听,自己也会负责调度整个spark作业(自己写的代码),也得和executor进程通信,给他们分配计算任务,所有driver在网络环境中的位置,还是很重要的,driver尽量离spark集群近一点。

4)driver要调度task给executor执行,所有driver最好和spark集群在同一片网络中。

Spark总结02

三、Spark常用术语 

application:spark应用程序,说白了,就是用户基于spark api 开发的程序,一定是通过一个有main方法的类执行的。

Application jar:这个就是把写好的spark工程,打成jar包,其中包括了第三方jar依赖包,比如java中,用maven+assemly插件打包最方便。

Driver program:说白了,就是运行程序中main方法的进程,这就是driver,也是driver进程。

CLusterManager:集群管理器,就是为每个spark application,在集群中调度和分配资源的组件,比如 spark standalone,Yarn,Meos等。

DeployMode:部署模式,无论基于哪种集群管理器,spark作用部署和运行模式都有两种,都分为两种,client和cluster。

Worker Node:集群中的工作节点,能够运行executor进程,运行作业代码的节点。

Executor:集群管理器为application分配的进程,运行在worker节点上,负责执行作业的任务,并将数据保存到内存或者磁盘中,每个application都有属于自己的 executor进程。

Job: 每个application,根据你执行了多少个 acction,就会有多少个job。

Stage:每个Job会被划分为多个Stage(阶段),每个Stage都会对应一批task,分配到execcutor上执行。

Task:driver发送到executor上执行的计算单元,每个task负责在一个阶段,处理一小片数据,计算出对应的结果。

四、Spark standalone集群架构

Spark总结02

Spark总结02

Spark总结02

五、单独启动Master和Worker

Spark总结02

Spark总结02

六、spark闭包

Spark总结02

Spark总结02

解决闭包的问题,使用共享变量。

七、shuffle操作原理详解

1)Shuffle原理

Spark总结02

Spark总结02

Spark总结02

2)Shuffle操作过程中数据排序

Spark总结02

3)Shuffle操作中的算子

Spark总结02

4)Shuffle操作性能消耗原理

Spark总结02

5)Shufffle操作参数以及调优

Spark总结02Spark总结02

八、算子原理

1)union算子原理

Spark总结02

2)groupByKey算子原理

Spark总结02Spark总结02

3)reduceByKey算子原理

Spark总结02

Spark总结02

4)distinct算子原理

Spark总结02

Spark总结02

5)cogroup算子原理

Spark总结02

6)intersection算子原理

Spark总结02

Spark总结02

7)join算子原理

Spark总结02

Spark总结02

8)SortBykey算子原理

Spark总结02

9)cartesian算子原理

Spark总结02

10)coalesce算子原理

Spark总结02

11)repartition算子原理

Spark总结02

九、SparkSQL

基于DataFrame进行项目处理 (开窗函数使用)