Spark总结02

32 篇文章 1 订阅
22 篇文章 0 订阅

下面的是对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进行项目处理 (开窗函数使用)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值