Spark作业运行架构及常见问题

本文深入探讨Spark作业的运行架构,从Spark作业提交、运行模式、算子分类到RDD特性,详细解析了map、flatmap、reduceByKey、groupByKey、aggregateByKey的区别。此外,还介绍了内存不足的处理策略、Spark与MapReduce的效率差异,以及Spark如何与Kafka对接的两种方式,并对比了Receiver方式与Direct方式的优缺点。
摘要由CSDN通过智能技术生成

1.Spark作业运行架构

(1)、将编写的程序打成 jar 包,调用 spark-submit 脚本提交任务到集群上运行
(2)、运行 sparkSubmit 的 main 方法,在这个方法中通过反射的方式创建我们编写的主类的实例对象,然后调用 main 方法,开始执行我们的代码(注意,我们的 spark 程序中的 driver就运行在 sparkSubmit 进程中)
(3)、当代码运行到创建 SparkContext 对象时,那就开始初始化 SparkContext 对象了
(4)、在初始化 SparkContext 对象的时候,会创建两个特别重要的对象,分别是:DAGScheduler 和 TaskScheduler,初始化 DAG Scheduler、 Task Scheduler。
【DAGScheduler 的作用】依据 RDD 的宽依赖切分成一个一个的 stage,然后将 stage 作为 taskSet提交给 DriverActor
(5)、在构建 TaskScheduler 的同时,会创建两个非常重要的对象,分别是 DriverActor 和ClientActor
【clientActor 的作用】向 master 去进行注册并申请资源(CPU Core 和 Memory)
【DriverActor 的作用】接受 executor 的反向注册,将任务提交给 executor
(6)、当 ClientActor 启动后,会将用户提交的任务和相关的参数封装到 ApplicationDescriptio对象中,然后提交给 master 进行任务的注册
(7)、当 master 接受到 clientActor 提交的任务请求时,会将请求参数进行解析,并封装成Application,然后将其持久化,然后将其加入到任务队列 waitingApps 中
(8)、当轮到我们提交的任务运行时,就开始调用 schedule(),进行任务资源的调度
(9)、master 将调度好的资源封装到 launchExecutor 中发送给指定的 worker
(10)、worker 接受到 Master 发送来的 launchExecutor 时,会将其解压并封装到 ExecutorRunner中,然后调用这个对象的 start(), 启动 Executor
(11)、Executor 启动后会向 DriverActor 进行反向注册
(12)、driverActor 会发送注册成功的消息给 Executor
(13)、Executor 接受到 DriverActor 注册成功的消息后会创建一个线程池,用于执行 DriverActor发送过来的 task 任务
(14)、当属于这个任务的所有的 Executor 启动并反向注册成功后,就意味着运行这个任务的环境已经准备好了,driver 会结束 SparkContext 对象的初始化,也就意味着 new SparkContext这句代码运行完成
(15)、当初始化 sc 成功后,driver 端就会继续运行我们编写的代码,然后开始创建初始的 RDD,然后进行一系列转换操作,当遇到一个 action 算子时,也就意味着触发了一个 job
(16)、driver 会将这个 job 提交给 DAGScheduler
(17)、DAGScheduler 将接受到的 job,从最后一个算子向前推导,将 DAG 依据宽依赖划分成一个一个的 stage,然后将 stage 封装成 taskSet,并将 taskSet 中的 task 提交给 DriverActor
(18)、DriverActor 接受到 DAGScheduler 发送过来的 task,会拿到一个序列化器,对 task 进行序列化,然后将序列化好的 task 封装到 launchTask 中,然后将 launchTask 发送给指定的Executor
(19)、Executor 接受到了 DriverActor 发送过来的 launchTask 时,会拿到一个反序列化器,对launchTask 进行反序列化,封装到 TaskRunner 中,然后从 Executor 这个线程池中获取一个线程,将反序列化好的任务中的算子作用在 RDD 对应的分区上.

2.Spark有几种运行模式

4种:standalone模式,Local模式,Spark on YARN 模式,mesos模式。
Spark提供了一个容易上手的应用程序部署工具bin/spark-submit,可以完成Spark应用程序在local、Standalone、YARN、Mesos上的快捷部署。可以指定集群资源master,executor/ driver的内存资源等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值