zoukankan      html  css  js  c++  java
  • 四、spark集群架构

    spark集群架构官方文档:http://spark.apache.org/docs/latest/cluster-overview.html

    集群架构

    我们先看这张图

    这张图把spark架构拆分成了两块内容:

    1)spark应用程序:即左边的DriverProgram这块;

    2)spark 集群:即右边的ClusterManager和另外两个Worker Node;

    这样的结构,我们大概可以猜测一下spark是怎么工作的。首先我们会编写一个spark程序,然后启动spark集群,这个spark程序需要和spark集群交互并让spark集群运行计算并最终产生结果。

    下面,分别看看什么是spark程序,什么是spark集群

    什么是spark应用程序?

    spark应用程序指的就是我们编写程序代码,我们的程序代码会包含一个驱动程序Driver,有了这个Driver它会调用程序的main方法去启动我们的程序,并创建一个SparkContext。

    当我们的sparkContext创建完成之后,我们的程序就可以通过sparkContext和Spark集群进行交互了。

    如:Driver -> 调用main() -> 创建sparkContext -> 与spark集群交互

    什么是spark集群?

    spark集群分为三种运行模式:standalone、yarn、mesos

    为了排除干扰因素,我们这里只以standalone来理解spark集群

    我们先看上图右侧部分,spark集群分为两部分:Cluster Manager和两个WorkNode。这个结构就是一个很明显的master-slaver(主从)的结构,由master来负责资源管理,而slaver来负责执行相应的任务。

    sparkContext在与Cluster Manager建立连接以后就会向Cluster Manager申请资源,之后sparkContext把程序代码解析成一些task,并把这些task分发给WorkNode让WorkNode去执行task。直到所有的task执行完毕以后,sparkContext会注销,并释放资源。

    如:sparkContext -> 连接ClusterManager -> 申请资源 -> 解析成多个task -> 分发给workNode -> 执行task -> 执行完毕释放资源

    总结

    当前Driver启动以后,会去执行应用程序的main方法,并构建sparkConext对象。sparkContext与ClusterManager连接交互,并且sparkContext将程序代码解析成多个task,将task发送给workNode,workNode又会把task丢给任务执行器executor去执行,executor会启动线程池开始执行task。当所有的task执行完毕,spark向ClusterManager注销,并释放资源。

    下面是spark集群架构的一些概念:

    Application 用户编程的spark程序. 包含一个Driver驱动程序和executor要执行的代码
    Application jar 一个包含spark应用程序的jar包
    Driver program 驱动程序,包含在application当中,用于执行main方法和创建sparkContext。注意:Driver可以运行在Client中,也可以运行在master中。例如,当使用spark-shell提交spark job的时候Driver运行在master上,当使用spark-submit提交或者IDEA开发的时候Driver运行在Client上
    Cluster manager spark集群,主要有三种运行模式在standalone(默认)、yarn、mesos,你也可以理解为后两者是基于standalone的
    Deploy mode 部署模式,分为单机部署、伪分布式、完全分布式
    Worker node spark的集群的从节点,用于执行任务
    Executor 任务的执行器,存在于workNode当中
    Task application的代码被解析成许多task,并发送给executor去执行
    Job 当碰到action操作的时候就会催生job,job中包含着多个task并行计算
    Stage task的组
    Client     客户端程序,用于提交spark job

    这里的job、task、stage你可能会产生疑惑,它们具体是什么东西

    spark的应用程序包含着用户编写的可执行代码,那么这些程序代码会被sparkContext解析成一个叫有向无环图(dag)的结构(这里我们不讨论dag,只需要知道它是一种结构)。

    而后,当碰到一个action这种代码操作的时候,就会根据dag结构去催生job。这个job包含着许多task,而这些混乱的task需要被组织起来,task的组就是stage。

    如:task -> 分组 -> stage -> 组成 -> job 

  • 相关阅读:
    Solr与Lucene的区别
    查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004)
    按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示: 学生ID,,数据库,企业管理,英语,有效课程数,有效平均分
    按各科平均成绩从低到高和及格率的百分数从高到低顺序
    设计模式
    查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分
    什么是Session共享?请举出使用场景
    vue中监听路由参数变化
    获取DOM元素到页面顶部的距离,亲测有效版本(转载)
    css页面滚动条出现时防止页面跳动的方法
  • 原文地址:https://www.cnblogs.com/lay2017/p/10048029.html
Copyright © 2011-2022 走看看