开发者社区> 问答> 正文

要了解 splitLocalRemoteBlocks方法需要先知道什么?

要了解 splitLocalRemoteBlocks方法需要先知道什么?

展开
收起
游客fbdr25iajcjto 2021-12-06 22:00:21 591 0
1 条回答
写回答
取消 提交回答
  • splitLocalRemoteBlocks方法用于划分哪些Block从本地获取,哪些需要远程拉取,是获取中间计算结果的关键。为便于描述,先解释以下定义:

    targetRequestSize:每个远程请求的最大尺寸。 totalBlocks:统计Block总数。 localBlocks:ArrayBuffer[BlockId],缓存可以在本地获取的Block的blockId。 remoteBlocks:HashSet[BlockId]j,缓存需要远程获取的Block的blockId。 curBlocks:ArrayBuffer[(BlockId, Long)],远程获取的累加缓存,用于保证每个远程请求的尺寸不超过targetRequestSize。为什么要累加缓存?如果向一个机器节点频繁地请求字节数很小的Block,那么势必造成网络拥塞并增加节点负担。将多个小数据量的请求合并为一个大的请求将避免这些问题,提高系统性能。 curRequestSize:当前累加到curBlocks中的所有Block的大小之和,用于保证每个远程请求的尺寸不超过targetRequestSize。 remoteRequests:new ArrayBuffer[FetchRequest],缓存需要远程请求的FetchRequest对象。

    numBlocksToFetch:一共要获取的Block数量。 maxBytesInFlight:单次航班请求的最大字节数。什么叫航班?其实就是一批请求,这批请求的字节总数不能超过maxBytesInFlight,而且每个请求的字节数不能超过maxBytesInFilght的五分之一。可以通过参数spark.reducer.maxMbInFlight来控制大小。为什么每个请求的字节数不能超过maxBytesInFlight的五分之一?这样做是为了提高请求的并发度,允许5个请求分别从5个节点获取数据,最大限度利用各节点的资源。

    2021-12-06 22:17:23
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
建立联系方法之一 立即下载
继承与功能组合 立即下载
低代码开发师(初级)实战教程 立即下载