首页 > 其他 > 详细

02 Spark架构与运行流程

时间:2021-06-06 21:25:41      阅读:36      评论:0      收藏:0      [点我收藏+]

1. 为什么要引入Yarn和Spark。

Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。

有了YARN之后,下图所有的框架都可以跑在YARN集群之上,所有的集群管理都由YARN来负责,可以把YARN理解为:一个操作系统级别的资源管理和调度的框架。
可以在YARN之上跑各种不同的框架,只要它符合YARN的标准就行。这样做的好处,多种计算框架可以共享集群资源,按需分配,你需要多少资源,就取YARN上面申请多少资源,这样可以提升整个资源的利用率。这就是要把各种框架跑在YARN上面的根本原因。

技术分享图片

Spark 可以跑在很多集群上,比如跑在local上,跑在Standalone上,跑在Apache Mesos上,跑在Hadoop YARN上等等。不管你Spark跑在什么上面,它的代码都是一样的,区别只是–master的时候不一样。其中Spark on YARN是工作中或生产上用的非常多的一种运行模式。

2. Spark已打造出结构一体化、功能多样化的大数据生态系统,请简述Spark生态系统。

Spark拥有DAG执行引擎,支持在内存中对数据进行迭代计算

Spark不仅支持Scala编写应用程序,而且支持Java和Python等语言进行编写,特别是Scala是一种高效、可拓展的语言,能够用简洁的代码处理较为复杂的处理工作。

 

Spark生态圈即BDAS===》

技术分享图片

Spark具有很强的适应性,能够读取HDFS、Cassandra、HBase、S3和Techyon为持久层读写原生数据,能够以Mesos、YARN和自身携带的Standalone作为资源管理器调度job,来完成Spark应用程序的计算。

spark跟hadoop的比较:

Spark是在借鉴了MapReduce之上发展而来的,继承了其分布式并行计算的优点并改进了MapReduce明显的缺陷,具体如下:

首先,Spark把中间数据放到内存中,迭代运算效率高。MapReduce中计算结果需要落地,保存到磁盘上,这样势必会影响整体速度,而Spark支持DAG图的分布式并行计算的编程框架,减少了迭代过程中数据的落地,提高了处理效率。

其次,Spark容错性高。Spark引进了弹性分布式数据集RDD (Resilient Distributed Dataset) 的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据“血统”(即充许基于数据衍生过程)对它们进行重建。另外在RDD计算时可以通过CheckPoint来实现容错,而CheckPoint有两种方式:CheckPoint Data,和Logging The Updates,用户可以控制采用哪种方式来实现容错。

最后,Spark更加通用。不像Hadoop只提供了Map和Reduce两种操作,Spark提供的数据集操作类型有很多种,大致分为:Transformations和Actions两大类。Transformations包括Map、Filter、FlatMap、Sample、GroupByKey、ReduceByKey、Union、Join、Cogroup、MapValues、Sort和PartionBy等多种操作类型,同时还提供Count, Actions包括Collect、Reduce、Lookup和Save等操作。另外各个处理节点之间的通信模型不再像Hadoop只有Shuffle一种模式,用户可以命名、物化,控制中间结果的存储、分区等。

Spark支持多种分布式存储系统:HDFS和S3

还有

1.SparkSQL:

引入新的RDD类型SchemaRDD,可以像传统数据库定义表一样定义SchemaRDD。

内存列存储:SparkSQL的表数据在内存中存储不是采用原生态的JVM对象存储,而是采用内存列存储。

2.BlinkDB:交互式SQL查询系统,允许用户通过权衡数据精度来提升查询响应时间。

3.MLBase\MLlib:Spark系统中专注于机器学习的组件,目标是机器学习门槛更低。

MLBase的核心是其优化器(ML Optimizer),它可以把声明式的任务转化成复杂的学习计划,最终产出最优的模型和计算结构。

与weka和Mahout不同

a.MLBase基于spark,分布式内存计算,weka单机,Mahout使用MapReduce。

b.MLBase是自动化处理,weka和mahout需要使用者具备机器学习技能,来选择自己想要的算法和参数做处理。

c.MLBase提供了不同抽象程序的接口,可以由用户通过该接口实现算法的扩展。

4.GraphX

Spark中用于图和图并行计算的API,可以认为是GraphLab和Pregel在Spark上的重写及优化。

3. 用图文描述你所理解的Spark运行架构,运行流程。

技术分享图片

 

 

基本概念:

Application:用户编写的Spark应用程序。
Driver:Spark中的Driver即运行上述Application的main函数并创建SparkContext,创建SparkContext的目的是为了准备Spark应用程序的运行环境,在Spark中有SparkContext负责与ClusterManager通信,进行资源申请、任务的分配和监控等,当Executor部分运行完毕后,Driver同时负责将SparkContext关闭。
Executor:是运行在工作节点(WorkerNode)的一个进程,负责运行Task。
RDD:弹性分布式数据集,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型。
DAG:有向无环图,反映RDD之间的依赖关系。
Task:运行在Executor上的工作单元。
Job:一个Job包含多个RDD及作用于相应RDD上的各种操作。
Stage:是Job的基本调度单位,一个Job会分为多组Task,每组Task被称为Stage,或者也被称为TaskSet,代表一组关联的,相互之间没有Shuffle依赖关系的任务组成的任务集。
Cluter Manager:指的是在集群上获取资源的外部服务。目前有三种类型
1) Standalon : spark原生的资源管理,由Master负责资源的分配
2) Apache Mesos:与hadoop MR兼容性良好的一种资源调度框架
3) Hadoop Yarn: 主要是指Yarn中的ResourceManager
一个Application由一个Driver和若干个Job构成,一个Job由多个Stage构成,一个Stage由多个没有Shuffle关系的Task组成。

当执行一个Application时,Driver会向集群管理器申请资源,启动Executor,并向Executor发送应用程序代码和文件,然后在Executor上执行Task,运行结束后,执行结果会返回给Driver,或者写到HDFS或者其它数据库中。

与Hadoop MapReduce计算框架相比,Spark所采用的Executor有两个优点:

1.利用多线程来执行具体的任务减少任务的启动开销;
2.Executor中有一个BlockManager存储模块,会将内存和磁盘共同作为存储设备,有效减少IO开销;

Spark运行基本流程:

 

 技术分享图片

 

 

1.为应用构建起基本的运行环境,即由Driver创建一个SparkContext进行资源的申请、任务的分配和监控
2.资源管理器为Executor分配资源,并启动Executor进程
3.SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAGScheduler解析成Stage,然后把一个个TaskSet提交给底层调度器TaskScheduler处理。
4.Executor向SparkContext申请Task,TaskScheduler将Task发放给Executor运行并提供应用程序代码。
Task在Executor上运行把执行结果反馈给TaskScheduler,然后反馈给DAGScheduler,运行完毕后写入数据并释放所有资源。


Spark运行架构特点:

1.每个Application都有自己专属的Executor进程,并且该进程在Application运行期间一直驻留。Executor进程以多线程的方式运行Task。
Spark运行过程与资源管理器无关,只要能够获取Executor进程并保存通信即可。
3.Task采用数据本地性和推测执行等优化机制。

02 Spark架构与运行流程

原文:https://www.cnblogs.com/hhs7/p/14856228.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!