精华内容
下载资源
问答
  • Spark核心组件

    2018-10-16 20:10:00
    Spark核心组件 1、RDD resilient distributed dataset, 弹性分布式数据集。逻辑上的组件,是spark的基本抽象,代表不可变,分区化的元素集合,可以进行并行操作。该类封装了RDD的基本操作,例如map、filter、persist等...

    Spark核心组件

    1、RDD

    resilient distributed dataset, 弹性分布式数据集。逻辑上的组件,是spark的基本抽象,代表不可变,分区化的元素集合,可以进行并行操作。该类封装了RDD的基本操作,例如map、filter、persist等,除此以外,PairRDDFunctions封装了KV类型RDD的操作,例如groupByKey和join。对于spark的KV类型RDD直接隐式转换成PairRDDFunctions类,具备了byKey的操作。

    RDD轻量级集合,内部没有数据。内部,每个RDD具有5方面主要属性:

    1. 分区列表
    2. 用于计算每个切片的函数(算法)
    3. 到其他RDD的依赖列表
    4. (可选)对于KV类型的RDD有一个分区类
    5. (可选)计算每个切片的首选位置列表

    spark中所有的调度和执行都是基于这些方法,也允许每个RDD实现自己的计算方式。RDD的方法主要包含两种类型Transformations和action。返回rdd都是变换,不会导致job的执行,延迟计算,延迟到action方法的调用。

    1.1 transform

    • map
    • filter
    • mapValues
    • flatMap
    • reduceByKey
    • groupByKey
    • sortByKey

    2、SparkContext

    上下文创建时,在worker节点直接启动job的执行器进程(CoarseGrainedExecutorBackend),spark入口点,表示到spark集群的一个连接。创建该类时,同时创建task调度器和后台调度器,后台调度器还要决定默认并发度问题。

    3、DagScheduler

    高级调度层,面向stage进行调度,为每个job计算stage,寻找最优路径执行job。该调度器以taskset方式提交stage给下层调度器(TaskScheduler)。Spark以shuffle为边界,将众多的RDD划分成stage,窄依赖的RDD划分到一个stage中。shuffle依赖需要多个stage,DAG调度检测运行task的首选位置,该调度器将位置信息和状态传递给底层的task调度器。DAG调度器处理因shuffle output丢失导致故障,此时上一个stage需要重新提交。在阶段stage内,不是由shuffle output丢失导致的故障都由下层的task调度器处理。缓存跟踪,避免rdd重复计算。首选位置:首选那个节点来执行task。为了防止内存泄漏,job完成后清除数据结构。递归提交每个Stage,每个stage都是以Tasket方式提交任务集合给下层的TaskScheduler,因此Dag调度器需要计算每个stage的任务集合。提交的阶段通过分区列表映射成Task集合,ShuffleMapStage对应ShuffleTask,ResultStage对应
    ResultTask。

    4、TaskSchedulerImpl

    5、SchedulerBackend

    6、job

    activejob,提交给调度器的最顶层work单位,每个job可能需要多各stage的执行,并产生中间结果。

    7、stage

    stage是task的集合,数量同stage的最后的一个rdd的分区数相同。stage按照shuffle进行划分边界,存在前后依赖,上一阶段计算输出,下一个提取上一个的结果。主要有两种类型stage:

    1. ResultStage
      最后的阶段,执行action。在RDD的某些分区上应用函数来计算action的结果。
    2. ShuffleMapStage
      产生map的output,stage如果重用了rdd,可以跨job共享。该阶段是DAG图计算过程中的中间阶段,执行时保存输出文件供reduce任务抓取,该阶段可以单独提交,DagScheduler.submitMapStage();

    8、Task

    转载于:https://www.cnblogs.com/xupccc/p/9800349.html

    展开全文
  • spark核心组件

    2020-10-17 18:13:02
    监控executor运行状态并通过web展示 executor:是一个jvm进程,执行driver分配的task,将执行结果返回给driver,通过自身的block manager为task提供缓存RDD的功能 3.AppMaster是yarn资源调度和计算调度解耦合的组件,...

    1.master和worker是standalone模式下的资源调度模块
        master:调度和分配worker上的计算资源,集群监控,相当于resourceManager
        worker:执行master的资源分配任务,相当于nodeManager


    2.driver和executor是计算调度调度模块
        driver:执行main函数,将程序转为job,调度task,监控executor运行状态并通过web展示
        executor:是一个jvm进程,执行driver分配的task,将执行结果返回给driver,通过自身的block manager为task提供缓存RDD的功能


    3.AppMaster是yarn资源调度和计算调度解耦合的组件,driver根据启动参数通过am向resourceManager申请资源

    展开全文
  • Spark 核心组件解析

    2019-07-10 19:35:00
    7.Spark 核心组件解析 7.1 BlockManager 数据存储与管理机制  BlockManager 是整个 Spark 底层负责数据存储与管理的一个组件,Driver 和 Executor 的所有数据都由对应的 BlockManager 进行管理。  Driver 上...

    7.Spark 核心组件解析

     

    7.1 BlockManager 数据存储与管理机制

      BlockManager 是整个 Spark 底层负责数据存储与管理的一个组件,Driver 和
    Executor 的所有数据都由对应的 BlockManager 进行管理。
      Driver 上有 BlockManagerMaster,负责对各个节点上的 BlockManager 内部管理
    的数据的元数据进行维护,比如 block 的增删改等操作,都会在这里维护好元数据
    的变更。
      每个节点都有一个 BlockManager,每个 BlockManager 创建之后,第一件事即
    使去向 BlockManagerMaster 进行注册,此时 BlockManagerMaster 会为其长难句对应
    的 BlockManagerInfo。
      BlockManager 运行原理如下图所示:
     
     
      BlockManagerMaster 与 BlockManager 的关系非常像 NameNode 与 DataNode 的
    关系,BlockManagerMaster 中保存中 BlockManager 内部管理数据的元数据,进行维
    护,当 BlockManager 进行 Block 增删改等操作时,都会在 BlockManagerMaster 中进
    行元数据的变更,这与 NameNode 维护 DataNode 的元数据信息,DataNode 中数据
    发生变化时 NameNode 中的元数据信息也会相应变化是一致的。
     
      每个节点上都有一个 BlockManager,BlockManager 中有 3 个非常重要的组件:
      · DiskStore:负责对磁盘数据进行读写;
      · MemoryStore:负责对内存数据进行读写;
      · BlockTransferService : 负 责 建 立 BlockManager 到远程其他节点的
    BlockManager 的连接,负责对远程其他节点的 BlockManager 的数据进行读写;
      每个 BlockManager 创建之后,做的第一件事就是想 BlockManagerMaster 进行
    注册,此时 BlockManagerMaster 会为其创建对应的 BlockManagerInfo。
      使用 BlockManager 进行写操作时,比如说,RDD 运行过程中的一些中间数据,
    或者我们手动指定了 persist(),会优先将数据写入内存中,如果内存大小不够,会
    使用自己的算法,将内存中的部分数据写入磁盘;此外,如果 persist()指定了要
    replica,那么会使用 BlockTransferService 将数据 replicate 一 份 到 其 他 节 点 的
    BlockManager 上去。
      使用 BlockManager 进行读操作时,比如说,shuffleRead 操作,如果能从本地读
    取,就利用 DiskStore 或者 MemoryStore 从本地读取数据,但是本地没有数据的话,
    那么会用 BlockTransferService 与 有 数 据 的 BlockManager 建 立 连 接 , 然 后 用
    BlockTransferService 从远程 BlockManager 读取数据;例如,shuffle Read 操作中,
    很有可能要拉取的数据在本地没有,那么此时就会到远程有数据的节点上,找那个
    节点的 BlockManager 来拉取需要的数据。
      只要使用 BlockManager 执 行 了 数 据 增 删 改 的 操 作 , 那 么 必 须 将 Block 的
    BlockStatus 上报到 BlockManagerMaster , 在 BlockManagerMaster 上会对指定
    BlockManager 的 BlockManagerInfo 内部的 BlockStatus 进行增删改操作,从而达到
    元数据的维护功能。
     
     
     
     

    7.2 Spark 共享变量底层实现

      Spark 一个非常重要的特性就是共享变量
      默认情况下,如果在一个算子的函数中使用到了某个外部的变量,那么这个变
    量的值会被拷贝到每个 task 中,此时每个 task 只能操作自己的那份变量副本。如果
    多个 task 想要共享某个变量,那么这种方式是做不到的。
      Spark 为此提供了两种共享变量,一种是 Broadcast Variable(广播变量)另一
    种是 Accumulator(累加变量)。Broadcast Variable 会将用到的变量,仅仅为每个节
    点拷贝一份,即每个 Executor 拷贝一份,更大的用途是优化性能,减少网络传输以
    及内存损耗。Accumulator 则可以让多个 task 共同操作一份变量,主要可以进行累
    加操作。Broadcast Variable 是共享读变量,task 不能去修改它,而 Accumulator 可以
    让多个 task 操作一个变量。
     
     
     

    7.2.1 广播变量

      广播变量允许编程者在每个 Executor 上保留外部数据的只读变量,而不是给每
    个任务发送一个副本。
      每个 task 都会保存一份它所使用的外部变量的副本,当一个 Executor 上的多个
    task 都使用一个大型外部变量时,对于 Executor 内存的消耗是非常大的,因此,我
    们可以将大型外部变量封装为广播变量,此时一个 Executor 保存一个变量副本,此
    Executor 上的所有 task 共用此变量,不再是一个 task 单独保存一个副本,这在一定
    程度上降低了 Spark 任务的内存占用。 
     

      Spark 还尝试使用高效的广播算法分发广播变量,以降低通信成本。
      Spark 提供的 Broadcast Variable 是只读的,并且在每个 Executor 上只会有一个
    副本,而不会为每个 task 都拷贝一份副本,因此,它的最大作用,就是减少变量到
    各个节点的网络传输消耗,以及在各个节点上的内存消耗。此外,Spark 内部也使用
    了高效的广播算法来减少网络消耗。
      可以通过调用 SparkContext 的 broadcast()方法来针对每个变量创建广播变量。
    然后在算子的函数内,使用到广播变量时,每个 Executor 只会拷贝一份副本了,每
    个 task 可以使用广播变量的 value()方法获取值。
      在任务运行时,Executor 并不获取广播变量,当 task 执行到 使用广播变量的代
    码时,会向 Executor 的内存中请求广播变量,如下图所示:
     
     
      之后 Executor 会通过 BlockManager 向 Driver 拉取广播变量,然后提供给 task
    进行使用,如下图所示:
     
      广播大变量是 Spark 中常用的基础优化方法,通过减少内存占用实现任务执行
    性能的提升。
     
     
     

    7.2.2 累加器 

      累加器(accumulator):Accumulator 是仅仅被相关操作累加的变量,因此可以
    在并行中被有效地支持。它们可用于实现计数器(如 MapReduce)或总和计数
      Accumulator 是存在于 Driver 端的,集群上运行的 task 进行 Accumulator 的累加,
    随后把值发到 Driver 端,在 Driver 端汇总(Spark UI 在 SparkContext 创建时被创建,
    即在 Driver 端被创建,因此它可以读取 Accumulator 的数值),由于 Accumulator
    存在于 Driver 端,从节点读取不到 Accumulator 的数值。
      Spark 提供的 Accumulator 主要用于多个节点对一个变量进行共享性的操作。
    Accumulator 只提供了累加的功能,但是却给我们提供了多个 task 对于同一个变量
    并行操作的功能,但是 task 只能对 Accumulator 进行累加操作,不能读取它的值
    只有 Driver 程序可以读取 Accumulator 的值。
     
      Accumulator 的底层原理如下图所示:
     

     

    8.总结
      Spark 的内核原理对于更好的使用 Spark 完成开发任务有着非常重要的作用,在
    本课程的学习中,我们对 Spark 的部署模式、通信架构、任务调度机制、Shuffle 过
    程、内存管理机制以及 Spark 核心组件进行了详细分析,这些内容都是 Spark 最为
    重要的架构原理,希望在之后的学习中大家可以不断深化对于 Spark 内核架构的理
    解,在更高的层次上去使用 Spark 技术框架。
     
     
     
     
     
     
     

    转载于:https://www.cnblogs.com/LXL616/p/11166017.html

    展开全文
  • spark内核揭秘-03-spark核心组件

    万次阅读 2015-01-18 09:46:30
    spark内核揭秘-03-spark核心组件 spark内核揭秘-03-spark核心组件 spark内核揭秘-03-spark核心组件 spark内核揭秘-03-spark核心组件

    spark核心组件如下所示:




    在SparkContext初始化的时候,会初始化一系列内容:

    查看内存使用情况:



    创建和启动scheduler:



    集群核心组件中的Block tracker是用于block和partition对应关系的管理。

    集群核心组件中的shuffle tracker是用于记录shuffle操作的过程细节。

    从集群中也可以看出,Executor在执行任务的时候是采用多线程的方式执行的并能够在HDFS或者HBase等系统上读取数据。

    而在实际的Driver Program运行的时候每个partition都会由一个task负责运行的



    也就是说有多partition就会有多少task在运行,而这些task都是并发的运行在Executor中的。



    展开全文
  • 1-Spark核心组件1.1DriverSpark 驱动器节点,用于执行 Spark 任务中的 main 方法,负责实际代码的执行工作。Driver 在 Spark 作业执行时主要负责:将用户程序转化为作业job在executor之间调度任务跟踪executor的执行...
  •  【Spark 核心组件示意图】   1. RDD  resilient distributed dataset , 弹性数据集  轻量级的数据集合,逻辑上的集合。等价于 list  没有携带数据。 2. 依赖  RDD 的依赖是子 RDD 上...
  • 目录Spark核心组件Spark运行架构RDDDAG:有向无环图RDD创建RDD创建方式一:parallelizeRDD创建方式二:makeRDD分区设置textFile创建RDDlinux中创建RDD Spark核心组件 在解释Spark架构之前,我们先来了解一下Spark的...
  • Spark 核心组件深度剖析一、BlockManager 数据存储与管理机制二、Spark 共享变量底层实现2.1 广播变量2.2 累加器 一、BlockManager 数据存储与管理机制 BlockManager 是整个 Spark 底层负责数据存储与管理的一个组件...
  • spark核心组件的核心

    2018-12-12 14:28:57
    Spark Streaming 的核心: Dstream这个数据结构有三块比较重要: 父依赖 生成RDD的时间间隔 一个生成RDD的function Dstream的概念:        ...
  • BlockManager是整个Spark底层负责数据存储与管理的一个组件,Driver和Executor的所有数据都由对应的BlockManager进行管理。 Driver上有BlockManagerMaster,负责对各个节点上的BlockManager内部管理的数据的元数据...
  • 1、Spark Streaming Spark Sreaming基于Spark Core实现了可扩展、高吞吐和容错的实时数据流处理。现在支持的数据源和处理后的结果存储如下图所示。 Spark Streaming将流式计算分解成一系列短小的批处理作业。...
  • BlockManager是整个Spark底层负责数据存储与管理的一个组件,Driver和Executor的所有数据都由对应的BlockManager进行管理。 Driver上有BlockManagerMaster,负责对各个节点上的BlockManager内部管理的数据的元数据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 732
精华内容 292
关键字:

spark核心组件