spark内核架构解密(13)-创新互联

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

创新互联是一家以成都网站建设、网页设计、品牌设计、软件运维、seo优化、小程序App开发等移动开发为一体互联网公司。已累计为活动板房等众行业中小客户提供优质的互联网建站和软件开发服务。

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

    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内部的函数,以此轮推...直到整个程序运行完成。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前名称:spark内核架构解密(13)-创新互联
当前路径:http://pwwzsj.com/article/egceo.html