先抛出问题:Spark on Yarn有cluster和client两种模式,它们有什么区别? 用Jupyter写Spark时,只能使用client模式,为什么?

写一篇文章,搞清楚 Spark on Yarn 的运行原理,同时回答上面的问题。

首先,把Spark和Yarn当做两个独立概念来看。单看Spark,不去管它底层依赖的存储结构,本质上讲,它就是个分布式计算的程序。程序的入口是一个叫做 SparkContext 的对象,也可以抽象地称为Driver,启动了 SparkContext 后,就可以运行各种Spark方法(比如 map,filter)。运行方法时,Spark会把每次执行分解成若干个Task,分发给若干个Executor执行,Executor是执行Task的进程,执行后的结果汇总到一起,返回给 SparkContext。Spark 本质上也是一个map+reduce的过程,与Hadoop不同的是,Spark会先把数据存储到内存中,这样处理速度会比Hadoop快大约两个数量级。

这么多的Executor进程是怎么来的?

是Yarn分配的。(注:还有其他资源管理框架,比如 Moses,这里先不管它。)

总结起来就是:Spark是一套可以运行的代码,代码运行需要资源(计算、存储、网络),Yarn把集群的资源分配一部分给Spark使用。

Yarn本身的运行方式是:Yarn把集群的节点分为两类,一类是Master,运行的进程叫ResourceManager(简称RM),另一类是Worker,运行的进程叫NodeManager(简称NM),NM可以在本机内分配资源,生成若干个Container(不熟悉容器的同学可以把Container近似理解为虚拟机)。Yarn的运行过程是,RM接受外部的资源申请(可以来自Hadoop、Spark或其他进程),按照要求分配资源,然后把对应的资源分配计划通知各个NM,NM收到自己的分配计划,按计划在本地启动若干个Container。

Spark和Yarn各自介绍完毕。

Spark on Yarn就是把上述过程结合起来,Yarn在底层,Spark在上层,也就是说,我们在写Spark代码时不需要操作Yarn,只需要设置好Spark的资源参数,Yarn会按照Spark的资源参数去分配资源,然后提供给Spark使用。

Spark on Yarn 的运行过程是:SparkContext运行起来,设置资源参数,Yarn中会为每个Spark App启动一个Container,叫做App Master,由App Master把资源参数发送给RM,RM通知若干个NM,启动若干个Container,每个Container内部都运行一个Executor,对,就是Spark中的Executor,这样Spark 和 Yarn 就结合起来了。

这里给出一个Spark on Yarn的资源参数配置示例:

conf = SparkConf().setMaster('yarn-client').setAppName('test')
conf.set('spark.executor.instances',10)
conf.set('spark.executor.cores',1)
conf.set('spark.executor.memory','2g')
conf.set("spark.driver.memory", "2g")
conf.set("spark.driver.maxResultSize", "")

Spark on Yarn的原理都清楚了,下面要解决开头提出的问题了:Spark on Yarn 的 cluster 和 client 模式有什么区别?为什么Jupyter只能用client模式?

对比cluster和client,从名字就可以看出,前者是分布式的,后者是本地化的。具体区别就在于上面的红字:App Master的作用不同。

在cluster模式中,SparkContext运行在App Master所在的Container中,也就是说,在初始化Spark程序时,我们不知道SparkContext会运行在哪个节点,由RM分配一个Container作为App Master后,SparkContext运行在这个Container中,Spark程序的运行与我们在哪个节点启动它没有关系。

相对地,在client模式中,SparkContext运行在启动SparkContext的节点上,所有与Spark有关的调度工作都在这个节点上运行(注意:不是在这个节点的Container上),App Master只在向RM申请资源时起到了作用,之后就它什么事了,除非资源需要发生变化。

到这里,我们就能明白为什么Jupyter必须使用client模式了,因为Jupyter是运行在节点上的进程,只能和本地节点的内存实现数据交互,为了能够获取到spark运行过程中的变量,Jupyter必须采用Client模式,让spark程序的变量值存储在节点的内存中。

参考资料:

https://www.cnblogs.com/tgzhu/p/5818374.html

基础概念 之 Spark on Yarn的更多相关文章

  1. Spark集群基础概念 与 spark架构原理

    一.Spark集群基础概念 将DAG划分为多个stage阶段,遵循以下原则: 1.将尽可能多的窄依赖关系的RDD划为同一个stage阶段. 2.当遇到shuffle操作,就意味着上一个stage阶段结 ...

  2. 【原创】大数据基础之Spark(2)Spark on Yarn:container memory allocation容器内存分配

    spark 2.1.1 最近spark任务(spark on yarn)有一个报错 Diagnostics: Container [pid=5901,containerID=container_154 ...

  3. Spark on Yarn年度知识整理

    大数据体系结构: Spark简介 Spark是整个BDAS的核心组件,是一个大数据分布式编程框架,不仅实现了MapReduce的算子map 函数和reduce函数及计算模型,还提供更为丰富的算子,如f ...

  4. Flink入门-第一篇:Flink基础概念以及竞品对比

    Flink入门-第一篇:Flink基础概念以及竞品对比 Flink介绍 截止2021年10月Flink最新的稳定版本已经发展到1.14.0 Flink起源于一个名为Stratosphere的研究项目主 ...

  5. Spark on Yarn 架构解析

    . 一.Hadoop Yarn组件介绍: 我们都知道yarn重构根本的思想,是将原有的JobTracker的两个主要功能资源管理器 和 任务调度监控 分离成单独的组件.新的架构使用全局管理所有应用程序 ...

  6. Flink资料(1)-- Flink基础概念(Basic Concept)

    Flink基础概念 本文描述Flink的基础概念,翻译自https://ci.apache.org/projects/flink/flink-docs-release-1.0/concepts/con ...

  7. Hadoop基础概念介绍

    基于YARN的配置信息, 参见: http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/ hadoop入门 - 基础概念 ...

  8. 大数据基础知识问答----spark篇,大数据生态圈

    Spark相关知识点 1.Spark基础知识 1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架 dfsSpark基于mapredu ...

  9. Spark On Yarn的两种模式yarn-cluster和yarn-client深度剖析

    Spark On Yarn的优势 每个Spark executor作为一个YARN容器(container)运行.Spark可以使得多个Tasks在同一个容器(container)里面运行 1. Sp ...

随机推荐

  1. android EditText设置光标、边框和图标,以及限制输入

    控制边框形状,先在drawable中建一个xml文件:shape.xml <?xml version="1.0" encoding="utf-8"?> ...

  2. [android] AndroidManifest.xml 详解

    第1部分 标签库+包路径+版本控制 <manifest xmlns:android="http://schemas.android.com/apk/res/android" ...

  3. e1086. if/else语句

    The if statement encloses some code which is executed only if a condition is true. The general synta ...

  4. LINUX下CPU Load Average的一点研究

    背景: 公司的某个系统工作在基于Linux的Cent OS下,一个host下同时连接了许多client, 最近某台Host总是显示CPU Load Average过高,我们单纯的以为是CPU的占用过高 ...

  5. AOP技术应用和研究--AOP简单应用

    为了更好的理解AOP实践和体现AOP的优势.我们始终将OOP和AOP的比較贯穿到下文中.并在终于总结出AOP与OOP相比所拥有的长处,AOP的缺点以及AOP一般的使用场景. 1.1 问题空间到解空间的 ...

  6. 如何通过phoenix中查看表的主键信息

    需求描述: 今天一个开发的同事让帮忙查看下表的主键列,在此记录下. 操作过程: 1.通过!primarykeys命令查看表的主键 !primarykeys SYNC_BUSINESS_INFO_BYD ...

  7. NodeJs生成SVG图形验证码

    背景:短信接口有调用限制,如果受到恶意攻击,很容易就爆掉,所以需要一系列验证机制,后端采用签名加密的方式,而前端要做人机识别,有两个要求: 1)不能使用文本式的验证码,很简单就能拿到 2)所有验证逻辑 ...

  8. CentOS5.5环境下布署LVS+keepalived

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://kerry.blog.51cto.com/172631/401253 #!/bin ...

  9. iOS打电话、发短信、发邮件功能开发

    本文转载至 http://www.lvtao.net/ios/506.html 今天把APP里常用小功能 例如发短信.发邮件.打电话.全部拿出来简单说说它们的实现思路. 1.发短信实现打电话的功能,主 ...

  10. nginx服务器配置说明

    总结nginx的一些配置选项: nginx全局配置文件 # 定义nginx运行的用户和组//一个默认同时为用户和组 //没有则默认为nobody user www-data; # nginx进程数,建 ...