spark分布式计算框架

news2025/7/28 13:31:01

MapReduce是计算逻辑清晰的,只有两个步骤,任务是JVM进程级别,每执行到什么步骤 去申请具体的资源。

 

而spark根本不知道具体有几个stage,逻辑未知,每个人的job stage等根本不知道。它是默认倾向于抢占资源的,他会在sparkContext()这个函数执行的时候,直接根据下面textFile()代码逻辑抢占所有资源,任务以JVM线程的级别泡在Excutor里面

目前已知的: 每一个Excutor里面的就是一个job的stage,一个excutor跑在某一个节点,等需要shuffle的时候,另一个节点通过他的excutor把刚才的数据拿过来


Spark-Core源码解析:

首先 这些都是分布式计算框架,不同个体对象之间要使用RPC

1. RPC

 下图为Master.scala里面 start-master.sh的具体流程

 RPC也就是发送方与接收方通过传输层进行远程通信连接,来调用对方远程的服务。传输层里面最代表的就是Netty,他把各种IO进行了封装了只提供相应接口。

除此之外,不同主机可能会有多个进程进行传输,所以在通信时可以指定传输目标的IO,防止接收混乱。

分发 与 队列设置也是帮助多个实体进行传输。

内部的inbox是为了暂时存储,方便未来看给自己的哪个函数调用。

除此之外 ,还要设定消息投递规则,如接收不到就重发 或者 只发一次等

什么是 RPC 框架 - jiuchengi - 博客园


 2. start-master首先要创建RpcEnv环境

一共分为两部分 Dispatcher(分发器)和传输服务(Netty)

Dispatcher 就是那个用来分发处理的   postMessage来生成data放入receive队列里面,threadpool线程池来使用死循环处理信息,根据信息具体内容实现不同 分发 操作

传输服务:

 上图是spark-core Master.scala里 RpcEnv(就是包含了分发dispatcher 以及传输层Netty)里的源码 是传输服务这一部分(通过startServer开启),也就是具体的Netty实现

上面的Loop就是一个类似死循环,不能让线程频繁的创建消亡,只开通

下面bootstrap里面的channel可以直接实现接收读取数据或者发送数据,以往写java的时候必须要实现input类和output类,而这里一个channel就可以直接实现读写操作,具体实现在里面的Handler里面,Handler就是实现了区分读取和写数据,然后将数据使用RpcEnv里的postMessage保存起来(应该是对应于那个写进队列操作)。而这个postMessage就是DIspatcher里的方法


3.经过创建RpcEnv环境后(Dispatcher和传输层Netty等之后),开始对Master进行操作。

最终结果就是利用rpcEnv创建EndPoint(Master)和 EndPointRef(对象主机的进程)

首先Master就是继承于 EndPoint     里面重写了receive方法 这个是 大前提

方法中想创建的EndPoint(启动Master角色)返回的是一个引用EndPointRef,EndPoint有receive和receiveAndReplay方法用来接收引用传的数据(send方法和ask方法),根据引用传不同的数据 相应不同的方法(对应于不同的角色)

这里的EndPoint主要是针对不同角色和Master进行交涉的时候,比如Driver想申请资源,创建引用传入message为Driver信息,一般来说一个EndPoint对应多个EndPointRef,

这种思想类似于接口 ref就是接口实现

在rpcenv里面注入master实体

并开始处理各类endpoint请求

val masterEndpoint = rpcEnv.setupEndpoint(ENDPOINT_NAME,
  new Master(rpcEnv, rpcEnv.address, webUiPort, securityMgr, conf))
    // name是别台主机的 endpoint是master 
 def registerRpcEndpoint(name: String, endpoint: RpcEndpoint): NettyRpcEndpointRef = {
    val addr = RpcEndpointAddress(nettyEnv.address, name) //别台主机的名字但是放 master的地址
    val endpointRef = new NettyRpcEndpointRef(nettyEnv.conf, addr, nettyEnv) 
    //endpointRef就存着另一台主机端点 他的端口号主机地址等
    synchronized {
      if (stopped) {
        throw new IllegalStateException("RpcEnv has been stopped")
      }
      if (endpoints.putIfAbsent(name, new EndpointData(name, endpoint, endpointRef)) != null) {
        throw new IllegalArgumentException(s"There is already an RpcEndpoint called $name")
      }
      val data = endpoints.get(name)
      endpointRefs.put(data.endpoint, data.ref)
      receivers.offer(data)  // for the OnStart message
    }
    endpointRef
  }

里面会将各类主机信息注册到分发器Dispatcher,同时在填写分发器内部数据EndpointData时候,填的数据里面有个inbox来处理具体东西,他会先有个一个同步操作 即

inbox.synchronized {
  messages.add(OnStart)
}

这个操作会将启动进程放入message未来的队列里面,未来多线程运行的时候,他就会先启动。标志着start-master的开始。(它是由初始化inbox的时候生成的,所以先于所有其他端点信息进入队列)

后续的队列处理才会处理那些天的endpoints

也就是

val masterEndpoint = rpcEnv.setupEndpoint(ENDPOINT_NAME,
  new Master(rpcEnv, rpcEnv.address, webUiPort, securityMgr, conf))

这一步 不仅注册了端点信息,还实现了startmaster,都是通过放入dispatcher处理队列里面实现的

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

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

相关文章

C++11 条件变量

目录 条件变量 1 成员函数 wait函数 wait_for函数 wait_until函数 notify_one函数 notify_all函数 2 Demo1 sync_queue.h condition-sync-queue.cpp 3 Demo2 2-sync_queue.h 2-condition-sync-queue.cpp C/CLinux服务器开发/后台架构师【零声教育】-学习视频教程…

汇编内中断

内中断 文章目录内中断1.内中断的产生2.中断处理程序、中断向量表、中断过程3.iret指令4.除法错误中断的处理5.单步中断6.int指令7.BIOS和DOS所提供的中断例程1.内中断的产生 任何一个通用的CPU,都具备一种能力,可以在执行完当前正在执行的指令之后&…

StartDT奇点云通过CMMI5全球软件领域最高级别成熟度认证

近日,奇点云正式通过全球软件领域最高级别认证——CMMI 5级认证,标志着奇点云的软件技术研发能力、项目管理能力、质量保障能力、方案交付能力等均达到优化管理级的国际先进水平。 CMMI(软件能力成熟度模型集成)是国际上用于评价软…

JAVA开发(Redis的使用, redis数据类型)

Redis是一个缓存型数据库,或者平时就叫它缓存。它支持存储的类型有以下几种: string(字符串) hash(哈希) list(列表) set(集合) zset(sorted set:…

智慧电网解决方案-最新全套文件

智慧电网解决方案-最新全套文件一、建设背景二、思路架构三、建设方案四、获取 - 智慧电网全套最新解决方案合集一、建设背景 电力公司如今面临的紧迫需求问题似乎无穷无尽,例如:提高可靠性;降低成本;提高效率;满足环…

(十)C++中的左值lvalue右值rvaue

文章目录1.C中的变量名是如何存储及引用2.C中的左值与右值3.右值引用4.移动语义move函数参考文献欢迎访问个人网络日志🌹🌹知行空间🌹🌹 1.C中的变量名是如何存储及引用 int a 0;如上,在C中声明一个变量时&#xff0…

【0143】 System V共享内存(Shared Memory)

文章目录 1. 共享内存1.1 共享内存分类2. System V IPC密钥3. System V 共享内存调用3.1 shmget()3.2 shmat()3.3 shmdt()3.4 shmctl()4. 实战演练4.1 服务端程序代码实现4.2 客户端程序代码实现1. 共享内存 共享内存是 Linux 和其他类 Unix 系统下可用的三种进程间通信 (IPC)…

Docker下安装Zookeeper以及Kafka

一、安装Zookeeper 1. 查看Zookeeper镜像以及版本 访问Zookeeper镜像库地址 也可以通过命令docker search zookpper在命令行搜索zookeeper镜像,但是通过该命令无法查看远程镜像版本信息。 NAME:镜像名(镜像仓库源的名称) DESCRIPTION:对该镜…

yolov5剪枝实战2:网络剪枝原理介绍

1. 网络轻量化相关技术 网络轻量化的相关技术分类:1. 网络剪枝(Network pruning) 2. 稀疏表示(Sparse representation) 3. Bits precision(低比特表示,比如不用浮点型,使用int量化) 4. Kownledge distillation(知识蒸馏) 2. 网络剪枝 神经网络一般都是over-parameterized,…

SharePoint Integrator Delphi版

SharePoint Integrator Delphi版 SharePoint Integrator包含易于使用的组件,用于连接流行的SharePoint Server结构,如网站、列表和文档。SharePoint Integrator组件支持对SharePoint对象的访问,允许应用程序轻松地查询和修改列表、访问托管文…

京东发布第三季度财报员工总数近50万 “以实助实”助力高质量就业

11月18日,京东集团(纳斯达克股票代码:JD,港交所股票代号:9618)发布了2022年三季度业绩。其中净收入为2435亿元人民币,同比增速高于同期国内社会消费品零售总额3.5%的增速;其中&#…

【17-微服务网关之Spring Cloud GatewaySpring Cloud Gateway网关服务搭建】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了,请点击这里!】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…

“知识图谱补全”术语:知识图谱补全、三元组分类、链接预测

基本简介: 知识图谱补全通常定义为“三元组分类”或“链接预测”任务。首先,一条知识在知识图谱中通常由三元组表示:“头实体,关系,尾实体”。三元组分类即对于给定的三元组,预测其正确的概率。而链接预测…

VM虚拟机卡顿、闪退一系列问题与卸载重装问题(详细版)

最新发现好多虚拟机有闪退现象,对此我给出一系列解决方案,仅供参考 一.软件问题 1.虚拟机闪退 首先,如果是VMware Workstation Pro也就是软件本身闪退问题,即还没有运行或打开系统时就已经闪退,说明软件有问题&…

Windows系统VirtualBox下载与安装

Windows系统VirtualBox下载与安装 一、下载:https://www.virtualbox.org/wiki/Downloads 1.安装包 2.扩展包(对USB 2.0、USB 3.0、远程桌面协议 VRDP等实用功能的支持) 二、安装 1.如果安装出现本机缺少必要包的情况,不要慌&am…

3.1版本【HarmonyOS 第一课】正式上线!参与学习赢官方好礼>>

【课程介绍】《HarmonyOS第一课》是跟随版本迭代不断推出的系列化课程,本期课程基于HarmonyOS 3.1版本的新技术和特性,每个课程单元里面都包含视频、Codelab、文章和习题,帮助您快速掌握HarmonyOS的应用开发,快速了解新的特性和技…

基于PHP+MySQL汽车展览会网站的设计与实现

随着我国经济的发展,汽车已经进入了家家户户,但是很多时候人们因为各种原因需要进行汽车出行,但是很多时候人们有不知道购买什么样的汽车更适合自己,如果挨个去汽车4S既浪费时间又不能够把各类汽车都看全,人们更希望通过发达的车展来查询自己所需的汽车信息,本系统也是出于这样…

分享几个常用的可以从外部攻击视角发现甲方公司安全问题的开源工具

资产管理平台-ARL https://github.com/TophantTechnology/ARL 作为甲方,一定要有自己的资产平台,主要目的就是基于外部攻击视角不断发现风险,当然放在内网也可以,测试了很多开源的工具,最终还是选择了ARL,…

【深入理解C++】左值引用、常引用、右值引用、std::move()函数

文章目录1.左值引用2.常引用2.1 const引用可以指向临时数据2.2 const引用可以指向不同类型的数据2.3 const引用作为函数参数3.右值引用4.std::move()函数1.左值引用 左值引用只能绑定到左值上,不能绑定到右值上。 左值引用不能绑定到临时变量上,因为临…

是德N5290A矢量网络分析仪技术参数及操作步骤

网络分析仪能对被测量器件(主要分为有源元件和无源元件)的线性和非线性特性(幅频特性,相频特性,时频特性,功率频率特性等)进行表征。 那么大家真的了解网络分析仪吗?下面西安安泰测试以是德科技(安捷伦)E50系列矢量网络分析仪为例介绍仪器基…