20190503 Spark Broadcast 原理

  • SparkContext 调用 broadcast(), 使用 BroadcastManager 中的 TorrentBroadcastFactory 创建 TorrentBroadcast, 实际是工厂模式
  • BroadcastManager 的另一个作用是缓存, TorrentBroadcast 会根据 broadcastId 读取和写入
  • 读取和写入都是根据 “spark.broadcast.blockSize” 分成小段处理
  • TorrentBroadcast 在初始化时会写入到本机, 也就是 driver 端, 所以要注意 driver 内存设定
  • TorrentBroadcast 的读取和写入都是依靠 BlockManager, 读取时会先看本地有没有, 如果没有则使用 BlockManager 远程拉取
  • 远程拉取时从 driver 获得 locationsAndStatus, 然后地址 shuffle 后根据 same host > same rack(topologyInfo) > other 排序拉取, 这也是使用 “Torrent” 的意思