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,务必保证数据处理发送在数据所在的机器上。

  • 相关阅读:
    java 泛型 类型作为参量 Class<T> transform
    面向对象的类方法只具有命名空间的作用
    编程语言沉思录—编程语言的体系结构
    类型约束的作用
    函数重载、多态与型变
    函数类型与型变
    型变(逆变)函数
    scala 型变
    泛型编程的几个关键概念
    泛型是包含类型参数的抽象类型—类型构造器
  • 原文地址:https://www.cnblogs.com/yszd/p/9383592.html
Copyright © 2011-2022 走看看