oracle 与 client端执行结果不一致_不同模式下Spark应用的执行过程
根据应用执行的3个阶段,不同执行模式下各个阶段的执行逻辑不相同,本文分析不同模式下的执行逻辑。
Yarn-Client模式的执行流程
Yarn的组成
Yarn是hadoop自带的资源管理框架,它的设计思想是:YARN的基本思想是将资源管理和作业调度/监视的功能拆分为单独的守护程序。这个想法是拥有一个全局ResourceManager(RM)和每个应用程序ApplicationMaster(AM)。应用程序可以是单个作业,也可以是作业的DAG。
ResourceManager和NodeManager组成数据计算框架。ResourceManager是在系统中所有应用程序之间仲裁资源的最终权限。NodeManager是每台机器的框架代理,负责容器,监视其资源使用情况(cpu,内存,磁盘,网络),并将其报告给ResourceManager / Scheduler。
每个应用程序ApplicationMaster实际上是框架特定的库,其任务是与来自ResourceManager的资源进行协商,并与NodeManager一起执行和监视任务。
Yarn-Client模式下Spark应用的执行流程
Yarn-Client模式下,Driver端会在Client端独立执行,而不像Yarn-Cluster模式会在ApplicationMaster中执行。所以,在Yarn-Client模式下能够观察Driver端的运行,查看Driver端的运行日志。
Yarn-Client模式提交Spark应用的命令类似于:
$SPARK_HOME/bin/spark-submit --master yarn --deploy-mode client --class org.apache.spark.examples.SparkPi $SPARK_HOME/examples/jars/spark-examples*.jar
在Yarn-Client模式下,Spark应用的执行总体流程如图2所示。
1.客户端提交Spark应用,在提交应用时会先找到Spark应用的执行主类,例如:若是Scala或Java应用,Yarn-Client模式下的执行主类是--class指定的类名。然后,进入主类的main函数开始执行应用。此时,一般会开始创建SparkSession(包括SparkContext和SparkEnv对象),在创建SparkContext时会和ResourceManager进行通信。
2.ResourceManager启动一个Container并在该Container中运行ApplicationMaster。
3.ApplicationMaster根据应用的资源配置来向ResourceManager申请分配一个或多个新的Container,一旦Container被分配就在Container中启动Executors。
4.Driver端直接和Executor进行通信,先把Spark应用程序转换成Task,然后把Task提交给Executor端执行。Executor向Driver端返回执行进度,执行状态,执行完成后返回执行结果。
Yarn-Cluster模式的执行流程
Yarn-Cluster模式下,Driver端会运行在ApplicationMaster的容器中,所以,Yarn-Cluster模式下在Client端不能观察到Driver的运行情况,Driver端的日志也只能在YARN中查看。
Yarn-Cluster模式提交Spark应用的命令如下:
$SPARK_HOME/bin/spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi $SPARK_HOME/examples/jars/spark-examples*.jar
Yarn-Cluster模式的Spark应用执行过程如图3所示:
1.客户端提交Spark应用,在提交应用时会先找到Spark应用的执行主类,例如:若是Scala或Java应用,Yarn-Cluster模式下的执行主类org.apache.spark.deploy.yarn.YarnClusterApplication。
然后,进入主类的main函数开始执行应用。此时,一般会开始创建SparkSession(包括SparkContext和SparkEnv对象),在创建SparkContext时会和ResourceManager进行通信。
2.ResourceManager为应用分配一个ApplicationMaster的Container。此时,Driver进程也在该容器中启动。
3.ApplicationMaster向ResourceManager为Executor请求创建容器(container)。当容器创建完成时,就会在该容器中启动Executor。然后Driver直接和Executor进行交流,先把Spark应用程序转换成Task,然后把Task提交给Executor端执行。
4.Executor向Driver端返回执行进度,执行状态,执行完成后返回执行结果。
可以通过SparkUI来查看Yarn-Cluster的Spark应用的执行状态。在Yarn的任务列表中,进入ApplicationMaster的页面,可以查看Spark应用执行的进度日志。
Standalone模式下应用的执行
Standalone的架构和组成
在执行Spark任务前,我们必须启动Standalone资源管理框架,具体的启动和使用方法,见后面的“启动和使用”小节。由于Standalone是由Master和Worker两个部分组成,所以,我们需要先启动Master和Worker服务。
Standalone资源管理框架的架构如图4所示:
从图1-5-1可以看出,Standalone的资源管理框架是一master多slave的分布式架构,master服务可以通过zookeeper等组件来保证高可用(后面有专门的章节讲解)。
若和第1.1章节的通用Spark架构进行类比,Standalone模式下的Standalone Master服务,就是Cluster Manager的角色,而Standalone Worker就是worker的角色。
Standalone Master负责:管理Standalone Worker,接受任务提交请求,为任务分配资源等工作;而Standalone Worker负责:启动Executor,运行Task等工作。Spark应用执行时,架构如图1-5-2所示:
Standalone模式下Spark应用的执行流程
在Standalone模式下执行Spark应用的过程如下:
1.启动Standalone资源管理框架,包括Standalone Master和Standalone Worker;
2.在Driver端指定使用Standalone模式来执行Spark应用,开始进行Task执行环境初始化。
3.Task执行环境的初始化在创建SparkContext时完成,此时,Spark应用连接Standalone Master,向其申请资源,若资源足够,则根据资源配置在Worker端启动指定数量的Executor,并启动和初始化Executor端的各种服务,包括:数据传输服务,内存管理服务。Executor会直接和Driver端通信,把状态信息汇报给Driver端。
4.若一切顺利SparkContext创建完成时,Task的执行环境就准备好了(各个Executor已经创建好,各个必要的服务也已经启动),Driver端接下来开始执行应用程序的Spark数据处理代码,它会对数据处理的过程进行编排,调度,最终形成TaskSet提交给Executor。
5.Executor通过线程池来运行Task,在执行过程中会把状态信息直接返回给Driver端,完成后把结果返回给Driver端。
小结
本文对不同模式下Spark应用的执行过程进行了分析。这并没有对Local模式的执行过程进行分析,会在后面的文章中进行单独分析。
oracle 与 client端执行结果不一致_不同模式下Spark应用的执行过程相关推荐
- click 在网页测试手机模式下无效,不能执行。调成非手机模式即可
click 在网页测试手机模式下无效,不能执行. 调成非手机模式即可 转载于:https://www.cnblogs.com/winyh/p/6419893.html
- oracle 与 client端执行结果不一致_Oracle -PLSQLDeveloper 13 数据库连接
关于oracle 及PLSQLDeveloper 13如何下载,安装流程不一一赘述,网络帖子很多,知乎直接搜索亦可. 本次主要分享:学习前辈们关于安装流程中出现设置报错,应如何处理(本人个例,通过网络 ...
- 每隔10秒执行一次_(立下flag)每日10道前端面试题12 关于BOM十问
第一问:请介绍BOM有哪些对象 第一次被问到时,只知道window和navigator window:BOM的核心对象是window对象,它表示浏览器的一个实例. avigator:navigator ...
- Cpython源码分析03(*)_简要总结下Cpython是如何执行python test.py
当我们通过命令行传入参数的方式调用 python 解释器去运行一个模块的时候,比如: $ python test.py 图2.1中所示的过程将开始进行.(当然这只是其中一种运行 Python 程序的方 ...
- java version 和javac版本不一致_解决linux下javac -version和java -version版本显示不一致...
[javascript] view plaincopy [root@localhost usr]# $JAVA_HOME/bin/java -version bash: /bin/java: 没有那个 ...
- php 定时脚本执行wget无效_写了个Bug,误执行rm fr /*,瞬间背后一凉!
作者 | 小林 来源 | 小林coding 前言 前段时间,临近五一节,想到有 5 天假期,我就开始飘了. 写个简单的 Bash 脚本都不上心了,写完连检查都不检查,直接拖到到实体服务器跑. 结果一跑 ...
- python控制台执行代码字符串_编写Python脚本以使用控制台命令执行
研究是在底部,阅读之前...谢谢.在 我必须编写一个运行SQL查询的Python脚本.我创建了一个主类,名为SQLQuery.每个SQLQuery实例表示一个查询.脚本的结构必须如下所示:class ...
- java执行python路径_如何在Python中获取当前执行文件的路径?
您无法直接确定正在执行的主脚本的位置 . 毕竟,有时脚本根本不是来自文件 . 例如,它可以来自交互式解释器或仅存储在存储器中的动态生成的代码 . 但是,您可以可靠地确定模块的位置,因为模块始终从文件加 ...
- sqlserver 查询某个时间段执行sql语句_为什么 SQL 查询不是先执行SELECT语句?
作者:Julia Evans 译者:无明 链接:infoq.cn/article/Oke8hgilga3PTZ3gWvbg 很多 SQL 查询都是以 SELECT 开始的.不过,最近我跟别 ...
最新文章
- 【求助】哪个软件负责在屏幕右下角显示类似“caps lock on/off”的? - 技术封存区 - 专门网论坛 -...
- CentOS系统dig和nslookup的安装
- python批量改动指定文件夹文件名称
- php中border属性,css中display属性和border属性常遇问题讲解
- 6410 gpio控制及接口
- 计算机网络阶段,计算机网络的发展大致可分为四个阶段,目前人类进入了()。 - 问答库...
- spring boot2 整合(二)JPA(特别完整!)
- BZOJ3437 小P的牧场
- 滴滴配合警方调证不超 10 分钟;苹果否认恶意芯片报道;贝索斯建火箭中心 | 极客头条...
- 从二进制格雷码到任意进制格雷码(1)
- VBS对Excel导入bas宏文件
- 勒索病毒锁死文件加密
- Educational Codeforces Round 118 (Rated for Div. 2)/C. Poisoned Dagger
- android网络下载图片并且显示在图库中
- linux zend studio 10,Zend Studio 10发布,可编写mobile apps
- 国内外教育机器人生产企业及产品情况分析
- 【shell】使用cat来合并文件的简单用法
- “小灵通”的风雨往事
- 初学Java的练手题
- DFRobotGravity: 模拟甲烷气体传感器 (MQ4)工作原理