spark on yarn

Spark on yarn的 两种运行模式和运行原理

一 回顾—spark和mapreduce区别

在MapReduce中,计算的最上层单元是是job,系统加载数据,执行一个map函数,shuffle数据,执行一个reduce函数,然后将数据写回到持久化存储器,Spark有一个类似job的概念(虽然一个job可以由多个stage组成,而不是仅仅只包含map和reduce),不过Spark还有一个更高层级的概念叫做应用程序(application),应用程序可以以并行或者串行的方式跑多个job。

http://www.xiutx.cn/wp-content/uploads/2015/10/1.png

熟悉Spark API的人都知道,一个应用程序对应着一个SparkContext类的实例。不同于MapReduce,一个应用程序拥有一系列进程,叫做executors,他们在集群上运行,即使没有job在运行,这些executor仍然被这个应用程序占有。这种方式让数据存储在内存中,以支持快速访问,同时让task快速启动成为现实。

Executors

MapReduce的每个task是在其自己的进程中运行的,当一个task结束,进程随之终结。在Spark中,多个task可以在同一个进程中并行的执行,并且这些进程常驻在Spark应用程序的整个生命周期中,即使是没有job在运行的时候。上述Spark模型的优势在于速度:task可以快速的启动,处理内存中的数据。不过他的缺点是粗粒度的资源管理。因为一个应用程序的executor数量是固定的,并且每个executor有固定的资源分配,一个应用程序在其整个运行周期中始终占有相同数量的资源

活跃的Driver

Spark需要依赖一个活跃的driveractive driver)进程管理job和调度task【拥有Application Master线程对象,对象中包含SparkContext对象,该对象中拥有DAG Scheduler,YarnClusterScheduler等实现管理job和调度task。一般的,这个driver进程跟启动应用程序的客户端进程是同一个,不过在YARN模式中(后面会讲到),driver进程可以在集群中运行。相反的,在MapReduce中,客户端进程在job启动之后可以退出,而job还会继续运行。

可插拔的资源管理

Spark支持可插拔的集群管理。集群资源管理系统负责启动executor进程。Spark应用开发人员不必担心spark到底使用哪一种集群管理系统。Spark支持yarn,Mesos以及自带的standalone集群资源管理系统。这三个系统都包含了两个组件【master服务组件;slave服务组件(具体可能叫nodemanager,or worker等)】。Master服务(yarn :ResourceManager、Mesos:master或者Spark自带的standalone:master),master服务主要负责决定哪个应用程序运行(或者使用)Executor进程,同时也决定在哪儿、什么时候运行。每个节点上运行一个slave服务,启动Executor进程。资源管理系统同时还监控服务的可用性和资源消耗。

为什么使用YARN

使用YARN来管理集群资源较使用Spark standalone和Mesos有一些优势:yarn集中配置一个资源池,允许运行在yarn上的不同架构动态共享这个资源池。你可以用整个集群跑一个MapReduce任务,然后使用其中一部分做一次Impala查询,另一部分运行一个Spark应用程序,并且完全不用修改任何配置。

你可以利用YARN的所有调度特性来做分类、隔离以及任务优先。

还有一点,yarn是唯一支持spark安全特性的集群资源管理系统。使用yarn、spark可以在Kerberized Hadoop之上运行,在它的进程之间使用安全认证

Yarnspark上运行

当代yarn·上运行spark时,每一个spark executor作为一个yarn container运行。MapReduce为每一个task生车一个container并启动一个JVM,二spark在同一个container中执行多个task。Spark这种方式让spark的运行速度快了几个量级。

理解理解YARN应用程序的master概念:yarn中,每一个应用程序都有一个master进程,它是为应用程序启动的第一个container(AppalicationMaster)。负责为应用程序从ResourceManager申请资源,同时分配这些资源,告诉NodeManagers为该应用程序启动containerMaster的存在,就可以避免一个活跃的客户端-启动程序的进程(启动程序后可以退出,交给yarn负责)可以进退,而由yarn管理这些进程,他们继续在集群中运行。

Yarn-cluster模式中,Drivermaster上运行,这意味着这个进程(ApplicationMaster进程)同时负责驱动应用程序和向yarn申请资源,并且这个进程在yarn container中运行。启动应用程序的客户端不用常驻在应用程序的运行周期中。

Yarn-cluster模式:

两个图都挺好的:

-

-

注意ApplicationMaster进程中包含的哪些

(1)ResourceManager接到请求后在集群中选择一个NodeManager分配Container,并在Container中启动ApplicationMaster进程;

(2)在ApplicationMaster进程中初始化sparkContext;

(3)ApplicationMaster向ResourceManager申请到Container后,通知NodeManager在获得的Container中启动excutor进程;

(4)sparkContext分配Task给excutor,excutor发送运行状态给ApplicationMaster。

 

YARN-client模式:

https://img-blog.csdn.net/20170409204916592?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzU3MzgxMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

(1)ResourceManager接到请求后在集群中选择一个NodeManager分配Container,并在Container中启动ApplicationMaster进程;

(2)driver进程运行在client中,并初始化sparkContext;

(3)sparkContext初始化完后与ApplicationMaster通讯,通过ApplicationMaster向ResourceManager申请Container,ApplicationMaster通知NodeManager在获得的Container中启动excutor进程;

(4)sparkContext分配Task给excutor,excutor发送运行状态给driver

Yarn-client模式中,master仅仅出现在向yarn申请executor container的过程中。yarn-clusterApplicationMaster不仅负责申请资源,并负责监控Task的运行状况,因此可以关掉client

yarn-clientApplicationMaster仅负责申请资源,由client中的driver来监控调度Task的运行,因此不能关掉client

一些重要的概念:

应用程序(Application):应用程序可以是一个单独的job,也可以是一系列的job,或者是一个持续的可以进行交互的会话服务。

Spark Driver:Spark Driverspark上下文(SparkContext—代表一个应用程序会话)中运行的一个进程Driver负责将应用程序转化成可以在集群上运行的独立的步骤(我认为是按照action算子来的)。每个应用程序有一个driver--drver还和clusterManager通讯,进行资源申请,任务分配并监督运行状况等。

ClusterManager:这里指yarn

DAGScheduler:spark作业转换成stageDAG图。

TaskScheduler:task分配给具体的executor

Spark ApplicationMastermaster负责接收driver的资源请求,然后向yarn申请资源当然是想resourcemanager申请,并选择一组合适的hosts/containers来运行spark程序获取nodemanager为其分配启动container。每个应用程序有一个master

Container:yarn中的抽象资源。

Spark Executor:在计算节点上的JVM实例,服务于一个单独的spark应用程序。一个executor在她的生命周期中可以运行多个task,这些task可以是并行运行的。一个节点可能有多个executor,一个应用程序又会有多个结点在运行executor

Spark task:一个spark task表示一个任务单元,它在一个分区上运行,处理数据的一个子集。

ResourceManager:负责整个yarn集群的资源管理和分配。

 

 

 

 

 

参考:http://www.xiutx.cn/archives/116

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值