zoukankan      html  css  js  c++  java
  • Spark性能优化(基于Spark 1.x)

    Task优化:

        1.慢任务的性能优化:可以考虑减少每个Partition处理的数据量,同时建议开启spark.speculation(慢任务推导,当检测的慢任务时,会同步开启相同的新任务,谁先完成就认定该任务完成)。

      2.尽量减少Shuffle,例如我们要尽量减少groupByKey的操作,因为groupByKey会要求通过网络拷贝(Shuffle)所有的数据,优先考虑使用reduceByKey。因为reduceByKey会首先reduce locally。例如在进行join操作的时候,形如(k1,v1) join (k1,v2) => (k1,v3) 此时就可以进行pipeline,但是(o1) join (o2) => (o3) ,此时就会产生Shuffle操作。

      3.Repartition:增加Task数量时考虑使用(一个partition分成多个),从而更加充分地使用计算资源。

      4.Coalesce:整理Partition碎片(多个partition合成一个)时使用。

    数据倾斜:

      1.定义更加合理的key(自定义Partitioner)。

      2.可以考虑使用ByteBuffer来存储Block,最大的存储容量为2G,如果超出这个大小就会报异常。

    网络传输:

      1.可以考虑Shuffle的数据放到Tachyon(基于内存的文件系统)中来带来更好的数据本地性,减少网络传输。

      2.优先采用Netty的方式进行网络通信。

      3.使用广播:在需要较大数据量分发时使用,提高数据本地性。

      4.使用mapPartitions,该函数会直接作用在整个Partition上。

      5.优先考虑使用PROCESS_LOCAL(默认)。

      6.若要访问HBase或Canssandra,务必保证数据处理发送在数据所在的机器上。

  • 相关阅读:
    数据库设计Step by Step篇目整理及下载地址
    SQL puzzles and answers读书笔记——预算执行问题
    MongoDB快速入门——SQL与MongoDB的对照
    C语言中的atan和atan2
    FTP命令
    vueelementadmin前端跨域问题解决
    回归
    学习kvm(一)
    利用spicevdagent实现文本拷贝、鼠标非陷入
    政策转向确立,降准只是开始
  • 原文地址:https://www.cnblogs.com/yszd/p/9383592.html
Copyright © 2011-2022 走看看