目录
共享变量
广播变量
概述
使用广播变量,每个executor的内存中,只驻留一份变量副本,而不是对每个task都传输一次变量,省去了很多的网络传输,对性能的提升有很大的帮助,而且通过高效的广播算法来减少传输代价。
使用广播变量的场景很多,Spark一种常见的优化方式就是小表广播,使用map join来代替reduce join,通过把小的数据集广播到各个节点上。节省了一次昂贵的shuffle操作。比如driver上有一行数据量很小的表,其他节点上的task都需要lookup这张表,那么driver可以先把这张表数据广播到各个executor节点,这样task就可以在本地查表了。
原理
Spark历史上采用了两种广播的方式,一种是通过http协议传输数据(目前已废除),另一种通过Torrent协议来传输数