Spark---SparkCore(一)

news2024/11/16 9:47:36

一、术语与宽窄依赖

1、术语解释

1、Master(standalone):资源管理的主节点(进程)

2、Cluster Manager:在集群上获取资源的外部服务(例如:standalone,Mesos,Yarn)

3、Worker Node(standalone):资源管理的从节点(进程)或者说管理本机资源的进程

4、Driver Program:用于连接工作进程(Worker)的程序

5、Executor:是一个worker进程所管理的节点上为某Application启动的一个进程,该进程负责运行任务,并且负责将数据存在内存或者磁盘上。每个应用都有各自独立的executors

6、Task:被送到某个executor上的工作单元

7、Job:包含很多任务(Task)的并行计算,可以看做和action对应

8、Stage:一个Job会被拆分很多组任务,每组任务被称为Stage(就像Mapreduce分map task和reduce task一样)

2、窄依赖和宽依赖

RDD之间有一系列的依赖关系,依赖关系又分为窄依赖和宽依赖。

窄依赖

父RDD和子RDD partition之间的关系是一对一的。或者父RDD一个partition只对应一个子RDD的partition情况下的父RDD和子RDD partition关系是多对一的。不会有shuffle的产生。

宽依赖

父RDD与子RDD partition之间的关系是一对多。会有shuffle的产生。

宽窄依赖图理解:

二、Stage的计算模式

Spark任务会根据RDD之间的依赖关系,形成一个DAG有向无环图,DAG会提交给DAGScheduler,DAGScheduler会把DAG划分相互依赖的多个stage,划分stage的依据就是RDD之间的宽窄依赖。遇到宽依赖就划分stage,每个stage包含一个或多个task任务。然后将这些task以taskSet的形式提交给TaskScheduler运行。stage是由一组并行的task组成。

stage切割规则:

切割规则:从后往前,遇到宽依赖就切割stage。

stage计算模式:

pipeline管道计算模式,pipeline只是一种计算思想,模式。

1、数据一直在管道里面什么时候数据会落地?

  1. 对RDD进行持久化。
  2. shuffle write的时候。

2、Stage的task并行度是由stage的最后一个RDD的分区数来决定的 。

3、如何改变RDD的分区数?

例如:reduceByKey(XXX,3),GroupByKey(4)

4、测试验证pipeline计算模式

1.val conf = new SparkConf()
2.conf.setMaster("local").setAppName("pipeline");
3.val sc = new SparkContext(conf)
4.val rdd = sc.parallelize(Array(1,2,3,4))
5.val rdd1 = rdd.map { x => {
6.  println("map--------"+x)
7.  x
8.}}
9.val rdd2 = rdd1.filter { x => {
10.  println("fliter********"+x)
11.  true
12.} }
13.rdd2.collect()
14.sc.stop()

三、Spark资源调度和任务调度

  1. Spark资源调度和任务调度的流程:

启动集群后,Worker节点会向Master节点汇报资源情况,Master掌握了集群资源情况。当Spark提交一个Application后,根据RDD之间的依赖关系将Application形成一个DAG有向无环图。任务提交后,Spark会在Driver端创建两个对象:DAGScheduler和TaskScheduler,DAGScheduler是任务调度的高层调度器,是一个对象。DAGScheduler的主要作用就是将DAG根据RDD之间的宽窄依赖关系划分为一个个的Stage,然后将这些Stage以TaskSet的形式提交给TaskScheduler(TaskScheduler是任务调度的低层调度器,这里TaskSet其实就是一个集合,里面封装的就是一个个的task任务,也就是stage中的并行度task任务),TaskSchedule会遍历TaskSet集合,拿到每个task后会将task发送到计算节点Executor中去执行(其实就是发送到Executor中的线程池ThreadPool去执行)。task在Executor线程池中的运行情况会向TaskScheduler反馈,当task执行失败时,则由TaskScheduler负责重试,将task重新发送给Executor去执行,默认重试3次。如果重试3次依然失败,那么这个task所在的stage就失败了。stage失败了则由DAGScheduler来负责重试,重新发送TaskSet到TaskSchdeuler,Stage默认重试4次。如果重试4次以后依然失败,那么这个job就失败了。job失败了,Application就失败了。

TaskScheduler不仅能重试失败的task,还会重试straggling(落后,缓慢)task(也就是执行速度比其他task慢太多的task)。如果有运行缓慢的task那么TaskScheduler会启动一个新的task来与这个运行缓慢的task执行相同的处理逻辑。两个task哪个先执行完,就以哪个task的执行结果为准。这就是Spark的推测执行机制。在Spark中推测执行默认是关闭的。推测执行可以通过spark.speculation属性来配置。

注意:

  1. 对于ETL类型要入数据库的业务要关闭推测执行机制,这样就不会有重复的数据入库。
  2. 如果遇到数据倾斜的情况,开启推测执行则有可能导致一直会有task重新启动处理相同的逻辑,任务可能一直处于处理不完的状态。

2、图解Spark资源调度和任务调度的流程

3、粗粒度资源申请和细粒度资源申请

  • 粗粒度资源申请(Spark)

在Application执行之前,将所有的资源申请完毕,当资源申请成功后,才会进行任务的调度,当所有的task执行完成后,才会释放这部分资源。

优点:在Application执行之前,所有的资源都申请完毕,每一个task直接使用资源就可以了,不需要task在执行前自己去申请资源,task启动就快了,task执行快了,stage执行就快了,job就快了,application执行就快了。

缺点:直到最后一个task执行完成才会释放资源,集群的资源无法充分利用。

  • 细粒度资源申请(MapReduce)

Application执行之前不需要先去申请资源,而是直接执行,让job中的每一个task在执行前自己去申请资源,task执行完成就释放资源。

优点:集群的资源可以充分利用。

缺点:task自己去申请资源,task启动变慢,Application的运行就相应的变慢了。

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

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

相关文章

js实现数组的上下移动

思路:上移表示index索引位置减去1,下移表示index索引位置增加1。使用数组的splice方法实现。例如上移:splice(元素当前索引位置,1(删除1个元素),‘元素当前索引位置 - 1’)。

Unity 引擎宣布:自 2024 年起,开发者需支付费用!

Unity引擎宣布的新的收费模式,从2024年1月1日开始,根据游戏的安装量来对开发者进行收费。具体来说,每次游戏被下载时,UnityRuntime也会被安装,因此可能会产生额外的费用。对于开发者来说,需要注意以下几点&…

Linux如何查找某个路径下大于1G的文件

find 命令可以用于在 Linux 或 macOS 系统中查找文件和目录。如果你想查找大于1GB的文件,可以使用 -size 选项结合 参数。以下是一个示例: find /path/to/search -type f -size 1G这里的 /path/to/search 是你要搜索的目录的路径。这个命令将查找该目录…

“java.lang.IllegalStateException: No ConfigurableListableBeanFactory set“,缺少配置

一、错误分析 做品优购项目的运营商安全登录时,运行项目后,浏览器访问模板页,模板页的表格无法正常显示,报错信息如下: SEVERE: StandardWrapper.Throwable java.lang.IllegalStateException: No ConfigurableLista…

让工作效率提升10倍:十大AIGC工具评测【建议收藏】

AI技术的普及已经在近年来不断增长。这种技术已经改变了我们与电脑的互动方式,让我们能够更高效、更自然地完成任务。本文将展示10个基于ChatGPT、GPT-3.5和 GPT-4.0 AI模型构建的最强大的资源,使您更容易充分利用它们的潜力。因此,如果您想利…

[HOW TO]-VirtualBox的虚拟机通过宿主机上网

快速链接: . 👉👉👉 [专栏目录]-环境搭建安装问题笔记目录 👈👈👈 付费专栏-付费课程 【购买须知】:👉👉👉 个人博客笔记导读目录(全部) 👈👈&a…

AI制作的《大多数普通女孩的一生》——公开教程和工作流

内容来源:JiamigouCn ​这周由AI制作的《大多数普通女孩的一生》,在抖音爆火,获得新华网转发。到目前为止,全网还没有公开教程和工作流,需要花费800-2000购买。 本着AI社区共享原则,我委托公众号“楚思智能…

当内容创作进入 AGI 时代,你也可以成为「神笔马良」

我神笔马良的童话故事我们或多或少都听过,一支神笔在手,想画什么就能画出什么,栩栩如生。创造者的理解力、想象力和创作力都能通过这支神笔释放。 近一年,随着 AIGC 内容生产工具的快速出圈,有人把 Stable Diffusion、…

【T3】畅捷通T3软件数据恢复提示:为备份或还原操作指定的设备太多;只允许指定64个设备。

【问题描述】 畅捷通T3软件还原账套/数据恢复过程中提示: SQL Server为备份或还原操作指定的设备太多;只允许指定64个设备。 【解决方法】 提示这个错误时, 说明是在把从SQLServer2005上备份的数据还原到SQLServer2000数据库上。 即&#x…

Nginx 配置错误导致的漏洞

目录 1. CRLF注入漏洞 Bottle HTTP头注入漏洞 2.目录穿越漏洞 3. http add_header被覆盖 本篇要复现的漏洞实验有一个网站直接为我们提供了Docker的环境,我们只需要下载下来就可以使用: Docker环境的安装可以参考:Docker安装 漏洞环境的…

Sublime Text 4168最新代码编辑

Sublime Text是一款功能强大的文本编辑器,具有以下主要功能: 支持多种编程语言的语法高亮和代码自动完成功能,包括Python、JavaScript、HTML、CSS等。提供代码片段(Snippet)功能,可以将常用的代码片段保存…

vite项目配置vite.config.ts在打包过程中去除日志

在生产环境上,务必要将日志清除干净,其因有二,在webgis系统中,有很多几何数据,体积大、数量多,很容易引起系统卡顿;清除log后,系统看着舒服,协同开发有很多无聊的日志&am…

展现天津援疆工作成果 “团结村里看振兴”媒体采风团走进和田

央广网天津11月19日消息(记者周思杨)11月18日,由媒体记者、书法和摄影家、旅行社企业代表等40余人组成的“团结村里看振兴”媒体采风团走进新疆和田。在接下来的一周时间里,采风团将走访天津援疆和田地区策勒县、于田县、民丰县乡村振兴示范村&#xff0…

FL Studio21.2.0中文语言包编曲软件入门讲解

FL Studio常称水果,是一款功能强大的编曲软件,集编曲,录音,剪辑,混音于一身,简单易上手,灵活性高,强大到突破想象。 FL Studio,当前版本 FL Studio21,百分之…

PyQt基础_004_ 按钮类控件QPushButton以及自定义按钮控件

Qpushbutton基本操作 1.热键 2.按钮加图标 3.按钮事件等 import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import *class Form(QDialog):def __init__(self, parentNone):super(Form, self).__init__(parent)layout QVBoxLayout()se…

基于Vue+SpringBoot的个人健康管理系统

项目编号: S 040 ,文末获取源码。 \color{red}{项目编号:S040,文末获取源码。} 项目编号:S040,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 健康档案模块2.2 体检档案模块2.3 健…

Linux 6.7全面改进x86 CPU微码加载方式

导读最近,社区在清理 Linux 上的 Intel/AMD x86 CPU 微代码加载方面做了大量的工作,这些工作现已合并到 Linux 6.7 中。 由于在启动时加载 CPU 微代码对于减少不断出现的新 CPU 安全漏洞以及有时解决功能问题非常重要,Thomas Gleixner 最近开…

什么是 TLS/SSL 握手

TLS/SSL 握手是一个加密过程,每当客户端(如浏览器)与服务器建立连接时,都会在后台进行,此握手协议有助于客户端和服务器之间的安全连接,从而促进隐私、数据完整性和机密性。 TLS/SSL 握手何时发生 每当客…

【开源】基于Vue.js的数据可视化的智慧河南大屏

项目编号: S 059 ,文末获取源码。 \color{red}{项目编号:S059,文末获取源码。} 项目编号:S059,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 数据模块 …

前端技术探秘-Nodejs的CommonJS规范实现原理 | 京东物流技术团队

了解Node.js Node.js是一个基于ChromeV8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型,让JavaScript 运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。Node中增添了很…