文档章节

Spark(Memory)

赵-猛
 赵-猛
发布于 2017/06/05 10:54
字数 749
阅读 63
收藏 0

Memory管理

MemoryAllocator(Spark Tungsten)

  off-heap => org.apache.spark.unsafe.memory.UnsafeMemoryAllocator: spark.unsafe.offHeap=true, default false
  in-heap => org.apache.spark.unsafe.memory.HeapMemoryAllocator


MemoryManager(Spark Tungsten)

  executor level => org.apache.spark.unsafe.memory.ExecutorMemoryManager
  task/thread level => org.apache.spark.unsafe.memory.TaskMemoryManager
  StaticMemoryManager(<1.5)
  UnifiedMemoryManager(>=1.6), 主要管理user memory和spark memory


Java Heap
    Spark System Reserved Memory -> 300M

spark.testing.reservedMemory

    Spark inHeap/offHeap Memory:

spark.memory.fraction
User Memory -> 
     (("Java Heap"–"Reserved Memory")*(1.0–spark.memory.fraction), default("Java Heap"–300MB)*0.25)
        
Spark Memory ->
     (("Java Heap"–"Reserved Memory")*spark.memory.fraction, default("Java Heap"–300MB)*0.75)
            Storage Memory: cached data + “broadcast” variables + temporary space serialized data  
            Execution Memory: storing the objects required during the execution of Spark tasks

 
CPU管理

spark(yarn)集群: spark master node + spark worker node * n
spark(yarn)管理进程(JVM): yarn ResourceManager + yarn HistoryServer + yarn NodeManager * n 
spark(yarn) application进程(JVM): spark driver(yarn client) + Application Master + Container/Executor * n

spark(standalone)集群: spark master node + spark worker node * n
spark(standalone)管理进程(JVM): spark master + spark worker * n 
spark(standalone) application进程(JVM): spark driver + spark executors

每个application(多个JVM)可以包含一个或者多个job(可以认为一个job就是一次action)
每个job会分为多个stage,各个stage按顺序执行(stage的划分主要依据rdd之间的依赖关系)
每个stage由多个task并行或者顺序执行组成
对于并行的task, 一般一rdd对应多个partion, 一个partion对应需要一个task,即一个partition一个线程

使用partitioner的操作
  combineByKey
  aggregateByKey
  groupByKey
  reduceByKey
  cogroup
  join
  leftOuterJoin
  rightOuterJoin
  fullOuterJoin

单个job需要的executor(jvm进程)个数
    spark.executor.instances 
每个spark节点可以起一个或多个executor(jvm进程)
    执行的并行度:Executor数目 * 每个Executor核数  
    
每个executor拥有固定的核数(jvm线程)以及固定大小的堆(Spark User Memory)
    spark.executor.cores: 核数, 虚拟核(非cpu核心数)
    spark.executor.memory: 堆大小, 默认大小512m,代号sparkheap
        spark.storage.memoryFraction: block cache + broadcasts + task results, 默认0.6      
        spark.storage.safetyFraction:默认值0.8
        sparkheap*spark.storage.memoryFraction*spark.storage.safetyFraction
        
        spark.shuffle.memoryFraction: shuffles + joins + sorts + aggregations, 频繁IO需要的buffer, 默认0.2
        spark.shuffle.safetyFraction:默认值0.8
        sparkheap*spark.shuffle.memoryFraction*spark.shuffle.safetyFraction

        spark.storage.unrollFraction:默认值0.2, 序列化和反序列化
        spark.storage.safetyFraction:默认值0.9
        sparkheap *spark.storage.memoryFraction*spark.storage.unrollFraction*spark.storage.safetyFraction

每个task可用的内存通过这个公式计算:spark.executor.memory * spark.shuffle.memoryFraction * spark.shuffle.safetyFraction) / spark.executor.cores 。 
(防止OOM, 可以使用spark.shuffle.safetyFraction)

 

硬盘和IO管理

(只讨论HDFS作为输入)

 Spark读取一个HDFS文件,并指定partition分区数
    一个HDFS文件由多个block(每个block可以认为是一个本地文件)组成
    Spark将同一个HDFS文件的若干个Block合并成一个InputSplit(输入分片),Spark依据这些输入分片生成具体的读取task(即一个InputSplit对应一个读task)
    一个InputSplit或者读task的结果是生成目标rdd的一个partition
    一个读task会被分配到某一个executor中,每个executor的虚拟核只会执行一个task
    一个executor的每个线程只能执行一个task(即task并发度最多是Executor数*Executor虚拟核数)
    Map阶段一个rdd的partition数目不变
    Reduce阶段一个rdd的partition数目不确定,依赖具体算子,某些不变,某些变少,某些可配置

 

© 著作权归作者所有

上一篇: Spark(GraphX)
下一篇: Servlet(Filter)
赵-猛
粉丝 6
博文 820
码字总数 500010
作品 0
深圳
技术主管
私信 提问
Spark 1.4.1 Standalone 模式部署安装配置

各节点执行如下操作(或在一个节点上操作完后 scp 到其它节点): 1、 解压spark安装程序到程序目录/bigdata/soft/spark-1.4.1,约定此目录为$SPARKHOME tar –zxvf spark-1.4-bin-hadoop2.6....

山疯
2015/08/12
493
0
spark on yarn提交任务时一直显示ACCEPTED

spark on yarn提交任务时一直显示ACCEPTED,过一个小时后就会出现任务失败,但在提交时shell终端显示的日志并没有报错,logs文件夹中也没有日志产生。 任务提交命令为 bin/spark-submit --c...

闵开慧
2014/09/02
5.6K
1
spark submit参数及调优

spark submit参数介绍 你可以通过spark-submit --help或者spark-shell --help来查看这些参数。 使用格式: ./bin/spark-submit --class --master --deploy-mode --conf = ... # other option......

citibank
2018/07/17
0
0
Spark 1.2.2/1.3.1 发布,开源集群计算系统

Spark 1.2.2 和 Spark 1.3.1 发布啦!这两个版本是维护版本,超过 90 位开发者在维护 Spark。 Spark 1.2.2 包括稳定性方面的 bug 修复: Spark Core Thread safety problem in Netty shuffl...

oschina
2015/04/20
2.8K
2
spark thriftserver运维

spark thriftserver运维: 在root@sparkmastermachine机器上 启动 thriftserver======================================================================================================......

月下独酌100
2015/08/07
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
42分钟前
3
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
今天
3
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
今天
2
0
Flutter 系列之Dart语言概述

Dart语言与其他语言究竟有什么不同呢?在已有的编程语言经验的基础上,我们该如何快速上手呢?本篇文章从编程语言中最重要的组成部分,也就是基础语法与类型变量出发,一起来学习Dart吧 一、...

過愙
今天
2
0
rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部