Spark架构基本介绍

简介

  • Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。
  • Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架

优点

  • 快速:spark有先进的DAG执行引擎,支持循环数据流和内存计算;spark在内存中的执行速度是MR的100倍,在磁盘上的运行速度是MR的10倍
  • 易用:SPARK支持使用Java/Scala/Python/Sql语言快速编写应用,提供统一API,使得 编写应用程序更容易。编写应用程序更容易
  • 通用:Spark提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件
  • 运行模式多样:可运行于独立的集群模式中,可运行于Hadoop中,也可运行于Amazon EC2等云环境中,并且可以访问HDFS/Cassandra/HBase/Hive等多种数据源

生态系统

imgTemp.png
  • 第一层:各种文件存储系统
  • 第二层:部署模式(详细信息下面介绍)
  • 第三层:spark core是spark的核心组件,其操作对象是RDD(弹性分布式数据集),可以说是spark中的离线计算框架
  • 第四层:处理流式数据的spark streaming;执行sql的sparksql;用于机器学习的MLlib;用于图计算的GraphX

术语介绍

  • Application: Spark Application指的是用户编写的Spark应用程序,包含了一个Driver功能的代码和分布在集群中多个节点上运行的Executor代码
  • Master:主控节点,负责接收Client提交的作业,管理worker,并命令worker启动Driver和Executor
  • Worker:集群中任何可以运行Application代码的节点,类似于YARN中的NodeManager节点。在Standalone模式中指的就是通过Slave文件配置的Worker节点
  • Driver:一个spark作业运行时包括一个driver进程,负责DAG图的构成,Stage的划分、Task的管理
  • Executor: Application运行在Worker节点上的一个进程,该进程负责运行Task,并且负责将数据存在 内存或者磁盘上,每个Apptication都有各自独立的一批 Executor
  • Job: 包含多个Task组成的并行计算,往往由Spark Action触发生成, 一个Application中往往会产生多个Job
  • Stage: 每个Job会被拆分成多组Task, 作为一个TaskSet, 其名称为Stage,Stage的划分和调度是有DAGScheduler来负责的,Stage有非最终的Stage(Shuffle Map Stage)和最终的Stage(Result Stage)两种,Stage的边界就是发生shuffle的地方
  • Task: 被送到某个Executor上的工作单元,但hadoopMR中的MapTask和ReduceTask概念一样,是运行Application的基本单位,多个Task组成一个Stage,而Task的调度和管理等是由TaskScheduler负责
  • Local模式:本地模式部署在单机,主要用于测试或实验;最简单的运行模式,所有进程都运行在一台机器的 JVM 中;本地模式用单机的多个线程来模拟Spark分布式计算,通常用来验证开发出来的应用程序逻辑上有没有问题
  • cluster模式:
    • standalone:Spark可以通过部署与Yarn的架构类似的框架来提供自己的集群模式。该集群模式的架构设计与HDFS和Yarn大致相同,都是由一个主节点多个从节点组成;主:master,从:worker
    • spark on yarn:yarn-cluster是基于yarn集群进行调度管理的,yarn集群上有ResourceManager(RM)和NodeManager(NM)两个角色。在YARN中,每个Application实例都有一个Application Master进程,它是Application启动的第一个容器。它负责和ResourceManager打交道,并请求资源。获取资源之后告诉NodeManager为其启动container
    • yarn-client与yarn-cluster的区别:其实就是Application Master(AM)进程的区别(即Driver运行在哪)
      • yarn-client模式下,driver运行在客户端,也就是提交作业的机器上;ApplicationMaster仅仅向YARN请求executor,client会和请求的container通信来调度他们工作,也就是说Client不能离开
      • yarn-cluster模式下,driver运行在集群的AM中,它负责向YARN申请资源,并监督作业的运行状况;作业提交完就可以关掉Client,作业会继续在YARN上运行

任务提交流程

  • standlone模式(http://spark.apache.org/docs/latest/spark-standalone.html):

    • 6264117-7e695db53e63fa44.png
    • 1.spark-submit 提交任务给 Master

    • 2.Master 收到任务请求后通过 LaunchDriver 向 Worker 请求启动 Driver

    • 3.Worker 收到请求后启动 Driver

    • 4.Driver 启动后向 Master 注册(用户App信息)。

    • 5.Master 收到 App 信息后根据资源的情况向 Worker 发送 launchExecutor 启动 Excutor

    • 6.Worker 收到 Master 的请求后启动相应的 Excutor

    • 7.Excutor 启动后负责与 Driver 通信, 执行相关任务

  • yarn-cluster模式(http://spark.apache.org/docs/latest/running-on-yarn.html):

    • 6264117-9773993abf0e2521.png
    • 1.由client向RM提交请求,并上传jar到HDFS上,这期间包括四个步骤:
      • a).连接到RM
      • b).从 RM ASM(Applications Manager)中获得metric、queue和resource等信息
      • c).上传 app jar and spark-assembly jar
      • d).设置运行环境和container上下文(launch-container.sh等脚本)
    • 2.ASM 向 Scheduler 申请空闲 container
    • 3.Scheduler 向 ASM 返回空闲 container 信息(NM 等)
    • 4.RM(ASM)根据返回信息向 NM 申请资源
    • 5.NM 分配创建一个container 并创建Spark Application Master(AM),此时 AM 上运行的是 Spark Driver(每个SparkContext都有一个 AM)
    • 6.AM启动后,和RM(ASM)通讯,请求根据任务信息向RM(ASM)申请 container 来启动 executor
    • 7.RM(ASM)将申请到的资源信息返回给AM
    • 8.AM 根据返回的资源信息区请求对应的 NM 分配 container 来启动 executor
    • 9.NM 收到请求会启动相应的 container 并启动 executor
    • 10.executor 启动成后 反向向 AM 注册
    • 11.executor 和 AM(Driver) 交互 完成任务
    • 12.后续的DAGScheduler、TaskScheduler、Shuffle等操作都是和standaloe一样
    • 13.等到所有的任务执行完毕后,AM 向 ASM 取消注册并释放资源
  • yarn-client模式(http://spark.apache.org/docs/latest/running-on-yarn.html):
    • 6264117-8a0b34d10b5b7ae0.png
    • 在yarn-client模式下,Driver运行在Client上,通过ApplicationMaster向RM获取资源。本地Driver负责与所有的executor container进行交互,并将最后的结果汇总。整体的过程与yarn-cluster类似。
    • 不同点在于 Driver 是运行在本地客户端,它的 AM 只是作为一个 Executor 启动器,并没有 Driver 进程。
    • 而且 Executor启动后是与 Client 端的 Driver 进行交互的,所以 Client 如果挂了 任务也就挂了。

高可用性(High Available)

  • Spark同样存在单点故障问题,官方说明中的两种HA方式:
    • Standby Masters with ZooKeeper:


      4797877-affe70f7ded9c18b.png
      • 在集群中启动多个Master节点,连接到ZK的实例中,利用ZK来存储状态和进行Leader选举
      • 只有一个Master节点处于Active状态,其他都是Standby状态
      • 一旦ZK监听不到当前的Leader的心跳,另一个Standby Master就会被选举为Leader,然后恢复调度,继续任务
      • 整个恢复过程(从主节点第一次down掉开始)应在1到2分钟之间完成
      • 请注意,此延迟仅影响对新应用程序的调度,主节点故障切换期间已经运行的应用程序不受影响
    • Single-Node Recovery with Local File System:
      • ZooKeeper is the best way to go for production-level high availability, but if you just want to be able to restart the Master if it goes down, FILESYSTEM mode can take care of it
      • In order to enable this recovery mode, you can set SPARK_DAEMON_JAVA_OPTS in spark-env using this configuration:
System property Meaning Since Version
spark.deploy.recoveryMode Set to FILESYSTEM to enable single-node recovery mode (default: NONE). 0.8.1
spark.deploy.recoveryDirectory The directory in which Spark will store recovery state, accessible from the Master's perspective. 0.8.1

后记

  • 在yarn-client、yarn-cluster提交模式中,可以不启动Spark集群,因为相关的jvm环境有yarn管理(启动、结束等)
  • standalone 提交模式中 Spark集群一定要启动,因为需要依赖worker、Master进行任务的启动、调度等。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342