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

  1. Spark分布式内存计算平台采用的是Master-Slave架构,集群中含有Master进程的节点ClusterManager即为这里的Master,而Slave则是集群中的Work进程节点。

  2. Master作为整个集群的控制器,负责整个集群的正常运行,Worker则相当于是计算节点,接收主节点的命令,运行Driver或Excutor,并进行状态汇报;Executor运行在Worker节点。

  3. 在Yarn运行框架下,由Yarn的ResourceManager担任Master,Excutor则运行在NodeManager的Container中。
    Spark的提交运行流程:Spark作业在提交运行时,会指定master和deploy-mode两个参数,共同决定了是standalone还是yarn/mesos资源管理托管模式。

  4. 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内是窄依赖。

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

在这里插入图片描述

3.2 yarn cluster
图中已经很清楚了
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值