下面的是对Spark总结01的复习以及详细的讲解
一、作业提交的执行流程
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常用术语
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集群架构
五、单独启动Master和Worker
六、spark闭包
解决闭包的问题,使用共享变量。
七、shuffle操作原理详解
1)Shuffle原理
2)Shuffle操作过程中数据排序
3)Shuffle操作中的算子
4)Shuffle操作性能消耗原理
5)Shufffle操作参数以及调优
八、算子原理
1)union算子原理
2)groupByKey算子原理
3)reduceByKey算子原理
4)distinct算子原理
5)cogroup算子原理
6)intersection算子原理
7)join算子原理
8)SortBykey算子原理
9)cartesian算子原理
10)coalesce算子原理
11)repartition算子原理
九、SparkSQL
基于DataFrame进行项目处理 (开窗函数使用)