温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

spark内核架构解密(13)

发布时间:2020-08-11 22:32:16 来源:网络 阅读:461 作者:lct19910210 栏目:大数据

 本期主要介绍下spark的内核架构。spark的应用程序总体来说,主要包括两部分,一部分是Driver,其包括了SparkConf和SparkContext,另一部分就是Executor,运行具体的业务逻辑。

 应用程序的提交有两种方式,

    1、Driver进程运行在客户端,对应用程序进行监控。

     2、主节点指定某个worker节点启动Driver,负责整个应用的监控。

 Driver一般运行在一台专门用来提交spark程序的机器上,这台机器一般一定和spark cluster在同样的网络环境中(因为Driver要频繁的和Execuotr进行通信,实质上是CorarseGrainExecutorBackend),并且配置和普通的Worker节点一致。可以通过spark-submit去运行程序,与此同时可以指定运行的各种参数,例如memory、cores...。实际生产环境写shell脚本自动化配置和提交程序,当然当前的机器一定安装了Spark,只不过当前机器不属于集群罢了。

 Driver的核心是SparkContext,而SparkContext依赖于SparkConf。SparkContext在初始化的时候会创建DAGScheduler、TaskScheduler、SchedulerBackend。

  在实例化的过程中回向Master注册应用程序,Master接受注册,如果没有问题,Master会为当前的应用程序分配AppId并分配计算资源。Master接受用户提交的程序并给Worker发送指令为当前的应用程序分配计算资源。每个Worker节点默认情况下为当前的程序分配一个Executor,在Executor中通过线程池并发执行。Worker节点收到Master发送的LaunchExecutor指令后,会创建ExecutorRunner实例,并调用start方法,来启动CoarseGrainExecutorBackend进程。CoarseGrainExecutorBackend进程里有Executor,并且CoarseGrainExecutorBackend和Executor是一一对应的。Executor内部会维护一个线程池,实际工作的时候,通过TaskRunner来封装task,然后从ThreadPool获取一条线程执行task,执行完后,线程会被回收复用。

 在spark中,Transformation操作是延迟计算的,当有action算子时才会触发job。SparkContext会通过DAGScheduler把job中的RDD构成的DAG划分成不同的stage,每个stage内部都是一系列业务逻辑完全相同但是处理数据不同的Tasks,构成TaskSet。

 TaskScheduler和SchedulerBackend负责具体的task的执行(遵循数据本地性)。

 一个应用程序有可能包含多个stage,最后一个Stage中的Task称为ResultTask,产生job结果。其他前面的Stage中的Task都称为ShuffleMapTask,作为下一个Stage的数据输入,相当与MapReduce中的Mapper。

 整个Spark程序的运行,就是DAGScheduler把job划分成不同的Stage,提交TaskSet给TaskScheduler,进而提交给Executor执行(符合数据本地性),每个Task会计算RDD中的一个Partition,基于该Partition来具体执行我们定义的一系列同一个Stage内部的函数,以此轮推...直到整个程序运行完成。




向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI