plsql如何执行存储过程_如何理解Spark应用的执行过程

从Spark应用的提交到执行完成有很多步骤,为了便于理解,我们把应用执行的整个过程划分为三个阶段。而我们知道Spark有多种运行模式,不同模式下这三个阶段的执行流程也不相同。

本文介绍这三个阶段的划分,并概要介绍不同模式下各个阶段的执行流程,各个模式的详细流程会在后面的文章进行分析。

应用执行的阶段划分

我们知道,Spark应用可以在多种模式下运行。所谓多种模式主要是针对资源分配方式来说的,Spark应用可以在yarn,k8s,mesos等分布式资源管理平台上运行,也可以启动自带的master和worker端来分配和管理资源(standalone模式)。例如:我们可以通过以下命令来向yarn提交一个spark任务:

$SPARK_HOME/bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode client $SPARK_HOME/examples/jars/spark-examples*.jar

代码1-3-1 spark应用提交命令

要注意的是,在执行以上应用提交命令时yarn资源管理集群必须已经启动。另外,Spark应用的执行是通过Driver端和Executor端共同配合完成的。

要完成以上应用的执行,需要经历很多步骤,为了便于更好的理解Spark应用从提交到执行完成的整个过程,我们把整个过程划分成三个阶段:

  • 应用的提交
  • 执行环境的准备
  • 任务的调度和执行

如图1所示:

bad13c76742d93763a9721511872f37b.png
图1 应用执行总体流程

不管以哪种模式运行,Spark应用的执行过程都可以划分成这三个阶段。下面对这三个阶段分别进行说明。

三个阶段概要说明

这三个阶段以及每个阶段要完成的目标如图2所示。

50d6272fab7737ac485fb08bb537374e.png
图2 Spark应用执行的3阶段目标概述

​ 图2 Spark应用执行的3阶段目标概述

我们根据以下代码为例,来讲解Spark应用执行的各个阶段。

# 

第1阶段:应用的提交

这个阶段在Driver端完成,主要目标是:准备依赖包并确定Spark应用的执行主类。具体的任务包括:

  • 解析任务提交的参数,并对参数进行解析和保存。
  • 准备(可能会下载)任务启动参数指定的依赖文件或程序包。
  • 根据Spark应用的执行模式和应用的编写语言,来确定执行的主类名称。
  • 实例化执行主类,生成SparkApplication对象,并调用SparkApplication#start()函数来运行Spark应用(若是Java或scala代码其实是:执行Spark应用中的main函数)。

注意:第1阶段完成时,Driver端并没有向资源管理平台申请任何资源,也没有启动任何Spark内部的服务。

第2阶段:执行环境的准备

通过第1阶段,已经找到了运行在Driver端的Spark应用的执行主类,并创建了SparkApplication对象:app。此时,在app.start()函数中会直接调用主类的main函数开始执行应用,从而进入第2阶段。

第2阶段主要目标是:创建SparkSession(包括SparkContext和SparkEnv),完成资源的申请和Executor的创建。第2阶段完成后Task的执行环境就准备好了。

也就是说,第2阶段不仅会在Driver端进行初始化,而且还要准备好Executor。这一阶段的任务主要是在Driver端执行创建SparkSession的代码来完成,也就是执行下面一行代码:

val 

第2阶段的Driver端主要完成以下步骤:

  • 创建SparkContext和SparkEnv对象,在创建这两个对象时,向Cluster Manager申请资源,启动各个服务模块,并对服务模块进行初始化。
  • 这些服务模块包括:DAG调度服务,任务调度服务,shuffle服务,文件传输服务,数据块管理服务,内存管理服务等。

第2阶段的Executor端主要完成以下步骤:

  • Driver端向Cluster Manager申请资源,若是Yarn模式会在NodeManager上创建ApplicationMaster,并由ApplicationMaster向Cluster Manager来申请资源,并启动Container,在Container中启动Executor。
  • 在启动Executor时向Driver端注册BlockManager服务,并创建心跳服务RPC环境,通过该RPC环境向Driver汇报Executor的状态信息。

详细的执行步骤,会在后面介绍每种模式的运行原理时,详细分析。第2阶段执行完成后的Spark集群状态如下:

f6ad07736d3798ca56c3a7232efb65d7.png
执行环境准备完成后Spark集群的状态

第3阶段:任务的调度和执行

通过第2阶段已经完成了Task执行环境的初始化,此时,在Driver端已经完成了SparkContext和SparkEnv的创建,资源已经申请到了,并且已经启动了Executor。

这一阶段会执行接下来的数据处理的代码:

val 

第3阶段Driver端主要完成以下步骤:

  • 执行Spark的处理代码,当执行map操作时,生成新的RDD;
  • 当执行Action操作时,触发Job的提交,此时会执行以下步骤:
  • 根据RDD的血缘,把Job划分成相互依赖的Stage;
  • 把每个Stage拆分成一个或多个Task;
  • 把这些Task提交给已经创建好的Executor去执行;
  • 获取Executor的执行状态信息,直到Executor完成所有Task的执行;
  • 获取执行结果和最终的执行状态。

小结

本节介绍了Spark应用的执行过程,通过本节的学习应该对Spark应用的执行过程有一个总体的理解。接下来会根据具体的运行模式来详细分析每个阶段的执行步骤。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276792.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS高级:事件冒泡和事件捕获;

1、事件:浏览器客户端上客户触发的行为成为时事件;所有的事件都是天生自带的,不需要我们去绑定,只需要我们去触发 当用户触发一个事件时,浏览器的所有详细信息都存在一个叫做event的对象上,我们把它叫做事件…

Vue于React特性对比(三)

最近重学React,再次和vue做了对比。 一,为官方插件提供便利的第三方插件横行 React仅仅是一个ui框架。虽然官方提供了redux,react-router;但也有第三方的redux-thunk,redux-saga;还有react-router-dom。 而…

MYsql 安装后启动服务1067错误

今天很奇怪的问题, 新安装好的数据库 启动服务的时候就提示1067错误, 在网上找了资料是这样说的:MYSQL1067错误这里看 *************1安装MYSQL后更改了RO&am…

vc如何打开plt图像_图像基本操作-open cv

import cv2 import matplotlib.pyplot as plt import numpy as np %matplotlib inline img cv2.imread(revolte.jpg) img # 读取的是array 格式 array([[[240, 243, 255],[239, 242, 255],[238, 241, 255],...,def cv_show(name,image):cv2.imshow(name,image)cv2.waitKey(0)c…

自学编程需要注意什么?

1。选合适自己的职业,不同的职业门槛不一样,难度不一样,或多或少总有差别。 笨的选JS,有点底子的选Java,半调子的选Android或者是IOS-如果这两个职业还没完蛋的话。 不想写代码的选PM和UI,要求不高的选QA&a…

帆软报表(finereport)table块钻取,返回记住table块位置

<1>首先table块加初始化事件&#xff0c;idex为参数&#xff0c;参数值为$tab_idexsetTimeout(function(){_g().getWidgetByName("tabpane0").showCardByIndex(Number(idex)); },10) <2>在table块钻取位置&#xff0c;加js事件钻取var u navigator.user…

python调用api应用接口_Python接口测试之urllib2库应用

在接口测试中或者说在网络爬虫中&#xff0c;urllib2库是必须要掌握的一个库&#xff0c;当然还有优秀的requests库&#xff0c;今天重点来说urllib2库在接口测试中的应用。urllib2定义了很多的函数和类&#xff0c;这些函数和类能够帮助我们在复杂情况下获取URLS的内容。这些情…

破解MS Word 的只读密码限制

如果你有Microsoft Office XP 或者 Microsoft Office 2003&#xff0c;你可以使用Microsoft Script Editor 来查看&#xff08;使用AltShiftF11 快捷键切换&#xff09;被限制的Word 文档的HTML&#xff0d;Code。当Word 文档在Microsoft Script Editor打开后&#xff0c;搜索关…

CSS3透明背景表单

在线演示 本地下载

r-studio扫描后各种颜色_iPhone手机备忘录,原来还隐藏着扫描仪,你不会还不知道吧?...

大家好&#xff0c;今天就来给大家讲一讲&#xff0c;iPhone手机备忘录里面的一个隐藏功能&#xff0c;大家对手机备忘录应该都不陌生吧&#xff0c;iPhone手机的备忘录里有一个扫描仪的功能&#xff0c;可以将纸质文档变成电子档&#xff0c;不知道的小伙伴就和我一起来看看吧…

今早新闻的翻译

踏切で人身事故 東上線乱れ&#xff14;万人に影響  &#xff11;&#xff15;日午前&#xff17;時&#xff12;&#xff10;分ごろ、東京都板橋区常盤台&#xff13;丁目の東武東上線ときわ台―上板橋間の踏切で遮断機の下をくぐった女性が成増発池袋行き普通電車にはねられ…

MySQL保留2位小数

1、round(x,d)&#xff0c;四舍五入。round(x) ,其实就是round(x,0),也就是默认d为0 select round(110.35,1); # 110.4 2、TRUNCATE(x,d)&#xff0c;直接截取需要保留的小数位 select TRUNCATE(110.35,1); # 110.3 3、FORMAT&#xff08;x,d&#xff09;&#xff0c;四舍五入…

TiDB 在小米的应用实践

作者&#xff1a;张良&#xff0c;小米 DBA 负责人&#xff1b;潘友飞&#xff0c;小米 DBA&#xff1b;王必文&#xff0c;小米开发工程师。一、应用场景介绍 MIUI 是小米公司旗下基于 Android 系统深度优化、定制、开发的第三方手机操作系统&#xff0c;也是小米的第一个产品…

java图片识别查看器模拟_[转载]windows照片查看器无法显示图片内存不足

问题描述最近在使用Windows照片查看器打开一个jpg文件的时候异常Windows照片查看器无法显示此图片&#xff0c;因为计算机上的可用内存可能不足。请关闭一些目前没有使用的程序或者释放部分硬盘空间(如果硬盘几乎已满)&#xff0c;然后重试问题分析这时我们按F11或者图片下方中…

等宽字体

摘抄了一个编程用字体选择标准&#xff0c;供各位参考&#xff1a; 1. 所有字符等宽&#xff1b; 2. 简洁、清晰、规范的字符形体&#xff1b; 3. 支持ASCII码为128以上的扩展字符集&#xff1b; 4. 空白字符(ASCII: 0x20)与其他字符等宽&#xff1b; 5. 1、l和i等三个字符易于…

海量数据索引与近似最近邻随记

最近邻问题(NN) 将次数看成向量&#xff0c;然后我们就可以比对向量的距离(欧式距离&#xff0c;余弦距离)。数据中会有一些异常点&#xff0c;这些异常点会导致结果的不稳定。这种思想非常的不稳定&#xff0c;因为他只基于一个样本来做最后类别的判定。K最近邻算法(NN > K…

MySQL时间格式TIMESTAMP和DATETIME的区别

时区&#xff0c;timestamp会跟随设置的时区变化而变化&#xff0c;而datetime保存的是绝对值不会变化 自动更新&#xff0c;insert、update数据时&#xff0c;可以设置timestamp列自动以当前时间(CURRENT_TIMESTAMP)填充/更新 占用存储空间不同&#xff0c;timestamp储存占用…

python c 选择_C和Python,小白应该选择学习哪门语言?

首先&#xff0c;需要对两门语言进行初步认识&#xff0c;C语言是一门通用性的编程原因&#xff0c;为什么说通用呢?是因为它能够做很多低级、底层的处理&#xff0c;同时具有良好的跨平台性&#xff0c;C语言可以按照一定的标准在多种计算机平台上进行编译&#xff0c;包含嵌…

WaitForSingleObject的用法

WaitForSingleObject的用法 1.WaitForSingleObject 的用法 DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds ); 参数 hHandle 是一个事件的句柄&#xff0c;第二个参数 dwMilliseconds 是时间间隔。如果时间是有信…

pom.xml里发布和下载包

1.下载包 在<project>标签中 <repositories><repository><id>nexus</id><url>http://10.39.93.105:8081/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots>&l…