spark运行模式总结

spark可以在linux和window操作上运行。本文只介绍在linux上运行。spark运行模式分为单机local、standalone集群模式,和运行与yarn或mesos上的集群模式。其中运行与yarn上的集群模式又分为yarn client,yarn cluter两种模式。下面详细介绍这几种运行模式。

1、 单机local模式。顾名思义,就是spark运行在本地单机上,将spark解压到本地,即可运行。在单机local模式下打开spark交互式shell的命令:./pyspark和./spark-shell。./pyspark是打开python交互式shell,./spark-shell是打开scala交互式shell,必须进入到bin文件夹中执行。该模式无需启动master和worker守护进程。
spark-submit --class org.apache.spark.examples.SparkPi --master local lib/spark-examples-1.0.0-hadoop2.2.0.jar 这条命令是在本地local模式上执行spark提供的计算pi的例子。--master local 指定了spark的运行模式。
这个模式下本地会出现一个SparkSubmit进程,这个进程充当了集群模式中所有角色,包括master,worker,Client进程,Spark的driver程序,Spark执行Task的Executor的角色,说通俗点就是既当爹又当娘。

2、standalone集群模式。这个模式必须启动spark集群,就是分别启动maser和worker守护进程。在standalone集群模式打开spark交互式shell的命令:./spark-shell --master spark://192.168.194.6:7077命令,这是打开使用scala的spark交互式shell。必须进入spark安装目录中的bin文件夹中执行。--master spark://192.168.194.6:7077确定了standalone集群模式运行spark。

./spark-submit --class org.apache.spark.examples.SparkPi --master spark://192.168.123.101:7077 lib/spark-examples-1.0.0-hadoop2.2.0.jar在standalone集群模式上执行spark提供的计算pi的例子。

在该模式下,worker节点会有一个CoarseGrainedExecutorBackend进程,该进程用来并发执行应用程序。
Standalone模式使用的是Spark自己实现的资源调度框架,其主要的节点有Client节点、Master节点和Worker节点。其中Driver既可以运行在Master节点上中,也可以运行在本地Client端。当用spark-shell交互式工具提交Spark的Job时,Driver在Master节点上运行;当使用spark-submit工具提交Job或者在Eclips、IDEA等开发平台上使用”new SparkConf.setManager(“spark://master:7077”)”方式运行Spark任务时,Driver是运行在本地Client端上的。

简单介绍下该模式下运行spark的工作流程:
(1).SparkContext连接到Master,向Master注册并申请资源(CPU Core 和Memory);
(2).Master根据SparkContext的资源申请要求和Worker心跳周期内报告的信息决定在哪个Worker上分配资源,然后在该Worker上获取资源,然后启动StandaloneExecutorBackend;
(3).StandaloneExecutorBackend向SparkContext注册;
(4).SparkContext将Applicaiton代码发送给StandaloneExecutorBackend;并且SparkContext解析Applicaiton代码,构建DAG图,并提交给DAG Scheduler分解成Stage(当碰到Action操作时,就会催生Job;每个Job中含有1个或多个Stage,Stage一般在获取外部数据和shuffle之前产生),然后以Stage(或者称为TaskSet)提交给Task Scheduler,Task Scheduler负责将Task分配到相应的Worker,最后提交给StandaloneExecutorBackend执行;
(5).StandaloneExecutorBackend会建立Executor线程池,开始执行Task,并向SparkContext报告,直至Task完成。
(6).所有Task完成后,SparkContext向Master注销,释放资源。

3、yarn client模式。该模式是在yarn上运行spark集群,必须保证yarn正常运行。这个模式不需要启动master和worker守护进程,即没必要提前执行spark集群,当我们以yarn client模式执行spark应用时,yarn会启动spark集群。在该模式可以打开交互式shell。
打开交互式shell的命令:./spark-shell --master yarn-client。

./spark-submit --class org.apache.spark.examples.SparkPi --master yarn-client lib/spark-examples-1.0.0-hadoop2.2.0.jar在yarn中启动spark集群并执行spark提供的计算pi的例子。
--master yarn-client指定了在yarn上执行spark集群。

该模式下spark的执行流程:
(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申请注销并关闭自己

4、yarn cluster模式。该模式和yarn client差不多,都是在yarn上运行spark集群。区别在于yarn client可以打开shell交互模式,而yarn cluster不允许。

./spark-submit --class org.apache.spark.examples.SparkPi --master yarn-cluster lib/spark-examples-1.0.0-hadoop2.2.0.jar在yarn cluster模式启动spark集群并执行spark提供的计算pi的例子。
--master yarn-cluster指定了以yarn-cluster模式上执行spark集群。

该模式下spark的执行流程:
(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申请注销并关闭自己。

YARN-Cluster模式下,Driver运行在AM(Application Master)中,它负责向YARN申请资源,并监督作业的运行状况。当用户提交了作业之后,就可以关掉Client,作业会继续在YARN上运行,因而YARN-Cluster模式不适合运行交互类型的作业;
YARN-Client模式下,Application Master仅仅向YARN请求Executor,Client会和请求的Container通信来调度他们工作,也就是说Client不能离开。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值