<Spark><Running on a Cluster>
Introduction
- 之前学习的时候都是通过使用spark-shell或者是在local模式运行spark
- 这边我们首先介绍Spark分布式应用的架构,然后讨论在分布式clusters中运行Spark的options(Spark可以运行在多种cluster managers之上:Hadoop YARN,Apache Mesos,以及Spark自带的内置Standalone cluster manager)。之后我们还会讨论scheduling,deploying和configuring一个Spark应用的细节。
Spark Runtime Architecture

- a driver + its executor = a Spark application
- 一个Spark应用通过使用一个外部服务--cluster manager来在一系列机器上运行
The Driver
- driver是你程序运行main()函数的进程,是用户代码创建SparkContext,创建RDDs,执行transformations和actions的进程
- driver有两个职责:
- 将一个用户程序转化成tasks:Spark program隐式地 创建一个Operations的逻辑有向无环图(DAG),当driver运行的时候,它会将该DAG转换成一个实际执行计划。Spark会执行一些优化,比如"pipelining“ map transformations together to merge them,并且将执行图转成一系列stages。每个stage由多个tasks组成。
- Scheduling tasks on executors:给定一个实际执行计划,Spark driver必须将每个单独的tasks调度到executors上。当executors注册到driver之后,driver会对executors有complete view。Driver会查看当前的executors并且试图把每个task调度到合适的位置。
Executors
- Spark executors就是负责运行给定job中tasks的工作进程。Executors有两个角色:
- 运行tasks,并将结果返回到driver;
- 为用户程序缓存的RDDs提供in-memory storage:通过每个executor内部生存的Block Manager。
Cluster Manager
- Spark依赖一个cluster manager来launch executors,并且在某些情况下,来launch driver。
Launching a Program
- 不管你使用何种cluster manager,你都可以使用spark-submit脚本来提交你的程序。
Summary
- 用户使用spark-submit提交一个application;
- spark-submit启动driver program并invokes用户指定的main()函数;
- driver program与cluster manager联系来获取启动executors的资源;
- cluster manager代表driver program启动executors;
- driver进程run through user application,基于程序中的RDD actions和transformations,driver将work以tasks的形式发送给executors;
- tasks在executor进程中被运行,并计算和保存结果;
- 如果driver的主函数退出或调用了SparkContext.stop()方法,那么executors会被终止,资源将会从cluster manager中被释放。
Deploying Applications with Spark-submit
<Spark><Running on a Cluster>的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- JS实现继承的6种方式
使用pretotype,call实现完美继承 父类: fuction Animal(name){ this.name=name||"Animal"; this.sl ...
- SE-Net要点
关于SE-Net有些很奇妙的点: 1.首先,所谓的SE module加在了BN层后面,这样的话,SE首先应该是对于BN层输出的feature map求取global average pooling,一 ...
- ubuntu18.04安装jdk1.8.0_11并配置环境变量.md
参考:https://www.jianshu.com/p/95f075761dc0 由于安装文件免安装程序,故只需要将对应文件复制到相应目录,然后配置环境变量即可: 1.移动文件到指定目录 (1)在/ ...
- loj#6491. zrq 学反演
题意:求\(\sum_{i_1=1}^m\sum_{i_2=1}^m...\sum_{i_n=1}^mgcd(i_1,i_2,...i_n)\) 题解:\(\sum_{d=1}^md\sum_{i_1 ...
- python-flask-配置文件的源码分析
方式一:app.config['xx'] = 'xxx'源码分析:#第1步:class Flask(_PackageBoundObject): self.config = self.make_c ...
- java的泛型与反射机制
什么是泛型? 泛型,即“参数化类型”.顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参) ...
- Alibaba Java Coding Guidelines
阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的<阿里巴巴Java开发规约>扫描插件!该插件由阿里巴巴P3C项目组研发.P3C是世界知名的反潜机,专门对付水下潜水艇,寓意是扫描出 ...
- ORACLE中ESCAPE关键字用法
ESCAPE用法 1.使用 ESCAPE 关键字定义转义符: 在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符. 2.ESCAPE 'escape_character' 允许在字符串中搜 ...
- Div和Span
Div ——层级元素,这一行不允许有其他元素(用来布局) Span ——用来修饰文本
- axios全局设置url公共请求头
需求由来:公司项目外链到别公司项目或者网页(通俗的说就是通过别的随意网页跳转至你项目网页),这时公司项目就要区分是从哪个公司或者哪个网页跳转过来的,从而进行不同的接口请求(公司所有接口都要带上请求头) ...