1. 介绍
我们都知道spark支持在yarn上运行,但是spark on yarn 又分为两种模式,yarn-cluster和yarn-client,它们究竟有什么区别与关联呢?
spark支持可插拔的集群管理模式(standalone, mesos, yarn ), 集群管理负责启动Executor进程, 编写spark Application的人根本不需要知道spark用的是什么集群管理, spark支持的三种集群模式都是由两个组件组成的:master和slave。
master服务(yarn resourceManager、 mesos master 和 spark standalone master) 可以决定哪些Application可以运行, 什么时候运行以及去哪里运行, 而slave服务(yarn nodeManager、 mesos slave 和 spark standalone slave)实际上运行Executor进程。
当在yarn上面运行spark作业, 每个sparkExecutor 作为一个yarn容器(container)运行,spark可以使得多个tasks 在同一容器(Executor)里面运行, 这是个很大的优点。
注意:这里和Hadoop的mapreduce作业不一样,mapreduce 作业每个task开启不同的jvm来运行,虽然说mapreduce可以通过参数来配置(mapreduce.job.jvm.numtasks)
从广义上讲:
yarn-cluster适用于生产环境
yarn-client适用于交互和调试,也就是希望快速地看到Application的输出
在我们介绍yarn-cluster和yarn-Client的深层次的区别之前, 我们先明白一个概念Application master。 在yarn中每个Application实例都有一个Application master进程, 它是Application启动的第一个容器, 它负责和resourceManager打交道并请求资源,获得资源之后告诉nodeManager为其启动container。
从深层次的含义讲:yarn-cluster 和yarn-Client模式的区别其实就是Application的区别。
- yarn-cluster模式下, driver运行在AM(Application Master)中,它负责向yarn申请资源,并监督作业的运行状况,当用户提交了作业之后,就可以关掉Client,作业会继续在yarn上运行,所以yarn-cluster模式不适合运行交互类型的作业。
- yarn-client模式下, Application master 仅仅向yarn请求Executor, Client会和请求的container通信来调度他们的工作, 也就是说Client不能离开, 看下面的两幅图应该就会明白。
2. Yarn-cluster 模式下作业执行流程
- 客户端生成作业提交给resourceManager。
- ResourceManager在某个nodeManager(由yarn决定) 启动container 将Application Master分配给nodeManager
- nodeManager接收到ResourceManager 的分配, 启动Application Master并初始化作业, 此时的NameNode 就称为Driver
- Application向ResourceManager申请资源,分配资源同时通知其他NodeManager启动相应的Executor
- Executor向NameNode上的Application Master注册汇报并完成相应的任务
3. Yarn-client 模式下作业执行流程
- 客户端生成作业信息提交给ResourceManager
- ResourceManager在本地NodeManager启动container 并将Application 分配给该NodeManager
- Nodemanager接收到ResourceManager的分配 ,启动Application Master初始化作业,此时NameManager就称为Driver
- Application 向ResourceManager申请资源, 分配资源的同时 通知其他NodeManager启动相应的Executor
- Executor向本地启动Application Master 注册汇报并完成相应任务
4. Spark Standalone 与on yarn模式比较
Yarn-cluster | Yarn client | Spark standalone | |
---|---|---|---|
Driver 运行在: | Application Master | Client | Client |
谁去请求资源 | Application Master | Application Master | client |
谁去启动Executor进程 | Yarn NodeManager | Yarn NodeManager | spark Slave |
持久性服务 | Yarn ResourceManager Yarn NodeManager |
Yarn ResourceManager Yarn NodeManager |
spark master workers |
是否支持spark shell | 不支持 | 支持 | 支持 |