`

spark-学习笔记--31 spark性能优化

 
阅读更多

spark性能优化

 

主要是对内存使用的优化 

 

诊断内存消耗:

 

      java  object header 增大了内存消耗 

 

      常见的collection 类 增大了内存消耗

 

 

--------------------------------------------

 

 

序列化: 默认使用Java的 序列化

               同时支持 kryo 序列化:

 

 

java  使用 kryo:

 

SparkConf conf = new SparkConf().setAppName(appName);

conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer");

conf.registerKryoClasses(new Class[]{YOUR_SPARK_CLASS.class}); 

 

 

 

scala 使用 kryo:

 

val conf = new SparkConf.setMaster(...).setAppName(...)

conf.registerKryoClasses(Array(classOf[Counter]))

val sc = new SparkContext(conf)

 

 

 

 

--------------------------------------------

 

持久化 和  checkpoint

 

 

对于 需要重新计算的RDD   可以持久化  checkpoint

 

 

--------------------------------------------

 

序列化的持久化级别

 

MEMORY_ONLY_SER 、MEMORY_AND_DISK_SER 等

 

这样的话  将数据序列化之后 再持久化  可以大大减小对内存的消耗 

如果要写入磁盘的话  也会减小磁盘IO

但是多了一个 序列化反序列化处理过程 增加了cpu消耗

 

 

--------------------------------------------

 

jvm 垃圾回收

 

GC会消耗性能  

GC线程运行会导致 工作线程暂停

应尽量减少GC

 

有可能因为内存空间不足 ,task创建的对象过大,一旦发现40%的内存不够用了 就会触发Java虚拟机垃圾回收。

极端情况下垃圾回收可能被频繁触发。

 

 

 

 

 

spark1.5下:     

  spark.storage.memoryFraction  来设置这个比例

  

 GC的一个重要配置参数是应该用于缓存RDD的内存量。

 默认情况下,Spark使用60%的已配置执行程序内存(spark.executor.memory)来缓存RDD。

 这意味着40%的内存可用于任务执行期间创建的任何对象。

 

 如果您的任务变慢并且您发现JVM经常进行垃圾收集或内存不足,则降低此值将有助于减少内存消耗。

 要将此更改为50%,您可以调用 conf.set("spark.storage.memoryFraction", "0.5")

 

 

 

 

----------------------

 

 

 

 

 

spark 2.4.0 下: 

 

存储和 执行 共享有一块共享的内存M

当一方的内存不够用时可以驱逐对方占领M

但是压缩存储 不能是存储低于R

 

这种设计可以自动调整内存的使用。

spark.memory.fraction  : M/jvm堆    默认0.6 是存储  0.4 是执行

spark.memory.storagefraction : R/M  

 

 

----------------------

 

 

高级GC调整

 

为了进一步调整垃圾收集,我们首先需要了解JVM中有关内存管理的一些基本信息:

 

Java堆空间分为Young和Old两个区域。Young代表意味着持有短命的物体,而老一代则用于生命周期较长的物体。

 

Young代进一步分为三个区域[Eden,Survivor1,Survivor2]。

 

垃圾收集过程的简化描述:当Eden已满时,在Eden上运行次要GC,并将从Eden和Survivor1中存活的对象复制到Survivor2。幸存者地区被交换。

如果对象足够大或Survivor2已满,则将其移至Old。最后,当Old接近满时,将调用完整的GC。

 

 

如果确定Eden的大小E,则可以使用该选项设置Young代的大小-Xmn=4/3*E

 

 

--------------------------------------------

并行度:

 

 

 

2、设置config属性spark.default.parallelism以更改默认值。通常,我们建议群集中每个CPU核心有2-3个任务

 

spark.default.parallelism 设置为 5 的含义:每个RDD的数据都会被拆为5份

 

3、如果读取的数据在HDFS上,增加block数,默认情况下split与block是一对一的,而split又与RDD中的partition对应,所以增加了block数,也就提高了并行度。

 

4、RDD.repartition,给RDD重新设置partition的数量 [repartitions 或者 coalesce]

 

5、reduceByKey的算子指定partition的数量 

val rdd2 = rdd1.reduceByKey(_+_ ,10) val rdd3 = rdd2.map.filter.reduceByKey(_+_)

 

6、val rdd3 = rdd1.join(rdd2) rdd3里面partiiton的数量是由父RDD中最多的partition数量来决定,因此使用join算子的时候,增加父RDD中partition的数量。

 

7、spark.sql.shuffle.partitions //spark sql中shuffle过程中partitions的数量

 

 

 

 

--------------------------------------------

 

 

广播共享数据:

 

减少重复数据占用内存

 

val sc = new SparkContext(conf)

val list = List("hello xasxt")

val broadCast = sc.broadcast(list)

 

 

 

 

 

--------------------------------------------

 

 

reduceByKey 和  groupByKey 

 

reduceByKey会先进行本地聚合

groupByKey则不会 

 

 

reduceByKey比groupByKey效率高

 



 

 

 



 

 

--------------------------------------------

 

 

 

 

  • 大小: 9 KB
  • 大小: 5.3 KB
  • 大小: 84.2 KB
  • 大小: 76.2 KB
分享到:
评论

相关推荐

    Spark-Core学习知识笔记整理

    Spark-Core文档是本人经三年总结笔记汇总而来,对于自我学习Spark核心基础知识非常方便,资料中例举完善,内容丰富。具体目录如下: 目录 第一章 Spark简介与计算模型 3 1 What is Spark 3 2 Spark简介 3 3 Spark...

    Spark-学习.rar

    "Spark学习.md"很可能是一个Markdown格式的学习笔记或教程,Markdown是一种轻量级的文本格式语言,通常用于编写技术文档。这个文件可能涵盖了Spark的基础概念,比如RDD(弹性分布式数据集)、DataFrame、DataSet,...

    spark笔记整理文档

    本篇笔记将深入探讨Spark的核心概念、架构设计以及实际应用,旨在帮助读者全面理解并掌握Spark。 1. Spark概述: Spark最初由加州大学伯克利分校AMPLab开发,其设计理念是提供一个快速、通用且可扩展的大数据处理...

    Spark2.4.0 学习笔记分享

    Spark2.4.0 学习笔记分享

    spark 笔记、学习笔记、资料

    使用Spark的交互式shell,如Scala shell(`bin/spark-shell`)或Python shell(`bin/pyspark`),可以直接试验和运行Spark代码,无需手动创建`SparkContext`。通过`--master`参数设置集群URL,`--jars`参数添加JAR到...

    spark学习笔记

    本学习笔记集中介绍了Spark SQL在spark-shell中的操作方法,以及如何使用Spark进行数据清洗和转换成DataFrame的操作。 首先,Spark SQL是Spark用于处理结构化数据的一个组件,它提供了SQL接口,可以执行SQL查询。...

    Spark学习笔记

    Spark学习笔记 Spark学习笔记 Spark学习笔记 Spark学习笔记

    Spark SQL学习笔记

    ### Spark SQL 学习笔记知识点总结 #### 一、Spark SQL 概述 - **定义**:Spark SQL 是 Apache Spark 的一个模块,用于处理结构化数据。它提供了 DataFrame 和 Dataset API,以及支持 SQL 查询的能力。这些特性...

    Spark学习笔记 Spark学习笔记 Spark学习笔记

    Spark 学习笔记 Spark 是一个基于内存的分布式计算框架,它提供了高效、灵活、可扩展的数据处理解决方案。Spark 的核心组件是 Resilient Distributed Dataset (RDD),它是一个弹性的分布式数据集合,提供了高效的...

    spark学习笔记一

    一.spark与hadoop比较 Spark是一个计算框架相当于Hadoop的MapReduce。Hadoop中是包含计算框架MapReduce和分布式文件系统HDFS,更广泛的讲是还包含其生态系统上的其他系统比如Hbase和Hive等。 Spark相比MapReduce的...

    IT十八掌_Spark阶段学习笔记(Spark+Mahout+机器学习)

    IT十八掌第三期大数据配套学习笔记! 1.Spark简介 2.Spark部署和运行 3.Spark程序开发 4. Spark编程模型 5.作业执行解析 6.Spark SQL与DataFrame 7.深入Spark Streaming 8.Spark MLlib与机器学习 9.GraphX与SparkR 10...

    Spark-:Spark学习笔记

    【Spark学习笔记】 Spark是Apache软件基金会下的一个开源大数据处理框架,它以其高效、易用和灵活的特点在大数据处理领域中备受青睐。Spark的核心设计理念是提供一个通用的大数据处理平台,支持批处理、交互式查询...

    Spark学习笔记一

    Spark 通过内存分布数据集优化了迭代过程,避免了频繁的磁盘I/O,极大地提升了性能。同时,Spark 也支持将数据缓存到内存中,对于需要多次计算的数据,能够显著减少处理时间。 Ease of Use(易用性)体现在Spark...

    spark笔记.zip

    8. 性能调优:Spark性能优化包括调整executor数量、内存分配、并行度设置、减少shuffle操作等。理解Spark的内存模型和调优策略是提升应用性能的关键。 9. Spark与Hadoop的对比:Spark在内存计算和迭代计算上有优势...

    Spark 学习之路,包含 Spark Core,Spark SQL,Spark Streaming,Spark mllib 学

    Spark 学习之路,包含 Spark Core,Spark SQL,Spark Streaming,Spark mllib 学习笔记 * [spark core学习笔记及代码 * [spark sql学习笔记及代码 * [spark streaming学习笔记及代码 Spark 消息通信 ### Spark ...

Global site tag (gtag.js) - Google Analytics