2016 - 2024

感恩一路有你

spark 自动恢复spark context 如何管理Spark内存?

浏览量:4708 时间:2023-05-27 20:29:43 作者:采采

如何管理Spark内存?

火花存储器管理

当Spark执行一个应用时,Spark cluster会启动两个JVM进程,驱动程序和执行器。驱动负责创建SparkContext上下文,提交任务,分发任务。执行器负责任务的计算任务,并将结果返回给驱动。同时,有必要为需要坚持的RDD提供存储。驱动端的内存管理比较简单,这里说的Spark内存管理是针对执行端的内存管理。

Spark内存管理分为静态内存管理和统一内存管理。Spark1.6之前使用静态内存管理,Spark1.6之后引入统一内存管理。

静态内存管理中的存储内存、执行内存和其他内存的大小在Spark应用程序运行期间是固定的,但是用户可以在应用程序启动之前对它们进行配置。

统一内存管理和静态内存管理的区别在于存储内存和执行内存共享同一个空间,可以互相借用。;的空间。

1.6以上的Spark1.6版本默认使用统一内存管理,通过设置参数为true(默认为false)可以使用静态内存管理。

一.具体细节

1.静态内存管理图

2.统一内存管理图

3.如何在reduce中处理OOM?

当提取数据时,您可以 不要一次就把它放下。如果你把它放下,你可以覆盖磁盘。

1)减少每次拉取的数据量。

2)增加洗牌聚合的记忆比例。

3)增加执行程序的总内存。

4.无序调谐

默认值:32k参数说明:该参数用于设置shuffle写任务的BufferedOutputStream的缓冲区大小。在将数据写入磁盘文件之前,它将被写入缓冲区,直到缓冲区满了,它才会溢出到磁盘。调优建议:如果作业的可用内存资源足够,可以适当增加该参数的大小(例如64k,必须是倍数),从而减少shuffle写过程中重写磁盘文件的次数,进而减少磁盘IO的数量,从而提高性能。在实践中发现,合理调整该参数,性能将提高1%~5%。默认值:48m参数说明:该参数用于设置shuffle read任务的缓冲区大小,这个缓冲区决定了一次可以拉取多少数据。调优建议:如果作业的可用内存资源足够,可以适当增加该参数的大小(例如96m),以减少拉取数据的次数,从而减少网络传输的次数,提高性能。在实践中发现,合理地调整这个参数。性能会提升1%~5%。默认值:3参数说明:混排读任务从混排写任务所在节点拉取自身数据时,如果因网络异常导致拉取失败,会自动重试。此参数表示最大重试次数。如果在指定的次数内拉仍然不成功,可能会导致作业执行失败。调优建议:对于那些涉及特别耗时的shuffle操作的作业,建议增加最大重试次数(例如60次),以避免由于JVM s满gc或网络不稳定。实践中发现,调整这个参数可以大大提高数据量巨大(几十亿到几十亿)的洗牌过程的稳定性。Shuffle file not find任务调度程序不负责重试任务,但DAGScheduler负责重试任务。默认值:5s参数说明:具体解释同上。该参数代表每次拉取数据的等待间隔,默认值为5s。调优建议:建议加大间隔(如60s)以增加洗牌操作的稳定性。默认值:0.2参数说明:该参数表示执行程序内存中分配给聚集操作的shuffle read任务的内存比例,默认值为20%。优化建议:资源参数优化中解释了该参数。如果有足够的内存,并且很少使用持久化操作,建议增加这个比例,给shuffle read的聚合操作更多的内存,避免聚合过程中由于内存不足导致频繁的磁盘读写。实践中发现,通过合理调整该参数,性能可以提高10%左右。默认值:sort|hash参数说明:该参数用于设置ShuffleManager的类型。在Spark 1.5之后,有三个选项:hash、sort和钨排序。HashShuffleManager是Spark 1.2之前的默认选项,但Spark 1.2及以后的版本默认都是SortShuffleManager。钨-sort类似于sort,但是它使用了钨计划中的堆外内存管理机制,使得内存使用更加高效。调优建议:由于SortShuffleManager默认对数据进行排序,如果您的业务逻辑中需要这种排序机制,可以使用默认的SortShuffleManager。如果你的商业逻辑不。;t不需要对数据进行排序,建议参考以下参数进行优化,避免通过bypass机制或优化的HashShuffleManager进行排序操作。同时提供更好的磁盘读写性能。这里需要注意的是,钨排序应该谨慎使用,因为之前已经发现了一些相应的bug。默认值:200参数说明:ShuffleManager为SortShuffleManager时,如果shuffle read任务数小于此阈值(默认值为200),则在shuffle write过程中不会对数据进行排序,而是以非优化HashShuffleManager的写入,但是每个任务生成的所有临时磁盘文件都会合并到一个文件中,并单独创建一个索引文件。调优建议:当你使用SortShuffleManager时,如果你真的不 t需要排序操作,那么建议将该参数调整为大于混排读取任务的数量。那么此时会自动启用旁路机制,map端不会排序,减少排序的性能开销。但是这样的话还是会产生大量的磁盘文件,所以shuffle write的性能还有待提高。默认值:false参数说明:如果使用了HashShuffleManager,则该参数有效。如果设置为true,那么合并机制将被启动,shuffle write的输出文件将被大大合并。对于大量混排读任务的情况,该方法可以大大降低磁盘IO开销,提高性能。调优建议:如果SortShuffleManager的排序机制确实没有必要,可以尝试手动将参数指定为hash,使用HashShuffleManager并在旁路机制之外开启consolidate机制。在实践中试用发现,其性能比开启旁路机制的SortShuffleManager高10%~30%。

5.无序播放调谐设置

如何使用SparkShuffle调优配置项?

1)代码方面,不建议硬编码。

新SparkConf()。设置(";,"; 64 ";)

2)提交星火任务时,建议。

火花-提交-确认-确认…

3)在conf下的配置文件中,不建议使用,因为写完以后所有应用都会用到。

参数 任务 建议 内存 磁盘

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。