美文网首页
Spark-Shuffle类算子优化+

Spark-Shuffle类算子优化+

作者: liuzx32 | 来源:发表于2019-01-07 14:40 被阅读11次

优化就是:尽量避免使用shuffle类算子

如果有可能的话,要尽量避免使用shuffle类算子。因为Spark作业运行过程中,最消耗性能的地方就是shuffle过程。shuffle过程,简单来说,就是将分布在集群中多个节点上的同一个key拉取到同一个节点上,进行聚合或join等操作。比如reduceByKey、join等算子,都会触发shuffle操作。

shuffle过程中,各个节点上的相同key都会先写入本地磁盘文件中,然后其它节点需要通过网络传输拉取各个节点上的磁盘文件中的相同key。而且相同key都拉取到同一个节点进行聚合操作时,还有可能会因为一个节点上处理的key过多,导致内存不够存放,进而溢写到磁盘文件中。因此在shuffle过程中,可能会发生大量的磁盘文件读写的IO操作,以及数据的网络传输操作。磁盘IO和网络数据传输也是shuffle性能较差的主要原因。

所以在我们的开发过程中,能避免则尽可能避免使用reduceByKey、join、distinct、repartition等会进行shuffle的算子,尽量使用map类的非shuffle算子。这样的话,没有shuffle操作或者仅有较少shuffle操作的Spark作业,可以大大减少性能开销。

Broadcast与map进行join代码示例

// 传统的join操作会导致shuffle操作。

// 因为两个RDD中,相同的key都需要通过网络拉取到一个节点上,由一个task进行join操作。

val rdd3 = rdd1.join(rdd2)

// Broadcast+map的join操作,不会导致shuffle操作。

// 使用Broadcast将一个数据量较小的RDD作为广播变量。

val rdd2Data = rdd2.collect()

val rdd2DataBroadcast = sc.broadcast(rdd2Data)

#

// 在rdd1.map算子中,可以从rdd2DataBroadcast中,获取rdd2的所有数据。

// 然后进行遍历,如果发现rdd2中某条数据的key与rdd1的当前数据的key是相同的,那么就判定可以进行join。

// 此时就可以根据自己需要的方式,将rdd1当前数据与rdd2中可以连接的数据,拼接在一起(String或Tuple)。

val rdd3 = rdd1.map(rdd2DataBroadcast...)

#

// 注意,以上操作,建议仅仅在rdd2的数据量比较少(比如几百M,或者一两G)的情况下使用。

// 因为每个Executor的内存中,都会驻留一份rdd2的全量数据。

#

相关文章

  • Spark-Shuffle类算子优化+

    优化就是:尽量避免使用shuffle类算子 如果有可能的话,要尽量避免使用shuffle类算子。因为Spark作业...

  • Spark中Shuffle类算子参考

    #Shuffle类算子参考如下: 去重类算子 def distinct() def distinct(numPar...

  • Spark学习之问题整理

    关于RDD算子的问题: 1、如果Application中只有一个action类算子,那么有没有必要使用控制类算子?...

  • How it works(25) Geotrellis是如何在S

    1. 引入 上一章我们研究了Focal类中最基础的游标(Cursor)类算子,游标类算子的核心思想代表了大多数Fo...

  • 控制类算子

    一.cache将数据持久化到内存中去注意:1.cache是一个懒执行算子,必须有一个action类算子触发执行。2...

  • spark-shuffle原理&调优

    spark-shuffle Shuffle就是对数据进行重组,由于分布式计算的特性和要求,在实现细节上更加繁琐和复...

  • Spark算子

    一、算子分类1、transformation算子:这类算子并不触发提交作业,完成作业中间过程处理Transform...

  • Spark系列 —— 算子详解(二)

    前言 本文接上一篇 Spark系列 —— 各类算子详解(一)这篇主要来讲讲 Action 算子 以及 Cache...

  • Spark开发--RDD编程--常用算子--Transforma

    一、常用算子 (33) spark算子大致上可分三大类算子:1、Value数据类型的Transformation算...

  • spark-shuffle v4

    spark shuffle Shuffle就是对数据进行重组,由于分布式计算的特性和要求,在实现细节上更加繁琐和复...

网友评论

      本文标题:Spark-Shuffle类算子优化+

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