spark提交运行

Spark任务提交执行流程

Spark任务的本质是对我们编写的RDD的依赖关系切分成一个个Stage,将Stage按照分区分批次的生成TaskSet发送到Executor进行任务的执行

Spark任务分两种:

  1. shuffleMapTask:shuffle之后的task

  2. resultTask:shuffle之前的task

Spark任务分配有两种方式:

  1. 尽量打撒方式(系统默认)

  2. 尽量集中方式

首先把App打包上传到集群上,并开始分配资源及调用包中的主类。

  1. 在Driver端,调用SparkSubmit类,内部执行submit–>doRunMain–>通过反射获取应用程序的主类对象(远程代理对象)–>执行主类的main方法,这是提交

  2. Driver端构建SparkConf和SparkContext对象,在SparkContext入口类做了三件事,创建了SparkEnv对象(创建了ActorSystem对象)、TaskScheduler(用来生成并发送task给Executor)、DAGScheduler(用来划分Stage)

  3. ClientActor将任务信息封装到ApplicationDescription对象里并且提交给Master

  4. Master收到ClientActor提交的任务信息后,把任务信息存到内存中,然后又将任务信息放到队列中(waitingApps)

  5. 当开始执行这个任务信息时,调用scheduler方法,进行资源调度。

  6. 将调度好的资源封装到LaunchExecutor并发送给对应的Worker

  7. Worker接收到Master发送过来的调度信息(LaunchExecutor)后,将信息封装成一个ExecutorRunner对象

  8. 封装成ExecutorRunner后,调用ExecutorRunner的Start方法,开始启动CoarseGrainedExecutorBackend对象(启动Executor)

  9. Executor启动后向DriverActor进行反向注册

  10. 与DriverActor注册成功后,创建一个线程池(ThreadPool),用来执行任务

  11. 当所有Executor注册完成后,意味着作业环境准备好了,Driver端会结束与SparkContext对象的初始化

  12. 当Driver初始化完成后(创建了一个sc示例),会持续执行我们自己提交的App的代码,当触发了Action的RDD算子时,就触发了一个job,这时会调用DAGScheduler对象进行Stage划分

  13. DAGScheduler开始进行Stage划分

  14. 将划分好的Stage按照分区生成一个一个的task,并且封装到TaskSet对象,然后TaskSet提交到TaskScheduler

  15. TaskScheduler接收到提交过来的TaskSet,拿到一个序列化器对TaskSet序列化,将序列化好的TaskSet封装到LaunchExecutor并提交到DriverActor

  16. DriverActor把LaunchExecutor发送到Executor上

  17. Executor接收到DriverActor发送过来的任务(LaunchExecutor),会将其封装成TaskRunner,然后从线程池中获取线程来执行TaskRunner

  18. TaskRunner拿到反序列化器,反序列化TaskSet,然后执行App代码,也就是对RDD分区上执行的算子和自定义函数

spark提交运行

cd $SPARK_HOME/bin
spark-submit
--master	master 的地址,提交任务到哪里执行,例如 spark://host:port,  yarn,  local--deploy-mode    在本地 (client) 启动 driver 或在 cluster 上启动,默认是 client
--class	应用程序的主类,仅针对 java 或 scala 应用
--name	应用程序的名称
jar包路径
spark-submit --master local --name sparkTask1 --class org.example.task1.sparkTask1 ./jobSpark1-1.0-SNAPSHOT.jar 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码上行舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值