zoukankan      html  css  js  c++  java
  • Spark运行架构

    Spark运行架构

    基本概念

    • RDD:分布式内存的抽象概念,高度受限的共享内存模型
    • DAG:有向无环图,反应RDD的依赖关系
    • Executot:运行在工作节点的一个进程,负责运行任务,存储数据
    • 任务Task:运行在Executor上的工作单元
    • 作业:一个作业包含多个RDD及作用于相应RDD的操作
    • 阶段Stage:作业调度的基本单位,以宽依赖、窄依赖划分。

    架构设计

    Spark的运行架构包括集群资源管理器(Cluster Manager)、运行作业任务的工作节点(Work Node)、每个应用的任务控制节点(Driver)和每个工作节点上负责具体任务的进程(Executor)

    其中,Executor使用多线程来执行具体任务,减少任务的启动开销;其还有一个BlockManager存储模块,将内存和磁盘共同作为存储设备,内存作为默认存储,不够时,写入磁盘。因此减少了IO开销。

    Spark运行基本流程

    1. 首先为应用构建基本运行环境,由任务控制节点Driver创建一个Spark Context对象,由该对象与资源管理器通信,申请资源和任务的调配
    2. 资源管理器为Executor分配资源,启动进程,Executor随时和资源管理器保持通信,利用心跳
    3. Spark Context根据RDD的依赖关系构建相应的DAG图,将DAG图提交给DAG调度器(DAG Scheduler),其将DAG划分成多个Stage,把每个任务集提交给底层的Task Scheduler处理。同时,Spark Context把应用代码发给Executor
    4. 任务在Executor上运行,把结果返回任务调度器再返回DAG调度器,写入数据后释放资源

    RDD的设计与运行原理

    一个RDD就是一个分布式对象集合,只读的分区记录集合。每个分区就是一个数据记录片段。

    对RDD的操作由转换操作(map join groupby)和行动操作(count collect)组成

    行动操作接收一个RDD,但返回结果不是RDD。同时RDD只适合粗粒度操作。RDD采用惰性机制,转换并不会立刻执行,只有行动才会发生计算。

    采用惰性调用机制,RDD操作就可以实现管道化,避免数据同步的等待。

    RDD有高容错性,不通过数据冗余来达到容错。而且RDD只读,避免修改。存放的数据是Java对象,避免了不必要的对象序列化和反序列化开销。Hadoop中经常要进行IO磁盘开销,序列化和反序列化开销也大。

    Spark根据DAG的RDD依赖关系划分阶段,每个RDD操作都是forkjoin操作,实行流水线优化后,减少中间结果join,提高了性能。

  • 相关阅读:
    自定义key解决zabbix端口监听取值不准确的问题
    Redis——主从同步原理
    Leetcode 24——Swap Nodes in Pairs
    Struts2——第一个helloworld页面
    Leetcode 15——3Sum
    Leetcode 27——Remove Element
    C#简单入门
    Leetcode 12——Integer to Roman
    Leetcode 6——ZigZag Conversion
    eclipse如何debug调试jdk源码(任何源码)并显示局部变量
  • 原文地址:https://www.cnblogs.com/chenshaowei/p/12378443.html
Copyright © 2011-2022 走看看