spark on yarn cluster 模式
有哪些角色 resourceManager nodeManager hdfs , 还有以后提交任务的一个客户端,1.客户端会想resourceManager提交任务,ResourceManager向Client返回application ID,2.客户端拿着这个applicationID,以及客户端的用户名,还有jar包,配置文件上传到hdfs中3.上传完成之后,再跟resourceManager 里面的applcations Mananger进行通信,然后他会跟其中的一个nodeManager进行通信,然后让nodeManager下载jar包,(下载jar后必须要启动一个一个applcationMaster,appMaster里面以后运行sparkContext,jar包是spark提供,因为这个application比较特殊,里面有sparkcontext,以后构建DAG,创建RDD,切分stage,产生Task,)(jar包包括自己起的jar包,spark提供的一些核心的jar包,)4.jar包下载下来之后,启动一个进程,进程为applicationMaster,在这个进程里面运行的是sparkSet,也就是driver,5.当applicationMaster启动起来之后,就会根resourceManager进行通信,然后会跟ResourceSchedule进行通信,获取以后要在哪些nodeManager里面启动容器的信息,这个时候拿到的是容器的描述信息.6.ResourceSchedule把描述的信息返给AplicationMaster之后,会跟对应的nodeManager进行通信,7.让nodeManager启动容器需要jar包,所以nodeManager向hdfs下载jar包,然后再启动容器,这个容器就是未来的executor,8.容器启动之后,就像ApplicationMaster反向注册,以后就可以创建RDD,调用task里面的transfrmation 和action,一旦触发action就会构建DAG,创建RDD,切分stage,产生task,然后再把task调度到executor里面.
spark on yarn client 模式 1.客户端向ResourceManager申请资源,在客户端启动一个Driver进程,2.driver端进程会向ResourceManager发送请求,启动applicationMaster3.ResounrceManager会跟其中的一个nodeManager进行通信,让nodeManager启动一个特殊的进程,这个特殊的进程叫做executorlancutor,4.然后他跟resourceManger进行通信,申请容器信息,拿到容器信息之后,就跟nodeManager进行通信,让nodeManager启动executor,5.executor启动完成之后,向driver反向注册,driver在提交任务的进程里面,(启动的第一个aplicationMaster的主要作用就是与resourceManager进行通信,申请容器,然后,拿到申请容器之后,就跟NodeManager进行通信,让nodeManager启动容器,一旦容器启动,他也就不再产生作用,他相当于一个被阉割了的aplicationMaster,他里面不运行SparkContext),sparkContext在driver端运行.)一旦nodaManager里面的executor启动起来了,第一个启动的applicationMaster,也就失去作用在那种情况下必须跑client模式, 在启动spark shell 或者是sparksql的时候,因为这样可以在界面上显示具体的内容spark的内存管理:主要是在executor端需要内存和核数,但在driver端也可以分配一定的内存和核数 但是通常我们说的内存管理,我们说的是executor,因为executor才是存储运行数据的逻辑,task也都在executor里面,一个executor里面可以运行多个task多个task可以共享一个进程里面的内存
1.client与ResourceManager进行通信,ResourceManager返回一个ApplicationID,2.client根据信息,打包成一个jar包,上传到HDFS里面3.上传完成之后又跟ResourceManager中的applicationsManager进行通信,说已经上传完成4.ResourceManager中的applicationsManager就跟其中一个nodeManager进行通信,前提是这个nodeManager有足够的内存,然后他会到hdfs下载jar包,5.然后在这个节点上启动一个特殊的 容器,叫做appMaster,(application master)6.这个appMaster启动起来之后,在跟ResourceManager里面的ResourceSchedule进行通信,申请资源,获取容器的描述信息,拿到容器的描述信息之后,接下来 会跟对应的nodeManager进行通信,对应的nodeManger下载jar,开启容器(也就是开启executor)7.容器先反向注册,然后就可以运行具体的任务了,8.执行的过程中会定期的向application Manager进行定期的汇报,也就是 报活执行进度会返回客户端,注意容器是谁启动的 appmaster里面的容器是appMaster启动的,nodeManager的容器是nodeManager与appMaster进行RPC通信,然后让nodeManager启动容器,