码迷,mamicode.com
首页 > 系统相关 > 详细

Spark Core 02(理论),独立的进程集

时间:2021-03-04 13:20:14      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:form   发送   spark   分配   机制   主程序   partition   故障   理论   

Application
    Application=a driver program +  executors
    一般来说:1个SparkContext = 1个application=1个SparkShell

Spark提交任务不一定须在集群里提交,有gateway就行

1个application ==> 有n jobs ==> 有n stages ==> 有n tasks(n表示多个)

partition数  ==  task数

Cluster Mode Components:
  Spark应用程序在集群中运行为独立的进程集,由主程序中的Sparkcontext对象协调 (called the driver program).
 具体地说,要在集群上运行,SparkContext可以连接到几种类型的集群管理器(Spark自己独立的集群manager、Mesos或    Yarn),它们在应用程序之间分配资源。一旦连接,Spark就在集群中的节点上获取执行器,这些进程运行计算并为应用程序存  储数据。接下来,它将应用程序代码(通过jar或Python文件定义为SparkContext)发送给执行程序。最后,SparkContext将任务  发送给执行器运行。 
  注意事项:
  1.每个应用程序都有自己的执行器进程,这些进程在整个应用程序的持续时间内运行,并在多个线程中运行任务。这有利于在调 度时(每个driver调度自己的任务时)和执行时(不同的应用和不同的JVM中的任务)隔离每个任务。然而,这也意味着数据不能在不同的Spark应用程序中共享,除非将其写入外部存储系统。 
  2.Spark不识别底层的集群管理器。 
  3.驱动程序必须在其生命周期内监听并接受来自执行器的通信信息。 
  4.因为驱动程序在集群上调度任务,所以它应该靠近工作节点,最好在同一局域网上运行。 

  架构图:
  技术图片

 

Cache:
Spark中最重要的功能之一是在内存中持久化(或缓存)数据集。当您缓存RDD时,每个节点都存储有它在内存中计算的任何分区,并在该数据集上的其他操作(或从它派生的数据集)中重用它们。

cache 是lazy的机制,相似于transformation

unpersist eager

cache和persist的区别(直接看源码定义):
def persist() = persist(StorageLevel.MEMORY_ONLY)
def cache()   = persist()

class StorageLevel private(
    private var _useDisk: Boolean,          //是否存到磁盘
    private var _useMemory: Boolean,    //是否存到内存
    private var _useOffHeap: Boolean,    //使用堆外内存
    private var _deserialized: Boolean,    //是否使用反序列化(序列化消耗内存,可永久化数据)
    private var _replication: Int = 1)          //副本数
MEMORY_ONLY  (false, true, false, true)

如何抉择用哪种StorageLevel:
1.如果您的RDDS与默认存储级别(MeimyIyOnLead)适配,那么就用它。这是CPU效率最高的选项,允许RDDS上的操作尽可能快地运行。
2.如果不适配,尝试使用MEMORY_ONLY_SER并选择快速序列化库,以使对象更具空间效率,仍然可以相当快地访问。(Java和Scala 内存不够了就用它) 
3.尽可能的不要存储到磁盘
4.用于故障时快速恢复数据,所有的存储层都通过重新计算丢失的数据提供完全容错。(不推荐,占空间)

Dependency
技术图片技术图片
窄依赖
    一个父RDD的partition至多被子RDD的某个partition使用一次(pipeline)
宽依赖
    一个父RDD的partition会被子RDD的partition使用多次
遇到宽依赖,Stage就会被拆分

shuffle ==> stage
即遇到n个shuffle,就有n+1个Stage

补充:
StorageLevel详解
getOrElse的坑
技术图片

 

Spark Core 02(理论),独立的进程集

标签:form   发送   spark   分配   机制   主程序   partition   故障   理论   

原文地址:https://www.cnblogs.com/cnjf/p/14477134.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!