千家信息网

怎么实现Spark2.x BlockManager原理剖析

发表于:2024-12-13 作者:千家信息网编辑
千家信息网最后更新 2024年12月13日,这篇文章将为大家详细讲解有关怎么实现Spark2.x BlockManager原理剖析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、概述Block
千家信息网最后更新 2024年12月13日怎么实现Spark2.x BlockManager原理剖析

这篇文章将为大家详细讲解有关怎么实现Spark2.x BlockManager原理剖析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

一、概述

BlockManager是Spark底层负责数据的读写和管理的一个模块。

对于每一个Spark任务,Driver节点都会有一个BlockManagerMaster 实例,而每一个Executor上都对应的有一个BlockManager实例,它也构成了一套Master/Slaver架构的数据管理体系,比如ShuffleWriter都是通过将BlockManager将数据写入磁盘或者内容、各个Task在拉取数据的时候也是通过BlockManger建立连接,然后去拉取数据。

这里我们先对BlockManager的原理做一个简单的介绍。


二、图解BlockManager整体架构

下面详细讲解这个架构图:

1.由BlockManager原理架构图可以看出对于每个Spark任务,Driver都会初始化一个BlockManagerMaster实例,初始化同时也会创建一个BlockManagerMasterEndPoint实例,BlockManagerMasterEndpoint是一个ThreadSafeRpcEndpoint类,接收Executor中Blockmanager的消息请求,进行对应的处理。SparkEnv类中的实现代码如下:

   val blockManagerMaster = new BlockManagerMaster(registerOrLookupEndpoint(      BlockManagerMaster.DRIVER_ENDPOINT_NAME,      new BlockManagerMasterEndpoint(rpcEnv, isLocal, conf, listenerBus)),      conf, isDriver)

2.在BlockManagerMasterEndPoint中管理着一组HashMap数据结构BlockManagerInfo信息,保存着BlockManagerId与BlockManagerInfo的对应关系,这里相当于管理者每个Executor中的Block的元数据信息,比如各个BlockManager端新增、删除了一个Block后,这里对应也要更新对应的元数据信息,BlockManagerMasterEndPoint类实现代码如下:

  // Mapping from block manager id to the block manager's information.  privateval blockManagerInfo = new mutable.HashMap[BlockManagerId, BlockManagerInfo]

3.BlockManagerInfo里面保存着所在Executor所有Block的状态信息,这里也是一个HashMap结构,保存着block与其BlockStatus信息,BlockManagerInfo类代码实现如下:

// Mapping from block id to its status.privateval _blocks = new JHashMap[BlockId, BlockStatus]

Driver端总结一下,其实就是通过BlockManagerMaster维护各个节点Block元数据信息,比如各个BlockManager端的Block发生增、删、改等操作,都会在这里进行更新。

4.在Executor端的都有一个BlockManager实例,它有四个比较重要的组件,这里大体介绍下,后面源码剖析会作详细介绍:

1).DiskStore

负责磁盘数据的读写操作;

2).MemoryStore

负责内存数据的读写操作;

3).ConnectionManager:

负责与其他的BlockManger连接,比如ShuffleReader阶段需要从远程拉取数据,这里负责远程的连接。

4).BlockTransferService

这里ConnectionManager与其他的BlockManger连接成功后,负责进行数据的传输。

5.BlockManager创建成功之后的第一件事就是去向BlockManagerMaster进行注册,此时就会在它的blockManagerInfo中添加对应的BlockManagerInfo信息。

6.这里有一点需要注意:BlockManager进行数据写操作时,优先将数据写入内存,如果内存不够会根据自己的算法,将内存中的部分数据写入磁盘。此外如果指定了relication副本,就会使用BlockManager将数据复制一份到其他的BlockManager中,所以就会存在一个Block会存在两个BlockManger的情况。

7.BlockManager进行数据读取时,比如ShuffleReader阶段,如果能从本地读取数据就从本地读,不然会通过ConnectionManager与远程BlockManager节点建立连接,连接成功后,BlockTransferService再去BlockManager节点获取数据。

8.只要是BlockManager端对数据进行了增、删、改操作,都会向BlockManagerMaster发送BlockStatus变更的消息通知,然后BlockManagerMaster会更新他自己维护的BlockManagerInfo元数据信息。

关于怎么实现Spark2.x BlockManager原理剖析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

数据 信息 实例 原理 内存 架构 节点 管理 剖析 成功 代码 内容 磁盘 更新 任务 就是 文章 更多 消息 知识 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 新华电脑 软件开发 学费 福建财务机器人rpa软件开发 银行网络安全培训题库 cctv数据库由哪家公司出版 网络安全审查一般要多久 园林局网络安全工作保障方案 多部门服务器密码管理 手机卡无法搜索到服务器是为啥 sql创表创数据库创用户 文化旅游局网络安全工作制度 软件开发工程师工作特点 提示无法访问可用性数据库 自学计算机网络安全技术教材 能查到电脑连接服务器的记录吗 最先进数据库开源 电商系统的数据库如何设计 天津声光电博物馆软件开发 梦幻新诛仙笑傲江湖服务器 软件开发没进项怎么抵税 战地五有国服服务器吗 《云数据中心网络技术》 网络安全廉政风险有哪些 12306数据库技术工作 山东 网络安全 公司排名 乐购28数据库进不去 延庆区技术软件开发口碑推荐 mysql数据库应用与开发 工业网络技术是什么类型的 阿里云服务器解绑ip 尖峰网络安全插画
0