美文网首页
Spark总览

Spark总览

作者: hipeer | 来源:发表于2018-10-13 16:19 被阅读0次

    什么是Spark

    Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark扩展了广泛使用的MapReduce计算模型,而且高效的支持更多计算模式,包括批处理,迭代算法,交互式查询,流处理。Spark拥有Hadoop MapReduce所具有的优点,但不同于MapReduce的是,Spark是基于内存的迭代式计算,Job的中间结果保存在内存中,从而在计算时减少了大量的IO,因此Spark比MapReduce更快。

    Spark的特点

    • 快速
      与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上。Spark实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流。

    • 易用
      Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。而且Spark支持交互式的Python和Scala的shell,可以非常方便地在这些shell中使用Spark集群来验证解决问题的方法。

    • 通用
      Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。

    • 任何平台运行
      Spark可以非常方便地与其他的开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassandra等。

    Spark生态系统

    Spark Stack.png
    • Spark Core
      Spark Core是Spark的核心计算引擎。它有着速度快和通用的特点,并且实现了Spark的基本功能,包含任务调度,内存管理,错误恢复,与存储交互等模块。Spark Core的组件是RDD,并提供了创建和操作RDD的多个API。

    • Spark SQL
      Spark SQL是Spark用来操作结构化数据的一个组件。它为Spark提供了一个SQL接口,使用户可以通过SQL或Hive的HQL来查询数据。此外,Spark SQL还支持开发者将SQL和传统的RDD编程的数据操作方式相结合,不论使用Python,Java还是Scala,开发者都可以在单个应用中同时使用SQL和复杂的数据分析。

    • Spark Streaming
      Spark Streaming是Spark提供的对实时数据进行流式处理的一个组件。Spark Streaming提供了用来操作数据流的API,并且与Spark Core中的RDD API高度对应。同时它还具有大数据量,容错性,可扩充性等特点。

    • MLlib
      MLlib是一个可扩充的Spark机器学习库。MLlib提供了很多常见的机器学习算法,包括分类回归,聚类,协同过滤等,还提供了模型评估,数据导入等额外的支持功能。

    • GraphX
      GraphX是Spark用于分布式图形处理的一个组件,它可以进行图的并行计算。与Spark SQL和Spark Streaming类似,GraphX也扩展了Spark的RDD API,能用来创建一个顶点和边都包含任意属性的有向图。GraphX还支持针对图的各种操作及一些常用算法。

    • 集群管理器
      就底层而言,Spark设计为可以高效地在一个节点到数千个节点之间伸缩计算。为了实现这样的需求,同时获得大量的灵活性,Spark支持在各种集群资源管理器(Cluster Manager)上运行,包括Hadoop YARN,Apache Mesos,以及Spark自带的一个简易调度器,叫做独立调度器。

    总结:Spark共有5大组件:Spark Core, Spark SQL,Spark Streaming,MLlib,GraphX。其中Spark Core是Spark的核心,它是一个以RDD为基础的内存计算框架,而其他的四个组件都运行在Spark Core之上。

    Spark 架构

    Spark Architecture.png
    • Application

      基于Spark的用户程序。由集群上的Driver program和Executor组成(Driver以及不同的Executor可能在不同的物理机上)。

    • Driver program
      运行main函数并且创建SparkContext的程序。

    • Cluster manager

      获取集群资源的外部服务(例如,standalone manager、Mesos、YARN)。

    • Worker node
      可以在集群中运行应用程序代码的任何节点(在上面启动Executor)

    • Executor
      A process launched for an application on a worker node, that runs tasks and keeps data in memory or disk storage across them. Each application has its own executors.
      在工作节点上为应用程序启动的进程,该进程运行任务并跨任务在内存或磁盘存储中保存数据。每个应用程序都有自己的执行程序

    • Task
      被送到Executor执行的工作单元,和Hadoop MapReduce中的MapTask和ReduceTask一样,是运行Application的基本单位。多个Task组成一个Stage,而Task的调度和管理由TaskScheduler负责。

    • Job
      包含很多Task的并行计算,一个Action的计算会生成一个Job。用户提交的Job会提交给DAGScheduler,Job会被分解成Stage和Task。

    • Stage
      每个Job的Task被拆分成很多组Task, 作为一个TaskSet,命名为Stage。Stage的调度和划分由DAGScheduler负责。Stage又分为Shuffle Map Stage和Result Stage两种。Stage的边界就在发生Shuffle的地方。

    Spark运行机制


    每个Spark应用都由一个驱动器程序(drive program)来发起集群上的各种并行操作。驱动器程序包含应用的main函数,驱动器负责创建SparkContext,SparkContext可以与不同种类的集群资源管理器(Cluster Manager),例如Hadoop YARN,Mesos进行通信,获取到集群进行所需的资源后,SparkContext将得到集群中工作节点(Worker Node)上对应的Executor(不同的Spark程序有不同的Executor,他们之间是相互独立的进程,Executor为应用程序提供分布式计算以及数据存储功能),之后SparkContext将应用程序代码发送到各Executor,最后将任务(Task)分配给executors执行

    • ClusterManager
      在Standalone模式中即为Master节点(主节点),控制整个集群,监控Worker.在YARN中为ResourceManager

    • Worker
      从节点,负责控制计算节点,启动Executor或Driver。在YARN模式中为NodeManager,负责计算节点的控制。

    • Driver
      运行Application的main()函数并创建SparkContect。

    • Executor
      执行器,在worker node上执行任务的组件、用于启动线程池运行任务。每个Application拥有独立的一组Executor。

    • SparkContext
      整个应用的上下文,控制应用的生命周期。

    • RDD
      Spark的计算单元,一组RDD可形成执行的有向无环图RDD Graph。

    • DAG Scheduler
      根据作业(Job)构建基于Stage的DAG,并提交Stage给TaskScheduler。

    • TaskScheduler
      将任务(Task)分发给Executor。

    • SparkEnv
      线程级别的上下文,存储运行时的重要组件的引用。
      SparkEnv内构建并包含如下一些重要组件的引用。

      1、MapOutPutTracker:负责Shuffle元信息的存储。
      2、BroadcastManager:负责广播变量的控制与元信息的存储。
      3、BlockManager:负责存储管理、创建和查找快。
      4、MetricsSystem:监控运行时性能指标信息。
      5、SparkConf:负责存储配置信息。

    整体流程:

    1、Client提交应用。
    2、Master找到一个Worker启动Driver
    3、Driver向Master或者资源管理器申请资源,之后将应用转化为RDD Graph
    4、再由DAGSchedule将RDD Graph转化为Stage的有向无环图提交给TaskSchedule。
    5、再由TaskSchedule提交任务给Executor执行。
    6、其它组件协同工作,确保整个应用顺利执行。

    相关文章

      网友评论

          本文标题:Spark总览

          本文链接:https://www.haomeiwen.com/subject/dbojaftx.html