HttpBroadcast會在driver端的BlockManager里面存儲廣播變量對象,并且將該廣播變量序列化寫入文件中去。所有獲取廣播數據請求都在driver端,所以存在單點故障和網絡IO性能問題。
TorrentBroadcast會在driver端的BlockManager里面存儲廣播變量對象,并將廣播對象分割成若干序列化block塊(默認4M),存儲于BlockManager。小的block存儲位置信息,存儲于Driver端的BlockManagerMaster。數據請求并非集中于driver端,避免了單點故障和driver端網絡磁盤IO過高。
TorrentBroadcast在executor端存儲一個對象的同時會將獲取的block存儲于BlockManager,并向driver端的BlockManager匯報block的存儲信息。請求數據的時候會先獲取block的所有存儲位置信息,并且是隨機的在所有存儲了該executor的BlockManager去獲取,避免了數據請求服務集中于一點。
總之,就是HttpBroadcast導致獲取廣播變量的請求集中于driver端,容易引起driver端單點故障,網絡IO過高影響性能等問題,而TorrentBroadcast獲取廣播變量的請求服務即可以請求到driver端也可以在executor,避免了上述問題,當然這只是主要的優化點。