• spark性能调优之三:广播机制broadcast


    广播变量,初始的时候在driver上有一份副本。task在运行的时候,想要使用广播变量中的数据,首先会在本地的executor对应的BlockManager中尝试获取变量副本;如果没有,就从driver远程拉取变量副本,并保存在本地的BlockManager中;此后这个executor上的task,都会直接使用本地BlockManager中的副本。executor的BlockManager除了从driver上拉取,也可能从其他节点的BlockManager上拉取变量副本,越近越好。

    默认情况下,1000个task,1000份副本。10G的数据,网络传输;在集群中,耗费10G的内存资源。

    如果使用广播变量。50个executor,50个副本。500M的数据,从driver或最近节点拉取变量副本,网络资源;耗费500M的内存消耗。两者比较将近20倍的网络传输性能差距;20倍的内存消耗减少。

    在sparksql中,当维度表和事实表进行join操作时,为了避免shuffle,我们可以将大小有限的维度表全部数据分发到每个节点上,供事实表使用。executor存储维度表的全部数据,一定程度上牺牲了空间,换取shuffle操作大量的耗时,这在sparksql中称为Broadcast Join.

    Broadcast Join的条件如下:

    1、被广播的表需要小于spark.sql.autoBroadcastJoinThreshold所配置的值,默认是10M(或者加了broadcast join的hint)

    2、基表不能被广播,比如 left outer join时,只能广播右表

  • 相关阅读:
    创业公司的经济适用架构师
    软件工程–从嗤之以鼻到视若法宝
    阿里云CDN+OSS完成图片加速
    听说你在为天天写业务代码而烦恼?
    从实践者的角度看软件架构的历史
    KVM虚拟化技术
    网络基础和 TCP、IP 协议
    分布式应用程序协调服务 ZooKeeper
    python 装饰器
    python 柯里化**
  • 原文地址:https://www.cnblogs.com/jinniezheng/p/8540824.html
Copyright © 2020-2023  润新知