Spark内核

spark内存管理

堆内和堆外内存规划

Spark中未进行序列化的对象,由于其占用的内存是通过周期性地采样近似估算而得,即并不是每次新增的数据项都会计算一次占用的内存大小,所以可能导致Spark标记为释放的内存但是JVM并没有释放导致实际可用的内存小于Spark记录的可用内存,甚至OOM

堆外内存直接向操作系统申请,所以可以实现精准的空间计算

调参建议

1、Executor堆内、堆外内存配置
在spark3.x中,可以通过metrics中的peak JVMHeapMemory、peak JVMOffHeapMemory来确定executor需要的峰值内存;在spark2.x版本可以通过配置spark.metrics.conf上报JvmSource至第三方存储,从而进一步分析executor内存信息。(在on yarn的情况下,可以通过NodaManager日志来查看container的physical memory占用记录,该方法会有一定误差,也无法准确判定堆外、堆内的实际占用,可以作为参考数据。)

2、堆外内存
在上面的分析中,我们知道:执行内存只能全是堆内内存或全是堆外内存,存储内存可以通过指定StorageLevel指定使用off_heap内存。一般不建议开启spark.memory.offHeap.enabled来使用堆外内存。虽然堆外内存可以减少不必要的GC开销,但是实际测试中,运行效率没有明显的提升;另外,开启之后,执行内存只能使用堆外内存,对于堆内内存来说,可能造成不必要的浪费。

3、SparkOutOfMemoryError
SparkOutOfMemoryError一般是task无法分配更多内存导致。一般可以通过增加spark.executor.memory大小解决;也可以通过减少并行task数spark.executor.cores,或者增加spark.default.parallism或spark.sql.shuffle.partition,减少每个task处理的数据量解决。

4、GC overhead limit exceeded
可以参考官方的GC调优:http://spark.apache.org/docs/latest/tuning.html#garbage-collection-tuning

5、Container killed by YARN, consider boosting spark.yarn.executor.memoryOverhead
on yarn模式下,实际内存占用超过申请内存上限会被yarn kill掉。该错误跟oom的区别主要在于:oom主要是内存占用超过Heap上限或者无法申请到更多执行内存、存储内存而导致。一般可以通过增加spark.yarn.executor.memoryOverhead解决。

6、执行内存、存储内存配置问题
在上面的分析中,我们知道统一内存 = 执行内存 + 存储内存,相应的如果能跟jvm一样确定执行内存和存储内存的峰值占用,则可以根据峰值信息优化统一内存配置。在spark3.x中,ExecutorMetrics提供如下metrics信息,可以帮助我们分析统一内存的实际使用,进而通过spark.memory.fraction、spark.memory.storageFraction调整执行内存、存储内存的大小。

OnHeapExecutionMemory,

OffHeapExecutionMemory,

OnHeapStorageMemory,

OffHeapStorageMemory,

OnHeapUnifiedMemory,

OffHeapUnifiedMemory

Spark内存管理参考:Apache Spark 内存管理(堆内/堆外)详解_浪尖聊大数据-浪尖的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark内核设计的艺术是指在Spark计算引擎的设计中,涉及了许多精心的考量和优化来提高性能和可扩展性。 首先,Spark内核设计中充分考虑了分布式计算的特点。Spark使用弹性分布式数据集(RDD)作为基本的计算模型,RDD是可分区的、可并行操作的数据集合,有助于将数据分布在集群中的不同节点上进行并发处理。这种设计能够更好地适应大规模数据处理的需求。 其次,Spark内核设计充分利用了内存计算的优势。Spark引入了内存计算的概念,并提供了内存管理机制,使得数据可以驻留在内存中,加速了数据处理的速度,尤其是对于迭代计算和交互式查询等工作负载。 此外,Spark内核设计还考虑到了任务调度和资源管理的问题。Spark使用了多阶段的任务调度器,将任务划分为不同的阶段,并优化了数据的本地性以减少数据传输的开销。同时,Spark还提供了动态资源分配的功能,根据任务的需求动态地分配和回收资源,提高资源利用率。 最后,Spark内核设计还注重了用户友好性和可扩展性。Spark提供了易用的API,如Spark SQL、Spark Streaming、Spark MLlib等,使得用户可以方便地进行大数据处理和机器学习等任务。同时,Spark还支持丰富的扩展功能,如自定义的数据源和函数,以及与其他大数据生态系统的无缝集成,使得Spark可以灵活地适应各种应用场景。 综上所述,Spark内核设计的艺术体现在它在分布式计算、内存计算、任务调度和资源管理、用户友好性和可扩展性等方面的优化和创新,使得Spark成为了当前大数据处理领域最受欢迎和广泛应用的计算引擎之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值