我正在使用Spark2.1版本,我对Spark Join内部如何工作有一个基本问题。
假设有2组RDD,如下所示,分布在2个数据节点中:
员工RDD(员工ID和部门):节点1: (100,ADAM) (101,约翰) (102,TERRY)
受抚养的RDD(员工ID和受抚养者的数量):节点1 (100,3) (101,2) (202,3)
员工RDD(员工ID和部门):节点2: (200,汤姆) (201,VIC) (202,MARIA)
受抚养的RDD(员工ID和受抚养者的数量):节点2 (102,5) (200,1) (201,4)
根据上述数据分布,如果在上述2对RDD上进行联接,则联接操作将如何在数据局部性上发生,因为 在节点1中,Spark将无法在节点1中找到102的匹配密钥。
但是此连接的值在节点2中可用。那么,将触发所有节点的负载数据以完成连接操作吗?如果发生这种情况,这是否会成为瓶颈?
答案 0 :(得分:0)
您在问题中描述的内容在Spark中称为随机播放操作,您正确地说这会造成瓶颈,建议将随机播放操作保持在最低水平。它会造成瓶颈,但这是不可避免的。
随机播放的相关资源: https://0x0fff.com/spark-architecture-shuffle/
随机操作示例:reduce,join