spark核心概念

DAG

所谓DAG就是有向无环图,其实就是个无环的流程,Spark的核心是根据RDD来实现的,Spark Scheduler!则为Spark核心实现的重要一环,其作用就是任务调度。Spark的任务调度就是如何组织任务去处理RDD中每个分区的数据,根据RDD的依赖关系构建DAG,基于DAG划分Stage,
将每个Stage中的任务发到指定节点运行。基于Spark的任务调度原理,可以合理规划资源利用,做到尽可能用最少的资源高效地完成任务计算。
在这里插入图片描述

job与action

在spark中,job的概念,是一个rdd从创建到最终通过action算子执行的过程,我们在一个应用程序中可能会有多个rdd经过多次转换,多次聚合,每经过一次action聚合就算一个job,job个action是一一对应关系

DAG的宽窄依赖和阶段划分

窄依赖:父RDD的一个分区的数据,全部发送给子RDD的一个分区
下面是一个典型窄依赖的关系图
在这里插入图片描述
宽依赖:父RDD的一个分区的数据,发送给子RDD的多个分区,宽依赖的别名又叫shuffle。
在这里插入图片描述
区分宽窄依赖的一个方便方法就看一个分区根部是否存在多个分叉。
spark会根据宽依赖,划分阶段,每遇到宽依赖,就会分隔成两个阶段,划分完成后,每个阶段内部一定是窄依赖,如下两个stage之间,存在一个宽依赖的关系
在这里插入图片描述

内存迭代计算

Spark内存迭代的计算概念,也就是上面说的,DAG图会基于分区和宽窄依赖关系划分阶段,
一个阶段的内部都是窄依赖,窄依赖内,如果形成前后1:1的分区对应关系,就可以产生许多内存迭代计算的管道,这些内存迭代计算的管道,就是一个个具体的执行Task,一个Task是一个具体的线程,任务跑在一个线程内,就是走内存计算了,比如上面b1到p1的tupleRDD完全有一个线程负责,既没有网络交互,也没有线程间通信,就会最高效地完成数据b1的处理.

Spark为什么比MapReduce快

  • Spark的算子丰富,MapReduce算子匮乏(Map和Reduce),MapReduce这个编程模型,很难在一套MR中处理复杂的任务.很多的复杂任务,是需要写多个MapReducei进行串联.多个MR串联通过磁盘交互数据
  • Spark可以执行内存迭代,算子之间形成DAG基于依赖划分阶段后,在阶段内形成内存迭代管道.但是MapReducel的Map和Reduce之间的交互依旧是通过硬盘来交互的.

spark并行度设置

spark并行度指示的是spark允许并行运行的task数,spark会根据并行的task数来设置分区数,一般来说,并行task数和分区数一一对应,

  • 如何设置并行度
    可以在代码中和配置文件中以及提交程序的客户端参数中设置
    优先级从高到低:
    1、代码中
    conf SaprkConf)
    conf.set(“spark.default.parallelism”,“100”)
    2、客户端提交参数中
    bin/spark-submit --conf “spark.default.parallelism=100”
    3、配置文件中
    conf/spark-defaults.conf中设置
    spark.default.parallelism 100
    4、默认(1,但是不会全部以1来跑,多数时候基于读取文件的分片数量来作为默认并行度)
    全局并行度配置的参数:
    spark.default.parallelism

注意

  • 全局并行度是推荐设置,不要针对RDD调整分区,很可能影响到内存迭代管道计算,造成额外的shuffle
  • 如果一定要针对某个RDD来调整分区,可以用之前提到过的三个算子:
    (1)repartition算子
    (2)coalesce算子
    (3)partitionBy算子
    调整也建议往下调,不要增加分区

集群中如何规划并行度

  • 设置为CPU总核心的2~10倍
    比如集群可用CPU核心是100个,我们建议并行度是200~1000
    确保是CPU核心的整数倍即可,最小是2倍,最大一般10倍或更高(适量)均可
  • 为什么要设置最少2倍?
    CPU的一个核心同一时间只能千一件事情
    所以,在100个核心的情况下,设置100个并行,就能让CPU100%出力.
    这种设置下,如果task的压力不均衡,某个task先执行完了.就导致某个cPU核心空闲
    所以,我们将Task(并行)分配的数量变多,比如800个并行,同一时间只有100个在运行,700个在等待.但是可以确保,某个task运行完了.后续有task补上,不让cpu闲下来,最大程度利用集群的资源.
    规划并行度,只看集群总CPU核数
    在pyspark中,一个task只能处理一个RDD的一个分区,有几个分区,就有几个task来处理它,一个rdd如果有两个分区,就会有两个task来处理它。

Spark的任务调度

Spark的任务,由Driver进行调度,这个工作包含:
1、逻辑DAG产生
2、分区DAG产生
3、Task划分
4、将Task分配给Executor并监控其工作
在这里插入图片描述
如上图
Driver被构建出来后,构建SparkContext(执行环境入口对象),之后基于DAG Scheduler(DAG调度器)构建逻辑Task分配,基于TaskScheduler(Task调度器)将逻辑Task分配到各个Executor.上干活,并监控它们,Worker(Executor)被TaskScheduler管理监控,听从它们的指令干活,并定期汇报进度,DAG调度器和Task调度器是spark的核心调度器,其中DAG调度器决定了task数和任务cpu分配,task调度器只是决定task分配到哪个executor。

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

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

相关文章

Day53:WEB攻防-XSS跨站SVGPDFFlashMXSSUXSS配合上传文件添加脚本

目录 MXSS UXSS:Universal Cross-Site Scripting HTML&SVG&PDF&SWF-XSS&上传&反编译(有几率碰到) SVG-XSS PDF-XSS Python生成XSS Flash-XSS 知识点: 1、XSS跨站-MXSS&UXSS 2、XSS跨站-SVG制作&配合上传 3、XSS跨站-…

Docker进阶:使用Docker部署Harbor私有镜像仓库

Docker进阶:使用Docker部署Harbor私有镜像仓库 1、安装Docker和Docker Compose1、安装Docker、Docker Compose2、验证Docker和Docker Compose是否成功安装3、先启动运行docker服务 2、下载并配置Harbor1、下载最新版本的Harbor离线安装包2、配置Harbor的主机名和管理…

京东云搭建幻兽帕鲁Palworld多人游戏联机服务器教程,1分钟开服

使用京东云服务器搭建幻兽帕鲁Palworld游戏联机服务器教程,非常简单,京东云推出幻兽帕鲁镜像系统,镜像直接选择幻兽帕鲁镜像即可一键自动部署,不需要手动操作,真正的新手0基础部署幻兽帕鲁,阿腾云atengyun.…

uni-app(使用阿里图标)

1.注册阿里矢量图标库 注册阿里图标库账号并登录,https://www.iconfont.cn/ 2.加入购物车 搜索适合自己的图标,加入购物车,如下图: 3.加入项目 我的->资源管理->我的项目->创建项目,然后返回购物车&#…

中国信通院 X StarRocks金融用户社区正式成立

在国家战略的推动下,开源技术正逐渐成为金融行业创新发展的重要驱动力。2024 年 3 月 26 日,中国信息通信研究院 X StarRocks 金融用户社区(以下简称“社区”)正式成立,这一举措旨在深化国内金融领域的开源生态建设&am…

粗略总结AI大模型学习需要了解的要点

目录 一、概念简介 二、兴起原因 三、相关要点 四、不足之处 五、总结 一、概念简介 AI大模型学习是指利用大规模数据集和强大计算能力进行深度学习模型的训练。随着数据的爆炸式增长和计算资源的提升,AI大模型学习成为了现代人工智能研究的重要方向。 二、兴起…

使用pytorch构建一个初级的无监督的GAN网络模型

在这个系列中将系统的构建GAN及其相关的一些变种模型,来了解GAN的基本原理。本片为此系列的第一篇,实现起来很简单,所以不要期待有很好的效果出来。 第一篇我们搭建一个无监督的可以生成数字 (0-9) 手写图像的 GAN,使用MINIST数据…

入门指南|营销中人工智能生成内容的主要类型 [新数据、示例和技巧]

由于人工智能技术的进步,内容生成不再是一项令人头疼的任务。随着人工智能越来越多地接管手动内容制作任务,营销人员明智的做法是了解现有的不同类型的人工智能生成内容,以及哪些内容从中受益最多。这些工具可以帮助我们制作对您的受众和品牌…

Synchronized锁、公平锁、悲观锁乐观锁、死锁等

悲观锁 认为自己在使用数据的时候一定会有别的线程来修改数据,所以在获取数据前会加锁,确保不会有别的线程来修改 如: Synchronized和Lock锁 适合写操作多的场景 乐观锁 适合读操作多的场景 总结: 线程8锁🔐 调用 声明 结果:先打印发送短信,后打印发送邮件 结论…

机器学习(三)

神经网络: 神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。 f为激活(响应)函数: 理想激活函数是阶跃函数,0表示抑制神经元而1表示激活神经元。 多层前馈网络结构: BP(误差逆…

OpenPLC_Editor 在Ubuntu 虚拟机安装记录

1. OpenPLC_Editor在虚拟机上费劲的装了一遍,有些东西已经忘了,主要还是python3 的缺失库版本对应问题,OpenPLC_Editor使用python3编译的,虚拟机的Ubuntu 18.4 有2.7和3.6两个版本,所以需要注意。 2. OpenPLC_Editor …

Svg Flow Editor 原生svg流程图编辑器(四)

系列文章 Svg Flow Editor 原生svg流程图编辑器(一) Svg Flow Editor 原生svg流程图编辑器(二) Svg Flow Editor 原生svg流程图编辑器(三) Svg Flow Editor 原生svg流程图编辑器(四&#xf…

贪心算法--最大数

个人主页:Lei宝啊 愿所有美好如期而遇 本题链接https://leetcode.cn/problems/largest-number/description/ class Solution { public:bool static compare(int a, int b){return (to_string(a) to_string(b)) > (to_string(b) to_string(a));}bool operato…

探索 2024 年 Web 开发最佳前端框架

前端框架通过简化和结构化的网站开发过程改变了 Web 开发人员设计和实现用户界面的方法。随着 Web 应用程序变得越来越复杂,交互和动画功能越来越多,这是开发前端框架的初衷之一。 在网络的早期,网页相当简单。它们主要以静态 HTML 为特色&a…

数据库---PDO

以pikachu数据库为例&#xff0c;数据库名&#xff1a; pikachu 1.连接数据库 <?php $dsn mysql:hostlocalhost; port3306; dbnamepikachu; // 这里的空格比较敏感 $username root; $password root; try { $pdo new PDO($dsn, $username, $password); var_dump($pdo)…

【管理咨询宝藏59】某大型汽车物流战略咨询报告

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏59】某大型汽车物流战略咨询报告 【格式】PDF 【关键词】HR调研、商业分析、管理咨询 【核心观点】 - 重新评估和调整商业模式&#xff0c;开拓…

如何开始定制你自己的大型语言模型

2023年的大型语言模型领域经历了许多快速的发展和创新&#xff0c;发展出了更大的模型规模并且获得了更好的性能&#xff0c;那么我们普通用户是否可以定制我们需要的大型语言模型呢&#xff1f; 首先你需要有硬件的资源&#xff0c;对于硬件来说有2个路径可以选。高性能和低性…

StatefulBuilder 和 Builder

前言 果然了解的越多&#xff0c;越发现自己狗屁都不是。StatefulBuilder 和 Builder 之前真的不知道。还是在 对话框状态管理 中了解到了这两个东西。 简介 以下内容来自通义灵码 在Flutter中&#xff0c;StatefulBuilder 和 Builder 都是用来动态构建 widget 树的组件&am…

使用unplugin-auto-import页面不引入api飘红

解决方案&#xff1a;. tsconfig.json文件夹加上 {"compilerOptions": {"target": "ES2020","useDefineForClassFields": true,"module": "ESNext","lib": ["ES2020", "DOM", &q…

Mybatis别名 动态sql语句 分页查询

给Mybatis的实体类起别名 给Mybatis的xml文件注册mapper映射文件 动态sql语句 1 if 2 choose 3 where 4 foreach 一&#xff09;if 查询指定名称商品信息 语法&#xff1a; SELECT * FROM goods where 11 <if test "gName!null"> and g.g_name like co…