|NO.Z.00107|——————————|BigDataEnd|——|Hadoop&Spark.V05|——|Spark.v05|Spark 原理 源码|BlockManager|

一、BlockManager
### --- BlockManager

~~~     BlockManager是一个嵌入在 Spark 中的 key-value型分布式存储系统,也是 Master-Slave 结构的,
~~~     RDD-cache、shuffle-output、broadcast 等的实现都是基于BlockManager来实现的:
~~~     shuffle 的过程中使用 BlockManager 作为数据的中转站
~~~     将广播变量发送到 Executor 时, broadcast 底层使用的数据存储层
~~~     spark streaming 一个 ReceiverInputDStream 接收到的数据,
~~~     先放在 BlockManager 中, 然后封装为一个BlockRdd 进行下一步运算
~~~     如果对一个 RDD 进行了cache,CacheManager 也是把数据放在了 BlockManager 中,
~~~     后续 Task 运行的时候可以直接从 CacheManager 中获取到缓存的数据 ,不用再从头计算
~~~     BlockManager也是分布式结构,在Driver和所有Executor上都会有BlockManager。
~~~     每个节点上存储的block信息都会汇报给Driver端的BlockManager Master作统一管理,
~~~     BlockManager对外提供get和set数据接口,可将数据存储在Memory、Disk、Off-heap。
二、BlockManager架构
### --- BlockManager架构说明

~~~     Driver 上有 BlockManager Master,
~~~     负责对各个节点上的 BlockManager 内部管理的数据的元数据进行维护,
~~~     比如block 的增删改等操作,都在这里维护好元数据的变更。
~~~     每个节点都有一个 BlockManager,每个 BlockManager 创建之后,
~~~     第一件事就是去向 BlockManager Master 进行注册,
~~~     此时 BlockManager Master 会为其创建对应的 BlockManagerInfo。
### --- Driver的组件为BlockManager Master,负责:

~~~     各节点上BlockManager内部管理数据的元数据进行维护,如 block 的增、删、改、查等操作
~~~     只要 BlockManager 执行了数据增、删、改操作,
~~~     那么必须将 Block BlockStatus 上报到BlockManagerMaster,
~~~     BlockManager Master会对元数据进行维护
### --- BlockManager运行在所有的节点上,包括所有 Driver 和 Executor 上:

~~~     BlockManager对本地和远程提供一致的 get 和 set 数据块接口,
~~~     BlockManager本身使用不同的存储方式来存储这些数据,包括memory、disk、off-heap
~~~     BlockManager负责Spark底层数据存储与管理,
~~~     Driver和Executor的所有数据都由对应的BlockManager进行管理
~~~     BlockManager创建后,立即向 BlockManager Master进行注册,
~~~     此时BlockManager Master会为其创建对应的BlockManagerInfo
### --- BlockManager中有3个非常重要的组件:

~~~     DiskStore:负责对磁盘数据进行读写
~~~     MemoryStore:负责对内存数据进行读写
~~~     BlockTransferService:负责建立到远程其他节点BlockManager的连接,负责对远程其他节点的
~~~     BlockManager的数据进行读写
### --- BlockManager说明

~~~     使用BlockManager进行写操作时,
~~~     如RDD运行过程中的中间数据,或者执行persist操作,会优先将数据写入内存中。
~~~     如果内存大小不够,将内存中的部分数据写入磁盘;
~~~     如果persist指定了要replica,
~~~     会使用BlockTransferService将数据复制一份到其他节点的BlockManager上去
~~~     使用 BlockManager 进行读操作时,如 Shuffle Read 操作,
~~~     如果能从本地读取,就利用 DiskStore 或MemoryStore 从本地读取数据;
~~~     如果本地没有数据,就利用 BlockTransferService 从远程 BlockManager 读取数据

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

posted on   yanqi_vip  阅读(28)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示