主页 > 新闻资讯 > Spark内存越大越好吗?Spark动态内存管理

Spark内存越大越好吗?Spark动态内存管理

作者:张老师 浏览次数: 2020-02-21 17:04
我们都知道,Spark对比第一代的Hadoop框架,主要的优势就在于计算性能的提升,而这个计算性能的提升,很大程度上跟Spark面向内存进行运算有关。但是也有同学存在这样的疑问,既然基于内存进行运算很快,那么想要更快是不是只要扩大内存就够了?Spark内存越大越好吗?今天,我们就从Spark动态内存管理的角度,来解答一下这个问题。

首先,Spark虽然基于内存进行计算,但是实际上对于PC硬件的内存要求并不高,根据官网的说法,只要内存在8GB之上即可(Impala要求机器配置在128GB)。但是出于提升计算性能的考量,很多人会认为既然是基于内存计算,那么内存越大,是不是就代表着计算速度还能进一步的提升。

Spark内存越大越好吗

事实上,从理论上来说,内存越大确实是更加能够满足需求,但是在实际情况下,内存大并不代表着Spark一定就能更快,关键还在于Spark能够分到的内存有多大。因为除了Spark计算需要占用内存,操作系统也需要内存支持。

Spark从1.6版本以后,引入了Unified Memory Manager,对内存进行统一管理,使spark在运行时,不同用途的内存之间可以实现互相的拆借,在运行内存和存储内存之间,实现更高效的内存分配,更好地支持基于内存的计算任务。

Spark内存一般分为三个部分:

Reserved Memory:这部分内存是预留给系统使用,在1.6.0默认为300MB,这一部分内存不计算在spark execution和storage中。可通过spark.testing.reservedMemory进行设置。然后把实际可用内存减去这个reservedMemory得到usableMemory。ExecutionMemory和StorageMemory会共享usableMemory*spark.memory.fraction(默认0.75)。

User Memory:分配Spark Memory剩余的内存,用户可以根据需要使用。默认占(Java Heap-Reserved Memory)*0.25。

Spark Memory:计算方式为(Java Heap–ReservedMemory)*spark.memory.fraction,在1.6.0中,默认为(Java Heap-300M)*0.75。Spark Memory又分为Storage Memory和Execution Memory两部分。两个边界由spark.memory.storageFraction设定,默认为0.5。

关于Spark内存越大越好吗这个问题,相信看完以上的内容,大家已经有了答案。Spark框架的动态内存管理机制,本身也支持对于内存使用的配置,以符合Spark运行的实际需求。加米谷大数据,成都大数据培训机构,专业大数据培训课程,课程大纲及学习资料,可联系客服获取!
热点排行
推荐文章
立即申请>>