Spark技术架构,概念及运行过程

1.Spark技术架构

  • Spark分布式内存计算平台采用的是Master-Slave架构,集群中含有Master进程的节点ClusterManager即为这里的Master,而Slave则是集群中的Work进程节点。
  • Master作为整个集群的控制器,负责整个集群的正常运行,Worker则相当于是计算节点,接收主节点的命令,运行Driver或Excutor,并进行状态汇报;Executor运行在Worker节点。
  • 在Yarn运行框架下,由Yarn的ResourceManager担任Master,Excutor则运行在NodeManager的Container中。
  • Spark的提交运行流程:Spark作业在提交运行时,会指定master和deploy-mode两个参数,共同决定了是standalone还是yarn/mesos资源管理托管模式。
  • master参数包括:spark://host:port, mesos://host:port, yarn, yarn-cluster,yarn-client, local,默认为local[*]
  • deploy-mode参数取值为client和cluster,分别意味着driver程序运行在哪里,默认为client
  • master取值local[n]:单机运行 spark://xxx在指定集群上运行 yarn则为运行在yarn集群中,yarn-cluster和yarn-client在spark2.0已经不推荐使用了,需要通过master和deploy-mode共同指定
    // Set the cluster manager
    val clusterManager: Int = args.master match {
      case "yarn" => YARN
      //yarn-client和yarn-cluster已不推荐使用
      case "yarn-client" | "yarn-cluster" =>
        printWarning(s"Master ${args.master} is deprecated since 2.0." +
          " Please use master \"yarn\" with specified deploy mode instead.")
      //当前真要用了其实还是当做YARN来对待
        YARN
     //spark://xxx 对应到STANDALONE
      case m if m.startsWith("spark") => STANDALONE
      case m if m.startsWith("mesos") => MESOS
      case m if m.startsWith("local") => LOCAL
      case _ =>
        printErrorAndExit("Master must either be yarn or start with spark, mesos, local")
        -1
    }

    // Set the deploy mode; default is client mode
    var deployMode: Int = args.deployMode match {
      case "client" | null => CLIENT
      case "cluster" => CLUSTER
      case _ => printErrorAndExit("Deploy mode must be either client or cluster"); -1
    }
  • Spark的任务流程:
Created with Raphaël 2.1.2 Client作为客户端提交应用 [Master]找到一个Worker启动Driver(或者本地启动Driver) [Driver]向Master申请资源,之后将应用转化为RDD Graph [DAGScheduler]将RDD Graph转化为Stage后提交给TaskScheduler [TaskScheduler]提交给Executor执行 结束

2.Spark的基本概念

2.1 Application

用户写的spark程序,提交后为一个App,一个App内仅有一个SparkContext,此即App的Driver,驱动着整个App的执行。

2.2 Job

一个App内有多个Action算子,这些action算子触发了RDD/Dataset的转换,每个action对应着一个Job

2.3 Stage和DAGSchedule

Job的执行过程中根据shuffle的不同,分成了宽依赖和窄依赖,DAGSchedule据此讲Job分成了不同的Stage,并将其提交给TaskSchedule执行

2.4 Task和TaskSchedule

Task为具体执行任务的基本单位,被TaskSchedule分发到excutor上执行

2.5 BlockManager

管理App运行过程中的中间数据,如内存磁盘等,cache/persist等的管理均通过BlockManager进行维护

2.6 宽依赖与窄依赖

RDD/DF等内存块均是只读的,RDD的生成(除最初创建)靠的也是老RDD的转换,所以RDD间通过这些依赖产生了关系。如果一个父RDD的每个分区只被子RDD的一个分区依赖,那这是窄依赖,相反如果子RDD的任意个分区的生成都依赖父RDD的每个分区,则为宽依赖。显而易见,宽依赖影响很大。而在连续的多个窄依赖间因都是在同一个分区内,所以可连续多次处理而不用写磁盘提高效率。DAG的Stage划分也据此讲一个Job划分为了多个Stage,保证在每个Stage内是窄依赖。

3. 运行过程

3.1 Standalone

  1. 构建SparkApplication的运行环境(启动SparkContext)
  2. SparkContext向资源管理器(Standalone的Master)申请运行Executor资源,并启动StandaloneExecutorBackend
  3. Executor向SparkContext注册
  4. SparkContext启动应用程序DAG调度、Stage划分,TaskSet生成
  5. TaskScheduler调度Taskset,将task发放给Executor运行。
  6. Task在Executor上运行,运行完毕释放所有资源。
    这里写图片描述

3.2 yarn cluster

图中已经很清楚了
yarn-cluster mode

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spark内部运行原理是,它通过一系列的步骤来处理数据,包括读取数据、转换数据、运行计算任务和存储结果。它使用一个叫做RDD(可分配数据集)的抽象来表示数据,这样可以更容易地处理数据。它还使用一个叫做Spark Core的库来处理数据,这个库可以分发任务到多个节点,并且可以让多个节点协同工作来处理数据。 ### 回答2: Spark是一个快速、通用的大数据处理引擎,它采用了分布式计算的方式来处理大规模数据集。Spark的内部运行原理可以简单概括为以下几个关键点: 1. 弹性分布式数据集(RDD):Spark的核心概念是弹性分布式数据集(RDD),它是一个可分区、可并行处理的数据集合。Spark将数据分成多个RDD,可以在集群的多个节点上自动并行处理。 2. DAG调度:Spark将用户的操作转化为有向无环图(DAG),以表示计算过程中的依赖关系。Spark通过DAG调度,将整个计算流程划分为多个阶段(Stage),以实现任务的并行处理和调度。 3. 分布式数据处理:Spark可以将数据集合分成多个分区,并将每个分区的计算任务分发到不同的节点上并行执行。通过分区级别的并行处理,Spark能够高效地处理大规模数据集,并实现性能上的显著提升。 4. 内存计算:Spark将数据存储在内存中,以避免频繁的磁盘读写操作。通过充分利用内存计算能力,Spark能够在处理数据时提供更高的计算速度和性能。 5. 数据流水线:Spark将数据处理过程划分为多个阶段,并通过内存中的缓存和数据流水线技术,减少中间结果的计算和存储开销。这种方式能够提高计算效率,并减少数据处理的延迟。 总之,Spark的内部运行原理包括了RDD的分布式计算模型、DAG调度、分区级别的并行处理、内存计算和数据流水线等关键技术。通过这些技术的有机结合,Spark能够高效地处理大规模数据集,并提供快速的数据分析和处理能力。 ### 回答3: Spark内部运行原理主要包括以下几个方面。 首先,Spark运行的核心是Resilient Distributed Dataset(RDD),它是一个可容错、可并行处理的数据集合。RDD可以通过数据源创建,或者通过对已有RDD的转换操作得到。RDD的分区决定了数据的并行度,每个分区都存储着数据的一个子集。 其次,Spark运行时采用了分布式的集群架构。集群由一个主节点(即Driver)和多个从节点(即Executors)组成。主节点负责任务的调度和分发,从节点负责具体的任务执行。主节点将任务分成多个Stage,每个Stage包含一系列的任务,并通过DAG表示Stage之间的依赖关系。 然后,Spark通过一种称为Transformations的操作来对RDD进行转换。Transformations分为窄依赖和宽依赖。窄依赖意味着每个父RDD的分区仅有一个子RDD的分区依赖,这可以使得数据传输更快。而宽依赖意味着每个父RDD的分区可能有多个子RDD的分区依赖,这会引入shuffle操作来重新分区,增加了计算和数据传输的开销。 最后,Spark的计算模型是基于弹性分布式数据集的。Spark将计算过程划分为一系列的Stage,并将每个Stage划分为多个Task。Task在Executor上并行执行,每个Task会处理一个或多个RDD的分区。计算结果会被缓存在内存中,可以被后续的计算使用,从而提高了计算效率。 综上所述,Spark内部运行原理主要包括RDD、集群架构、Transformations、计算模型等方面。通过这些机制,Spark实现了高效的分布式计算和数据处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值