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,一经查实,立即删除!

相关文章

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…

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

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

CSS3透明背景表单

在线演示 本地下载

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

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

今早新闻的翻译

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

TiDB 在小米的应用实践

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

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

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

智能云改-docker云迁移实战

本次安装的linux版本是centos7.4,docker安装不依赖任何环境,但是必须要连接网络,满足这一点就可以进行docker安装了。 一、安装: 1.删除就版本的docker输入命令:yum -y remove docker \docker-common \docker-selinux …

python词频统计代码_python统计词频

一、程序分析 (1)将文件读入缓冲区(dst指文本文件存放路径,设置成形参,也可以不设,具体到函数里设置) def process_file(dst): # 读文件到缓冲区try: # 打开文件 txtopen(dst,"r") ex…

Oracle的resouce、unlimited tablespace 及如何把数据导入不同的表空间

resouce是角色,unlimited tablespace是权限。 很多人在进行数据迁移时,希望把数据导入不同于原系统的表空间,在导入之后却往往发现,数据被导入了原表空间。本例举例说明解决这个问题:1.如果缺省的用户具有DBA权限那么导入时会按照…

.net开发是做什么的_软件开发是什么, 该怎么做?

软件开发是什么, 该怎么做?1 引子关于什么是软件开发存在很多观点,有的认为软件开发即服务,有的认为软件开发即产品,有的认为软件开发即平台,这些观点各有各的侧重点。这篇文章我们来学习和探讨一下软件开发。2 软件…

使用HTML5、CSS3和jQuery增强网站用户体验

记得几年前如果你需要添加一些互动元素到你的网站中用来改善用户体验?是不是立刻就想到了flash实现?这彷佛年代久远的事了。使用现在最流行的Web技术HTML5,CSS3和jQuery,同样也可以实现类似的用户体验。而且使用这些特性将会比使用…

python中loop函数_python + Django 的forloop功能试验讲解

一、forloop功能详解记录 遇到一个问题困扰了我好久,结果还是知识盲区造成的。下边记录一下。 通过return forloop可以返回前端循环中的索引值 二、forloop大概功能 forloop是Django模板中一个功能,主要是可以计算循环的对象的索引值(大白话大…

[导入]源代码版本控制(二)

在VS6.0时代,VSS的版本是6.0,现在VS的版本都到2008了,VSS的版本目前是2005,这回以2005为例。安装就免了。数据库的创建:如果要在局域网内共享这个数据库,那还需要将刚才存放数据库的目录共享出去。为数据库…

苏宁的Node.js实践:不低于Java的渲染性能、安全稳定迭代快

前端 Node.js 的使用场景大多集中在前端工具上,当前的前端主要把它定位为辅助。苏宁易购使用 Node.js 作为前后端分离的主要手段,经历了从技术引进到全面开花,从边缘功能到核心业务,从纷乱到稳定的过程。同时 Node.js 作为新引入的…

MVP群聊某美国公司的应聘试题(压死九个还是一个)

某美国公司的应聘试题(压死九个还是一个),测试你的管理方式有二条铁轨,一条新的,一条旧的。有了新铁轨后,旧铁轨不再有火车通过。有一天有十个小孩到铁轨上玩耍,九个小孩在新铁轨上玩&#xff0…

html与cgi脚本的配合使用

利用boa服务器测试arm开发板上的cgi和html联合编程的小例程。很简单,但是当时觉得很有意思。在这里给大家展示一下,高手飘过。 在ubuntu下安装boa测试环境,即先在本地搭建一个boa的网页服务器。apt-get install boa。稍作配置即可。我的Boa按…

zabbix3监控ESXI主机

ESXI主机VMware公司企业级虚拟化的解决方案Vsphere的重要组件,也是虚拟机的宿主机,对其监控有着重要的意义,下边介绍二种方发对其监控。 方法一:通过修改服务端的控制项来进行监控。 虚拟机监控分两个步骤完成。首先,Z…

mybatis jar包_springboot2整合mybatis-plus3踩到的坑

前言最近在进行项目重构,在架构师的建议下,就把项目中mybatis切换成mybatis-plus。因为mybatis-plus在mybatis的基础上只做增强不做改变,因此切换的成本很低,就只需改jar和配置内容,原先的代码无需改动。因为mybatis-p…

共享几套silverlight2 toolkit最新的皮肤控件样式下载

下载了最新的silverlight2 toolkit看看,发现里面的控件样式还是多漂亮的,与大家分享下。 blue dark light orange purple red 样式源码下载:点击下载 当然,我最喜欢的还是orange哦。 转载于:https://www.cnblogs.com/liaohenchen/…