Spark BlockManager 概述

Application 启动的时候:

1. 会在 SparkEnv 中实例化 BlockManagerMaster 和 MapOutputTracker,其中

    (a) BlockManagerMaster: 对整个集群的 Block 数据进行管理的

    (b) MapoutputTrackerMaster:跟踪所有的 Mapper 的输出的。

2. BlockManagerMasterEndpoint 本身是一个消息体,会负责通过远程消息通信的方式去管理所有节点的 BlockManager

3. 每启动一个 ExecutorBackend 都会实例化 BlockManager 并通过远程通信的方式注册给 BlockManagerMaster。实质上是 Executor 中的 BlockManager 在启动的时候注册给了Driver 上的 BlockManagerMasterEndpoint

4. MemoryStore 是 BlockManager 中专门负责内存数据存储和读写的类

5. DiskStore 是 BlockManager 中专门负责基于磁盘的数据存储和读写的类

6. DiskBlockManager: 管理  Logical Block 与Disk 上的 Physical Block 之间的映射关系并负责磁盘的文件的创建、读写等

 

Job 运行的时候:

1. 首先通过 MemoryStore 来存储广播变量

2. 在 Driver 中是通过  BlockManagerInfo 来管理集群中的每个 ExecutorBackend 中的 BlockManager 中的元数据信息

3. 当改变了具体的 ExecutorBackend 上的 Block信息后就必须发消息给 Driver 中的 BlockManagerMaster 来更新相应的 BlockManagerInfo

4. 当执行第二个 Stage 的时候,第二个 Stage 会向 Driver 中的 MapOutputTrackerMasterEndpoint 发消息请求上一个 Stage 中相应的输出,此时 MapOutputTrackerMaster 会把上一个 Stage 的输出数据的元数据信息发送给当前请求的 Stage

转载于:https://www.cnblogs.com/langfanyun/p/8146369.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用中的代码片段展示了NettyTransferService中的fetchBlocks方法的实现。这个方法用于从指定的主机和端口获取一组块(blockIds)。方法内部会根据最大重试次数(maxRetries)来确定是否需要创建RetryingBlockFetcher进行重试。如果最大重试次数大于0,则会创建RetryingBlockFetcher,并调用其start方法进行重试;否则,直接调用blockFetchStarter的createAndStart方法进行获取操作。 引用中的代码片段展示了fetchBlocks方法的执行步骤。首先,会创建RetryingBlockFetcher.BlockFetchStarter的匿名实现类的实例blockFetchStarter,并实现了createAndStart方法。然后,获取spark.shuffle.io.maxRetries属性的值作为最大重试次数maxRetries。如果最大重试次数大于0,则创建RetryingBlockFetcher并调用start方法进行重试;否则,直接调用blockFetchStarter的createAndStart方法。 引用中的代码片段展示了RetryBlockFetcher中的fetchAllOutstanding方法的实现。这个方法用于获取所有待获取的块(blockIdsToFetch)。在方法内部,会根据当前的重试次数和监听器(currentListener)获取相应的参数。然后,调用fetchStarter的createAndStart方法进行块的获取操作,并可能对获取失败的块进行重试。如果出现异常且满足重试条件,则会调用initiateRetry方法进行重试;否则,会调用listener的onBlockFetchFailure方法标记获取失败。 综上所述,spark block的获取过程涉及到多个类和方法的调用,包括NettyBlockTransferService的fetchBlocks方法、RetryingBlockFetcher的start方法和RetryBlockFetcher的fetchAllOutstanding方法等。这些方法会根据最大重试次数来进行块的获取和重试操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Spark存储体系——Block传输服务](https://blog.csdn.net/LINBE_blazers/article/details/89893697)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值