spark(5)-spark内核架构(course13)

Spark学习(二)---Spark运行架构和核心概念 *在不同的部署环境中,这个提交过程基本相同,但是又有细微的区别,我们这里不进行详细的比较,但是因为国内工作中,将 Spark 引用部署到Yarn 环境中会更多一些,所以本课程中的提交流程是基于 Yarn 环境的。,由于任务分布在不同的计算节点进行计算,所以能够真正地实现多任务并行执行,记住,这里是并行,而不是并发。,**是整个集群中的专门用于计算的节点。, 而Worker 呢,也是进程,一个 Worker 运行在集群中的一台服务器上,由 Master 分配资源对数据进行并行的处理和计算,类似于。 阅读详情

参考:http://blog.youkuaiyun.com/slq1023/article/details/50816669

1. Spark内核架构

1.1 spark runtime 流程示意图


1.2 driver、SparkContextspark、executor等概念

        Executor是运行在Worker节点上的为当前应用程序而开启的一个进程里面的处理对象,这个对象负责了Task的运行,通过线程池中的线程并发执行和线程复用的方式,线程池中的每一个线程可以运行一个任务,任务完成后回收到线程池中进行线程复用。

application = driver + executor

        SparkContext里有高层调度器、低层调度器、SchedulerBackend。高层调度器就是把整个作业划分成几个阶段,底层调度器是每个阶段里的任务该如何处理,SchedulerBackend是管理整个集群中为当前程序分配的计算资源(Executor)。
        SparkContext在创建这些对象的同时会向Master注册当前程序,注册OK后会分配资源,根据Action触发的JOB,JOB里有RDD,从后往前推,如果有宽依赖的话,就划分成不同的Stage(一个Stage内部都是计算轮回完全一样,只是计算的数据不同而已)。stage划分完成后提交给底层调度器TaskScheduler。TaskScheduler拿到任务的集合,就会根据数据的本地性把任务发到Executor执行。

        Executor在出问题时会向Driver汇报。运行完后SparkContext会关闭。当然创建的对象也都会关闭。

        Driver是驱动Executor工作的,Executor是具体处理数据分片的,内部是线程池并发地处理数据分片。应用程序是Driver和
Executors的模式,每个应用程序都有Executor代码。
Executor部分代码:main方法中new SparkConf 以及一些操作方法
driver部分的代码:SparkConf进行配置然后创建SparkContext,SparkConf+SparkContext,如下:

driver部分代码:Sparkconf + SparkContext
val conf =new SparkConf()
conf.setAppName("...")
conf.setMaster("...")

val sc = new SparkContext(conf)
       SparkContext创建的过程中做了很多内容,包括DAG Scheduler(一个应用程序默认只有一个DAG Scheduler)、TaskScheduler、SchedulerBackend、SparkEnv。
        textFile、flatMap、map、reduceByKey:这些代码都是Transformation级别的,都会产生RDD,既是RDD操作又会产生RDD,这些代码就是具体的业务实现,就是Executor中具体执行的代码。最后都会被Action触发执行,都是在Worker中的Executor中处理的。

注:driver是以sparkContext为核心的,可以理解为driver就是sparkContext

1.3 spark cluster 流程示意图


        Executor是运行在Worker节点上的为当前应用程序而开启的一个进程里面的处理对象,这个对象负责了Task的运行,通过线程池中的线程并发执行和线程复用的方式,线程池中的每一个线程可以运行一个任务,任务完成后回收到线程池中进行线程复用。
        Executor就是进程里的对象。默认情况下Driver运行在当前提交的机器上,一个worker默认分为当前的应用程序只开启一个executor,当然可以配置为多个。
※ 问题:一个worker里executor是多点好还是少点好?
=>看情况。如果只分了一个Executor,占据了大量CPU core,但资源闲置,造成资源浪费。
由于CPU Cores的个数是有限的,如果只开启一个Executor,当任务比较大时内存易OOM。这时最好分成几个不同的Executor。

        ClusterManager是集群获取资源的外部服务。Spark最开始时没有Yarn模式,也没有Standalone模式,最开始的资源管理服务是mesos。Spark程序的运行不依赖于ClusterManager。Spark应用程序向clustermanager注册成功后,Master就提前直接分配好资源,程序运行过程中不需要ClusterManager参与。(ClusterManager是可插拨的,这种资源分配方式是粗粒度的资源分配方式)
        worker就是集群中任何可以运行APP具体操作代码的节点。worker上不会运行程序代码,worker是管理当前节点内存CPU等资源使用状况的,它会接收Master分配资源的指令,并通过executor runner启动一个新进程,进程内有Executor。
        clustermanager是项目经理,管理很多worker,worker是工头,Worker下面有很多资源。

※ worker会不会向master汇报当前node的资源信息?
=> 不会。worker会不断向Master发的心跳,但内容只有worker ID。是用来判断Worker是否活着。
那master怎么知道各节点的资源信息?
=> 分配资源的时候就已经知道了。应用程序在向Master注册时,注册成功后master就会分配资源,分配时就会记录资源,所有的资源都是Master分配的,所以Master当然知道各节点的资源信息了。
只有当Worker出现故障时才会向Master汇报资源情况。

JOB
        JOB就是包含了一系列Task的并行计算。JOB一般由应用程序的Action操作触发,比如saveAsTextFile。
JOB里面是一系列的RDD及作用在RDD的各种operation操作,collect就是一个Action,会触发一个作业。wordCountOrdered就是一系列的RDD及对RDD的操作。包括map、flatMap、TextFile,每一步都会至少产生一个RDD。TextFile就会产生hadoopRDD 和MapPartitionsRDD。
        JOB都是由Action触发的,触发时前面有一系列的RDD。
        action不会产生RDD,只会导致RunJOB。
        action前是RDD,是transformation级别的,是lazy级别的执行方式。
        如果后面的RDD对前面的RDD进行回溯时是窄依赖的话,就会在内存中进行迭代,这是Spark快的一个很重要的原因。
       spark快不仅是因为基于内存。调度,容错才是Spark的精髓的基本点。
        窄依赖有一个Range级别,即依赖固定个数的父RDD。所谓固定个数是说不会随着数据规模的扩大而改变。
        依赖构成了DAG。如果是宽依赖DAG Scheduler就会划分Stage,Stage内部是基于内存迭代的,当然也可以基于磁盘迭代。
stage内部计算逻辑完全一样,只是计算的数据不同。

任务(Task)就是计算一个数据分片的,数据分片:例如从HDFS上读取数据时默认数据分片就是128MB。

※ 一个数据分片是否精准地等于一个Block的大小(默认128MB)?
=> 一般情况下都不等于,因为最后一个分片会跨两个Block。

1.4 通过spark historyserver UI查看

        http://master-1a:18080
        问题:没有发现DAG visualization界面,待解决。

2. SparkDAG概念

        在spark里每一个操作生成一个RDD,RDD之间连一条边,最后这些RDD和他们之间的边组成一个有向无环图,这个就是DAG。

        Spark内核会在需要计算发生的时刻绘制一张关于计算路径的有向无环图,也就是DAG。

        有了计算的DAG图,Spark内核下一步的任务就是根据DAG图将计算划分成任务集,也就是Stage,这样可以将任务提交到计算节点进行真正的计算。Spark计算的中间结果默认是保存在内存中的,Spark在划分Stage的时候会充分考虑在分布式计算中可流水线计算(pipeline)的部分来提高计算的效率,而在这个过程中,主要的根据就是RDD的依赖类型。根据不同的transformation操作,RDD的依赖可以分为窄依赖(Narrow Dependency)和宽依赖(Wide Dependency,在代码中为ShuffleDependency)两种类型。窄依赖指的是生成的RDD中每个partition只依赖于父RDD(s) 固定的partition。宽依赖指的是生成的RDD的每一个partition都依赖于父 RDD(s) 所有partition。窄依赖典型的操作有map, filter, union等,宽依赖典型的操作有groupByKey, sortByKey等。可以看到,宽依赖往往意味着shuffle操作,这也是Spark划分stage的主要边界。对于窄依赖,Spark会将其尽量划分在同一个stage中,因为它们可以进行流水线计算。

         至于以上一些shuffer过程建议大家多看看spark官网会比较好点。



深度解析 Spark(进阶):架构、集群运行机理与核心组件详解 Spark 应用程序作为集群上独立的进程集运行,由SparkContext 主程序(称为驱动程序)中的对象进行协调。具体来说,为了在集群上运行,SparkContext 可以连接到多种类型的集群管理器 (Spark 自己的独立集群管理器、Mesos、YARN 或 Kubernetes),这些集群管理器跨应用程序分配资源。连接后,Spark 会获取集群中节点上的执行程序,这些执行程序是为应用程序运行计算和存储数据的进程。 阅读详情

相关推荐

Apache Spark:Spark核心架构解析

Apache Spark 是一个开源的分布式计算系统,由加州大学伯克利分校的 AMPLab 开发,于2009年首次发布。Spark 的设计初衷是为了克服 Hadoop MapReduce 在迭代计算和数据处理速度上的局限性。2013年,Spark 成为 Apache 的顶级项目,标志着其在大数据处理领域的成熟和广泛应用。

kkchenjj的博客 1382

Spark Core【Spark的内核概述、部署模式、通讯架构】

Spark内核泛指Spark的核心运行机制,包括Spark核心组件的运行机制、Spark任务调度机制、Spark内存管理机制、Spark核心功能的运行原理等,熟练掌握Spark内核原理,能够帮助我们更好地完成Spark代码设计,并能够帮助我们准确锁定项目运行过程中出现的问题的症结所在。上图为Spark通用运行流程图,体现了基本的Spark应用程序在部署中的基本提交流程。任务提交后,都会先启动Driver程序;随后Driver向集群管理器注册应用程序;...

weixin_43923463的博客 498

spark内核详细架构图。

spark内核详细架构图。

Spark核心架构解析:分布式计算的革新力量

Spark最显著的突破在于其内存优先的计算模型。与Hadoop MapReduce需要频繁读写磁盘不同,Spark将中间数据存储在内存中,这使得迭代算法的执行效率提升近百倍。通过高效的LRU缓存机制和内存管理策略,Spark智能平衡计算与存储的内存使用。Spark的创新调度系统将作业转化为有向无环图(DAG),通过阶段(stage)划分和任务流水线执行,大幅减少不必要的shuffle操作。Apache Spark作为当今最流行的大数据处理框架之一,其革命性的架构设计彻底改变了传统分布式计算的性能瓶颈。

2402_87144407的博客 232

Spark技术内幕 深入解析Spark内核架构设计

多位Spark的贡献者和专家联袂推荐,详细剖析spark内核各个模块并辅以相应源码解析的著作。全面分析spark内核各个模块的设计思想和实现原理,深入理解其内部运作机制和实现细节。

Ubuntu环境下rknn-toolkit2的安装与兼容性解析

本文详细解析了在Ubuntu系统上安装瑞芯微rknn-toolkit2工具链的完整流程与关键注意事项。文章重点剖析了rknn-toolkit2与旧版rknn-toolkit的核心兼容性问题,强调两者在API、模型格式及运行时库上互不兼容,并推荐使用Conda虚拟环境进行隔离管理,为RK3566、RK3588等开发板的AI模型部署提供清晰的实践指南。

weixin_29041767的博客 373

Spark内核架构

1、初识Spark Spark是分布式的,主要基于内存的,适合迭代计算的大数据计算框架。注意基于内存:是优先考虑将数据放到内存中,因为在内存中具有更好的数据本地性,但是如果内存放不下也会放在磁盘上,或者部分数据放在磁盘上计算。所以Spark不仅能够计算内存放的下的数据,也可以计算内存中放不下的数据(Spark的真正生产环境,如果数据大于内存,需要考虑数据的放置策略以及性能调优的技巧)。 由于S...

fighting 856

染色体外环状DNA:肿瘤研究新方向

染色体外环状DNA(ecDNA)是癌症中活化原癌基因扩增的主要方式。区别于常染色体,这类生物大分子主要以环状的形式存在于细胞核当中,长度分布在103-106数量级,无中心粒。ecDNA序列中包含一个或者多个基因与调控元件,结构开放,转录活性强,相比于在棒状染色体结构基因,ecDNA的生物功能活性更强。癌症中,成环的基因区域拷贝数往往增高,而超过一半的高拷贝数事件是ecDNA驱动生成。...

blackjimmy的博客 765

Spark基础及架构

Spark基础目录一、认识Spark1.1 Spark与 MapReduce比较1.2 Spark技术栈二、Spark架构与运行环境 一、认识Spark         Spark是用于大规模数据处理的统一分析引擎。 Speed Apache Spark使用最新的DAG调度程序,查询优化器和物理执行引擎,为批处理数据和流数据提供了高性能; Ease of Use 使用Java,Scala,Python,R和SQL快速编

wsjslient的博客 480

Open3d (C++) RANSAC拟合圆柱(详细过程版)

实现了一种基于RANSAC算法的圆柱拟合方法。

点云侠的博客 237

SAP 权限配置(复合角色)

复合角色创建步骤:业务场景:通常单一角色权限颗粒度划分比较细,当需要分配单一角色权限A、B(多个单一角色)给某账号用户Y时,可以先建立一个复合角色C,将A、B绑定到复合角色C中,再将角色C分配给账号Y即完成权限配置。 业务模拟: 1、PFCG创建复合角色: 2、在角色页面添加子角色 在角色分页内添加子角色,点击“菜单”分页中的“读菜单”即可导入子角色中的菜单: 3、将用户分配给...

willieyuan的博客 7085

Spark集群架构和核心组件介绍

spark特点,集群架构,核心组件,有向无环图,yarn的两种模式

weixin_53898747的博客 3300

SAP SEGW 事物码里的 Association 建模方式

Association 模型用于描述 OData 模型里不同 Entity Type 之间的关联关系。我们来看一个具体的例子:Principal Entity(主体):代表 association 的主导端。Cardinality(基数):指定主体实体类型和依赖实体类型之间的关系。按 F4 或点击从列表中选择。关联的多重性如下:为引用约束()指定以下参数,目的是将主体实体类型的每个键,关联到从属实体类型的一个属性:Referential Constraints 的一个例子如下: 引用约束(Referenti

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 909

Spark-内核(集群管理器、通讯架构、任务调度机制、Shuffle、内存管理)

Spark 早期版本中采用 Akka 作为内部通信部件。Spark1.3 中引入 Netty 通信框架,为了解决 Shuffle 的大数据传输问题使用Spark1.6 中 Akka 和 Netty 可以配置使用。Netty 完全实现了 Akka 在 Spark 中的功能。Spark2 系列中,Spark 抛弃 Akka,使用 Netty。Spark2.x 版本使用 Netty 通讯框架作为内部通讯组件。

迷雾总会解 877

目标检测YOLO实战应用案例100讲-基于YOLOv7的番茄采摘机械手场景感知及试验(下)

根据软件系统的设计需求,制定系统的可行性方案分析,编写系统的相关程序和 调试运行环境,对系统进行测试,以实现对番茄数据的采集及监测。登陆界面登陆后,进入选择界面,菜单包括了对番茄种植棚室的固定相机数据的监测、 对番茄采摘机械手的双目相机采集的番茄的静态、动态数据的获取、对番茄静态、动态数 据处理的功能菜单等选项。与利用人工去进行对于番茄果实的识别和数目的统计相比,番茄视觉系统自动记录番 茄数量以及红色已经成熟的番茄、青色未成熟番茄的数量,减轻人工记录的工作量,减少 人工记录的误差,从经济方面是可行的。

qq_36130719的博客 811

C++幂运算全解析:std::pow()函数详解与实战指南

本文详细介绍了C++标准库中的std::pow()函数,包括其基本用法、数学定义和多种重载形式。重点分析了该函数在科学计算、图形处理等领域的实际应用,并提供了性能优化方案如快速幂算法和预计算表。文章还探讨了精度控制、错误处理等关键问题,最后通过一个完整计算器实现展示了综合应用。std::pow()作为基础数学函数,合理使用能显著提升计算效率和代码可靠性。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 340

Spark之核心架构

????前面我们介绍了一些pyspark的基础指令集,但是对spark的核心架构了解还不够透彻,今天我们就来介绍一些spark的核心架构,以及一些基本概念,对以前内容感兴趣的小伙伴可以查看????: 链接: Spark之处理布尔、数值和字符串类型的数据. 链接: Spark之Dataframe基本操作. 链接: Spark之处理布尔、数值和字符串类型的数据. 今天我们来介绍一下spark的一些运行原理、架构、组成部分。 1.spark运行架构 spark框架的核心是一个计算引擎,整体来说,它采用了标准的

柳小葱的博客 4067

I2C通信——时序图

本文用逻辑分析仪抓取主机I2C通信的时序图,抓取的过程是读某个寄存器的值。

weixin_43772611的博客 7353

最详细的整个Spark运行时的内核架构以及架构思考

一: Spark内核架构1,Drive是运行程序的时候有main方法,并且会创建SparkContext对象,是程序运行调度的中心,向Master注册程序,然后Master分配资源。应用程序: Application = Driver(驱动程序) + Executor(执行程序)Driver部分的代码:主要是SparkContext +SparkConf Application 的main 方法

吾心光明 3961

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Spark内核架构解密

本期内容: 1 通过手动绘图的方式解密Spark内核架构 2 通过案例来验证Spark内核架构 3 Spark架构思考 一、详细剖析Spark运行机制 (1)Driver端架构 Driver部分代码包含了SparkConf+SparkContext,基本一切应用程序代码由Driver端的代码和分布在集群其他机器上的Executor代码组成(textFile flatMap map)

kxr0502的博客 1484

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

spark源码分析之内核架构篇

第一步: 在一台具有spark安装包上的机器,通过spark-submit提交Spark程序,也就是我们的Application,通过反射机制创建一个DriverActor的进程(这里所说的提交方式为standalone模式,包括client和cluster模式) 第二步: Driver进程执行我们的application应用程序,也就是我们的代码。 第三步: 初始化SparkCon...

989

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

第13课 spark内核架构解密学习笔记

第13课 spark内核架构解密学习笔记  2016.01.16 内容: 1.通过手动绘图的方式解密spark内核架构 2.通过案例验证spark内核架构 3.spark架构思考 第一阶段:彻底精通spark 第二阶段:价值千万超大型spark项目:包含所有spark知识点,编码,测试 driver是运行程序时具有main方法并创建了spark con

slq1023的博客 3228

Spark核心技术原理透视一(Spark运行原理)

    在大数据领域,只有深挖数据科学领域,走在学术前沿,才能在底层算法和模型方面走在前面,从而占据领先地位。 Spark的这种学术基因,使得它从一开始就在大数据领域建立了一定优势。无论是性能,还是方案的统一性,对比传统的Hadoop,优势都非常明显。Spark提供的基于RDD的一体化解决方案,将MapReduce、Streaming、SQL、Machine Learning、Graph Pro...

weixin_33854644的博客 1693

1.大数据工具简单分析天猫年底月销量

1.引言 在线上交易早已成熟的今天,电商交易量究竟有多少?为了清晰地比较天猫月销量,本文爬取了天猫2017年底、2018年初主流分类商品大量数据,并做了简单的数据统计。整体流程如下: 说明:利用scrapy爬取天猫店铺数据约50万条,导入HDFS分布式存储,利用大数据组件spark操作算子分析及sparkSQL查询分析得出处理结果,最后,EChart前端组件将结果以图表形式展现出来。

王小禾 5778

SparkCore-2-Spark几种提交方式

1.local 仅用于开发环境单机调试。 1.standalone方式 standalone是spark自带的资源调度框架。这种方式下需要配置Mater和Worker,并启动Master服务(如7077端口的)。该模式下,也可以client或cluster模式运行。 ...

王小禾 3246
上一篇: spark(4)-高可用HA zookeeper原理及环境搭建
下一篇: spark(6)-spark RDD(course14)
王小禾
博客等级 码龄11年 80粉丝 291原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值