美文网首页
5分钟了解spark on yarn

5分钟了解spark on yarn

作者: 曾二爷耶 | 来源:发表于2018-11-18 17:05 被阅读0次

零、序言

  • 角色:分布式的框架(比如hdfs、yarn、zookeeper等)大多都会设计成不同的几套程序扮演不同的角色协同工作,比如最简单的master、slaver两种角色。

一、 spark on yarn

1.1 yarn

  • yarn 是分布式资源管理框架,相当于分布式的操作系统,会有程序运行在上面。
    涉及到以下几个角色:
    1. RM:resource manager 资源管理者。全局只有一个,统一管理集群资源。
    2. NM:node mananger 节点管理者。分布在每一个节点,向RM汇报节点的信息。

yarn分配资源都是以container作为资源的分配单位,yarn的应用程序都会被装到container中去运行。每个节点可能有很多个大小不一的container都有NM控制并向RM汇报。

  • Yarn 上运行的程序涉及到的角色(每个yarn程序都需要有的):
    1. AC: application client 。负责提交任务到yarn,监控程序运行状态。可以在不属于yarn管理的集群中的机器上运行。
    2. AW: application worker。分布在yarn各个container中去执行具体的工作。
    3. AM: application master 应用程序管理者。负责和NM交付申请container分配任务,收集结果。

1.2 spark on yarn

1.2.1 spark的结构

spark官网的 部署图
  • Driver : 用户编写的程序的main函数就运行在driver上面,用户调用spark的api驱动driver进行工作,比如计划任务(schedule)、分发任务、收集结果等。
  • Cluster Manager :只yarn、Mesos等集群管理者。
  • Executor :实际执行任务的进程,运行在集群中的节点上。

上图是spark的结构,那spark on yarn 如何把spark的这一套东西运行在yarn上的呢。它有两种部署模式,client模式和cluster模式。

1.2.2 yarn client模式

yarn client
  1. Spark Yarn Client向YARN的ResourceManager申请启动Application Master。同时在SparkContent初始化中将创建DAGScheduler和TASKScheduler等,由于我们选择的是Yarn-Client模式,程序会选择YarnClientClusterScheduler和YarnClientSchedulerBackend;
  2. ResourceManager收到请求后,在集群中选择一个NodeManager,为该应用程序分配第一个Container,要求它在这个Container中启动应用程序的ApplicationMaster,与YARN-Cluster区别的是在该ApplicationMaster不运行SparkContext,只与SparkContext进行联系进行资源的分派;
  3. Client中的SparkContext初始化完毕后,与ApplicationMaster建立通讯,向ResourceManager注册,根据任务信息向ResourceManager申请资源(Container);
  4. 一旦ApplicationMaster申请到资源(也就是Container)后,便与对应的NodeManager通信,要求它在获得的Container中启动启动CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend启动后会向Client中的SparkContext注册并申请Task;
  5. Client中的SparkContext分配Task给CoarseGrainedExecutorBackend执行,CoarseGrainedExecutorBackend运行Task并向Driver汇报运行的状态和进度,以让Client随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务;
  6. 应用程序运行完成后,Client的SparkContext向ResourceManager申请注销并关闭自己。

1.2.3 yarn cluster模式

yarn cluster
  1. Spark Yarn Client向YARN中提交应用程序,包括ApplicationMaster程序、启动ApplicationMaster的命令、需要在Executor中运行的程序等;
  2. ResourceManager收到请求后,在集群中选择一个NodeManager,为该应用程序分配第一个Container,要求它在这个Container中启动应用程序的ApplicationMaster,其中ApplicationMaster进行SparkContext等的初始化;
  3. ApplicationMaster向ResourceManager注册,这样用户可以直接通过ResourceManage查看应用程序的运行状态,然后它将采用轮询的方式通过RPC协议为各个任务申请资源,并监控它们的运行状态直到运行结束;
  4. 一旦ApplicationMaster申请到资源(也就是Container)后,便与对应的NodeManager通信,要求它在获得的Container中启动启动CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend启动后会向ApplicationMaster中的SparkContext注册并申请Task。这一点和Standalone模式一样,只不过SparkContext在Spark Application中初始化时,使用CoarseGrainedSchedulerBackend配合YarnClusterScheduler进行任务的调度,其中YarnClusterScheduler只是对TaskSchedulerImpl的一个简单包装,增加了对Executor的等待逻辑等;
  5. ApplicationMaster中的SparkContext分配Task给CoarseGrainedExecutorBackend执行,CoarseGrainedExecutorBackend运行Task并向ApplicationMaster汇报运行的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务;
  6. 应用程序运行完成后,ApplicationMaster向ResourceManager申请注销并关闭自己。

pyspark

spark 是如何和python结合的呢


image.png

参考文献

http://www.it610.com/article/4021749.htm

加我信微 Zeal-Zeng 费免拉你进 知识星球、大数据社群、众公号(曾二爷) 和优秀的人一起学习

相关文章

网友评论

      本文标题:5分钟了解spark on yarn

      本文链接:https://www.haomeiwen.com/subject/zugifqtx.html