`
m635674608
  • 浏览: 4929665 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spark 内存分配

 
阅读更多

Spark1.5堆内存分配

 
这是spark1.5及以前堆内存分配图
下边对上图进行更近一步的标注,红线开始到结尾就是这部分的开始到结尾
 
spark 默认分配512MB JVM堆内存。出于安全考虑和避免内存溢出,Spark只允许我们使用堆内存的90%,这在spark的spark.storage.safetyFraction 参数中配置着。也许你听说的spark是一个内存工具,Spark允许你存储数据在内存。其实,Spark不是真正的内存工具,它只是允许你使用内存的LRU(最近最少使用)缓存 。所以,一部分内存要被用来缓存你要处理的数据,这部分内存占可用安全堆内存的60%,这个值在spark.storage.memoryFraction参数中配置。所以如果你想知道你可以存多少数据在spark中,spark.storage.safetyFraction 默认值为0.9,spark.storage.memoryFraction的默认值为0.6,
Storage=总堆内存*0.9*0.6,所以你有54%的堆内存用来存储数据。
shuffle内存:
spark.shuffle.safetyFraction * spark.shuffle.memoryFraction
spark.shuffle.safetyFraction默认为0.8或80%,spark.shuffle.memoryFraction默认为0.2或20%,则你最终可以使用0.8*0.2=0.16或16%的JVM 堆内存用于shuffle。
Unroll内存:
spark允许数据以序列化或非序列化的形式存储,序列化的数据不能拿过来直接使用,所以就需要先反序列化,即unroll。
 Heap Size*spark.storage.safetyFraction*spark.storage.memoryFraction*spark.storage.unrollFraction=Heap Size *0.9*0.6*0.2=Heap Size * 0.108或10.8%的JVM 堆内存。
到此为止,你应该就知道Spark是如何使用jvm内存的了,下边是集群模式,以yarn为例,其它类似。
 
在Yarn集群中,Yarn Resource Manager管理集群的资源(实际就是内存)和一系列运行在集群Node上yarn resource manager及集群Nodes资源的使用。从YARN的角度,每一个 Node都代表了一个可控制的内存资源,当你向Yarn Resource Manager申请资源时,它会反馈给你哪个yarn node manager 可以连接并启动一个execution container给你。每一个execution container都是一个可以提供堆内存的JVM,JVM的位置是由Yarn Resource manager选择的。
 
当你在Yarn上启动Spark时,你可以指定executor的数量(–num-executors flag or spark.executor.instances parameter)、每个executor的内存大小(–executor-memory flag or spark.executor.memory  parameter)、每个executor的内核数量(–executor-cores flag of spark.executor.coresparameter)、每个task执行的内核数量(spark.task.cpusparameter),你也可以指定driver的内存大小(–driver-memory flag or spark.driver.memory parameter)。
 
当你在集群中执行某项任务时,一个job会被切分成stages,每个stage会被分成多个task,每个task会被单独分配,你可以把这些executor看成一个个执行task的槽池(a pool of tasks execution slots)。如下看一个例子:一个集群有12个节点(yarn node manager),每个节点有64G内存、32核的CPU(16个物理内核,一个物理内核可以虚拟成两个)。每个节点你可以启动两个executors、每个executor分配26G内存(留一部分用于system process、yarn NM、DataNode).所以集群一共可以处理 12 machines * 2 executors per machine * 12 cores per executor / 1 core for each task = 288 task slots。这意味着该集群可以并行运行288个task,充分利用集群的所有资源。你可以用来存储数据的内存为= 0.9 spark.storage.safetyFraction * 0.6 spark.storage.memoryFraction * 12 machines * 2 executors per machine * 26 GB per executor = 336.96 GB。没有那么多,但是也足够了。
 
到此,你已经知道spark如何分配 jvm内存,在集群中可以有多少个execution slots。那么什么是task,你可以把他想像成executor的某个线程,executor是一个进程 ,它可以多线程的执行task.
 
下边来解释一下另一个抽象概念"Partition",你用来分析的所有数据都将被切分成partitions,那么何为一个partition,它又是由什么决定的?partition的大小是由你使用的数据源决定的,在spark中你可以使用的所有读取数据的方式,大多你可以指定你的RDD中有多少个partitions。当你从HDFS中读取一个文件时,hadoop的InputFormat决定partition。通常由InputFormat输入的每一个 split对应于RDD中的一个partition,而每一个split通常相当于hdfs中的一个block(还有一些其它情况,暂不解释,如text file压缩后传过一整个partition不能直接使用)。
一个partition产生一个task,并在数据所在的节点task slot执行(数据本地性)
 
http://blog.csdn.net/u014686180/article/details/53082606
分享到:
评论

相关推荐

    Spark机器学习视频第4课.SparkRDD原理剖析

    课程目录: 课时1:Spark介绍 课时2:Spark2集群安装 课时3:Spark RDD操作 课时4:SparkRDD原理剖析 ...课时20:操作RDD需要注意点,以及Spark内存分配资源调优 课时21:Spark整个学习过程及其总结

    Spark内存管理和分配

    Spark内存管理和分配

    Spark机器学习第1课.Spark介绍

    课程目录: 课时1:Spark介绍 课时2:Spark2集群安装 课时3:Spark RDD操作 课时4:SparkRDD原理剖析 ...课时20:操作RDD需要注意点,以及Spark内存分配资源调优 课时21:Spark整个学习过程及其总结

    Spark机器学习视频第10课.最终获取用户的收藏以及订单转换率

    课程目录: 课时1:Spark介绍 课时2:Spark2集群安装 课时3:Spark RDD操作 课时4:SparkRDD原理剖析 ...课时20:操作RDD需要注意点,以及Spark内存分配资源调优 课时21:Spark整个学习过程及其总结

    Spark机器学习视频第2课.Spark2集群安装

    课程目录: 课时1:Spark介绍 课时2:Spark2集群安装 课时3:Spark RDD操作 课时4:SparkRDD原理剖析 ...课时20:操作RDD需要注意点,以及Spark内存分配资源调优 课时21:Spark整个学习过程及其总结

    spark:Executor分配详解

    用户应用new SparkContext后,集群就会为在Worker上分配executor,但是增加executor的时候需要考虑好内存消耗,因为一台机器的内存分配给越多的executor,每个executor的内存就越小,以致出现过多的数据spill over...

    改进的 Spark Shuffle 内存分配算法

    改进的 Spark Shuffle 内存分配算法

    【Spark内核篇05】Spark内存管理1

    1. Spark 在代码中 new 一个对象实例 2. JVM 从堆内内存分配空间,创建对象并返回对象引用 3. Spark 保存该对象的引用,记录该对象占用的

    Spark动态资源分配-DynamicResourceAllocation

    和Yarn中的Containers一样,在SparkOnYarn模式下,通常使用–num-executors来指定Application使用的executors数量,而–executor-memory和–executor-cores分别用来指定每个executor所使用的内存和虚拟CPU核数。...

    Spark on Yarn之Executor内存管理 - 简书1

    本1、2、3节介绍了Spark 内存相关之识,第4节描述了常错误类型及产原因并给出了解决案。1 堆内和堆外内存规划堆内和堆外内存规划了更为详细的分配,以充分利内

    Starred_Paper_Hadoop_Spark.docx

    该课题不仅系统的论述和比较Hadoop和Spark的系统结构、运行原理及各自的生态系统特点,也包括怎样逐步调优系统性能,例如数据压缩类型,内存分配控制,数据分割等手段。实验数据结果表明,由于Spark平台主要基于...

    spark集群安装

    spark集群安装,总结的非常详细,具体步骤都有截图,照着做没问题

    开源的分布式内存文件系统 Tachyon.zip

     AMPLab在大数据领域最知名的产品是Spark,它是一个内存中并行处理的框架,Spark的创造者声称:使用Shark运行并行处理Job速度要比MapReduce快100倍。又因为Spark是在内存运行,所以Shark可与Druid或者SAP's HANA...

    log-analysis:使用 Spark 进行 Hadoop 日志分析

    这个用 Scala、Spark 和 MLLIB 编写的应用程序的总体目标是根据日志数据预测应用程序故障。 我的解决方案由两个模块组成:解析器LogParser和日志分析器LogAnalysis 。 我解析了 5 种类型的日志,这些日志将解释用于...

    js-spark-md5:用于 javascript 的闪电般快速的正常和增量 md5

    Firebug 会消耗大量内存和 CPU,大大降低了测试速度。 安装 npm install --save spark-md5 对 JKM md5 库的改进 字符串被转换为 utf8,就像大多数服务器端算法一样 修复大量数据的计算(溢出) 增量 md5(见下文)...

    基于迭代填充的内存计算框架分区映射算法

    针对内存计算框架 Spark 在作业 Shuffle 阶段一次分区产生的数据倾斜问题,提出一种内存计算框架的迭 代填充分区映射算法( IFPM) 。首先,分析 Spark 作业的执行机制,建立作业效率模型和分区映射模型,给出作业执行...

    SparkJson:从@bblanchon 为 Spark Core 移植的 JSON 库

    固定内存分配(无 malloc) 占地面积小 麻省理工学院执照 快速开始 解码/解析 char json[] = "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}"; StaticJsonBuffer<200> jsonBuffer; ...

    【容器系统】之大数据容器化-基于Kubernetes构建现代大数据系统.pdf

    以Spark on YARN为例,核⼼组 件YARN作为资源调度器,其结构如下图所⽰ 下图讲述了Apache Spark on YARN的⼯作⽅式: YARN ResourceManager的功能为: 负责集群中所有资源的统⼀管理和分配,它接收来⾃各个节点...

Global site tag (gtag.js) - Google Analytics