美文网首页
100 性能调优

100 性能调优

作者: 逸章 | 来源:发表于2021-01-12 23:16 被阅读0次

    1、为何distinct操作是会产生shuffle?

    image.png
    会产生shuffle的操作包括:reduceByKey、join、distinct、repartition等。通常来说,如果避免不了shuffle,在可能的情况下,建议使用reduceByKey或者aggregateByKey算子来替代掉groupByKey算子。因为reduceByKey和aggregateByKey算子都会使用用户自定义的函数对每个节点本地的相同key进行预聚合。而groupByKey算子是不会进行预聚合的,全量的数据会在集群的各个节点之间分发和传输,性能相对来说比较差。

    2、Broadcast Join
    数据库的表一般分为两种:事实表和维度表。维度表一般指固定的、变动较少的表,例如联系人、物品种类等,一般数据量有限。而事实表一般记录流水,比如销售清单等,通常随着时间的增长不断膨胀。
    join操作是对两个表中key值相同的记录进行连接,在spark SQL中,对两个表做join最直接的方式是先根据key分区,再在每个分区中把key值相同的记录拿出来做连接操作。但这样就不可避免地涉及到shuffle。
    当维度表和事实表进行join操作时,为了避免shuffle,我们可以将大小有限的维度表的全部数据分发到每个节点上,供事实表使用。executor存储维度表的全部数据,一定程度上牺牲了空间,换取shuffle操作大量的耗时,这在spark SQL中称为Broadcast Join.
    但是注意广播时需要将被广播的表先collect到driver端,当频繁有广播出现时,对driver的内存也是一个考验。
    例子:

    image.png mapPartition解释如下: image.png

    3、Coalease函数

    image.png

    相关文章

      网友评论

          本文标题:100 性能调优

          本文链接:https://www.haomeiwen.com/subject/otsyaktx.html