主页 > 新闻资讯 > 自学Spark内存:Spark框架内存机制

自学Spark内存:Spark框架内存机制

作者:张老师 浏览次数: 2020-02-14 18:45
Spark计算引擎,一直以来都有计算性能优越而著称,甚至一度超过Hadoop的热度,成为一种据说要取代Hadoop框架的存在。虽然,实际上Spark现在还没有完全取代Hadoop的能力。Spark的计算性能优势,是因为Spark基于内存进行计算。今天我们就来为大家分享自学Spark内存的相关知识。

Spark相比于Hadoop的优势,主要是因为Hadoop的MapReduce框架在执行计算任务时,基于磁盘进行计算,在计算过程中需要不断从磁盘进行数据存取,我们都知道这个过程是耗时的,因此MapReduce的计算效率也被拖累。

自学Spark内存

而Spark在继承了MapReduce分布式并行计算的思想之上,将计算从磁盘上转移到内存当中来,计算的中间结果也存在内存当中,众所周知内存的读取速度相比磁盘的读取速度可要快多了。因此,基于内存计算的Spark,在运行速度上有了极大的提升。

并且,Spark基于内存计算的模式,还在不断的优化升级。

spark从1.6版本开始引入了动态内存管理模式,即执行内存和存储内存之间可以互相抢占。所以在后续的Spark框架当中,对于内存空间的分配管理也需要技术开发人员做好优化工作。

在Spark最初采用的静态内存管理机制下,存储内存、执行内存和其他内存的大小在Spark应用程序运行期间均为固定的,但用户可以应用程序启动前进行配置。

默认情况下,spark内存管理采用unified模式,如果要开启静态内存管理模式。将Spark.memory.useLegacyMode参数调为true(默认为false)。

当调整该参数以后,从SparkEnv.scala中可知,如果为true,内存管理调用静态内存类(StaticMemoryManager)。反之,内存管理采用统一内存管理类(UnifiedMemoryManager)。

而Execution内存,则是用于shuffle聚合内存,取决于joins、sorts、aggregations等过程中频繁的IO需要的Buffer临时数据存储。

简单来说,spark在shuffle write的过程中,每个executor会将数据写到该executor的物理磁盘上,下一个stage的task会去上一个stage拉取其需要处理的数据,并且是边拉取边进行处理的(和MapReduce的拉取合并数据基本一样),这个时候会用一个aggregate的数据结构,比如hashmap边拉取数据边进行聚合。这部分内存就被称做execution内存。

总体来说,自学Spark内存部分的知识,难度还是比较大的,需要对Spark内存运行机制等知识都理解通透,掌握彻底才行。Spark关于内存这部分的设计,如果学习起来有难度,还是建议大家找一些课程来看,多钻研。成都加米谷大数据,专业大数据培训机构,大数据开发2020春季班正在招生中,详情可联系客服了解!
热点排行
推荐文章
立即申请>>