《Spark Streaming实时流式大数据处理实战》 ——2.2 Spark运行模式

网友投稿 794 2022-05-29

2.2  Spark运行模式

Spark提供了4种模式,分别是本地模式、Standalone模式、Spark On Yarn模式及Spark On Mesos模式。其中,本地模式包含了单机模式和单机伪集群模式,用于基本的调试与实验,而另外3种模式都是基于不同资源调配的集群模式,一般是生产环境中搭建的分布式集群。

为了更清楚地讲解Spark中不同的运行模式,我们先对Spark集群的运作方式从整体上进行一个介绍,其中需要清楚几个关键的概念,如图2.2所示。

图2.2中给出了应用程序在Spark集群中运行时涉及的相关概念。

* Application:提交到Spark集群的应用程序,简称App。

* Driver:执行应用程序中创建SparkContext的main函数的进程,一般在集群的任何节点向集群提交应用程序,就可以将该节点称做Driver节点。

* Cluster manager:即集群管理器,作为Spark集群的“神经中枢”,统筹管理Spark集群的各种资源,包括CPU和内存等,并分配不同服务所需的资源(例如standalone manager即Master、Mesos和Yarn)。

* Master节点:即部署Cluster manager的节点,是一个物理层的概念。

* Worker:任何在集群中运行应用程序的节点,其接收集群管理器的调度安排,为应用程序分配必需的资源,生成Executor,起到桥梁作用。

* Slave节点:即部署Worker的机器节点,每个Slave节点可以有多个Worker进程,是一个物理层的概念。

* Executor:表示应用在Worker节点中进行实际计算的继承,进程会接收切分好的Task任务,并将结果缓存在节点内存和磁盘上。

* Task:被分配到各个Executor的单位工作内容,它是Spark中的最小执行单位,一般来说有多少个Paritition(物理层面的概念,即分支可以理解为将数据划分成不同部分并行处理),就会有多少个Task,每个Task只会处理单一分支上的数据。

* Job:由多个Task的并行计算部分,一般Spark中的action操作(如save、collect,下一章会进一步说明),会生成一个Job。

* Stage:是Job的组成单位,一个Job会切分成多个Stage,Stage彼此之间相互依赖顺序执行,而每个Stage是多个Task的集合,类似map和reduce stage。

图2.2  Spark的不同组件

下面用一个例子来解释Spark应用的过程,以及其中概念的对应关系。假设我们需要做如下所述的事情,如图2.3所示(将在第3章介绍RDD的各类操作,然后在3.8节用一个小实例实现这个例子,读者在学习第3章后可以动手实践该例子)。

(1)将一个包含人名和地址的文件加载到RDD1中。

(2)将一个包含人名和电话的文件加载到RDD2中。

(3)通过name来拼接(join)RDD1和RDD2,生成RDD3。

(4)在RDD3上做映射(map),给每个人生成一个HTML展示卡作为RDD4。

(5)将RDD4保存到文件中。

(6)在RDD1上做映射(map),从每个地址中提取邮编,结果生成RDD5。

(7)在RDD5上做聚合,计算出每个邮编地区中生活的人数,结果生成RDD6。

(8)收集(collect)RDD6,并且将这些统计结果输出到stdout。

图2.3  以概念解释例子

图2.3中第①、②、⑤、⑧步涉及输入和输出操作,其余是对RDD的操作(数字①~⑧对应上面所述的8个步骤)。以这个例子为参考,接下来解释Driver program、Job和Stage这几个概念。

* Driver program是全部的代码,运行所有的8个步骤。

* 第⑤步中的save和第⑧步中的collect都会产生Spark Job。Spark中每个action对应着一个Job,注意Transformation不会产生Job。

* 其他几步(①、②、③、④、⑥、⑦)被Spark组织成多个Stages,每个Job则是一些Stage序列的结果。对于一些简单的场景,一个Job可以只有一个Stage。但是对于数据重分区的需求(比如第③步中的join),或者任何破坏数据局域性的事件,通常会产生更多的Stage。可以将Stage看作能够产生中间结果的计算,这种计算可以被持久化,比如可以把RDD1持久化来避免重复计算。

以上3个概念解释了某个程序运行时被拆分的逻辑。相比之下,Task是一个特定的数据片段,在指定的Executor上运行,并且可以跨越某个特定的Stage。

2.2.1  本地模式

该模式又可以称为单机模式,是Spark为开发人员提供的单机测试环境,利用单机的多个线程来模拟Spark分布式计算,用于对程序进行调试,验证应用逻辑的正确性。

我们可以通过两种方式来启用这种模式运行我们的程序:一种是在向Spark提交应用时,利用--master local[N]参数来设置;另一种方式是直接在程序中用setMaster("local[N]")进行设置。

其中N表示用几个线程来模仿Spark集群节点,从而模仿应用程序在集群上的执行,该运行模式非常简单,我们不需要启动任何Spark的Master和Worker等守护进程,另外如果不需要使用HDFS,也不需要启动Hadoop的各项服务。

举一个简单的例子,假设有一个Spark小程序用来统计input.txt文件中每个单词出现的数量,主类是com.spark.hello.HelloSpark,有两种方式来利用local模式运行该程序。

我们可以在向Spark提交的时候,在命令行中直接加入--master local[2]参数,代码如下:

$ spark-submit --class com.spark.hello.HelloSparkStreaming --master local

[2] target/spark-streaming_hello-0.1-jar-with-dependencies.jar file:

//input.txt

或者在初始化SparkContext时,在配置master时设置:

val conf = new SparkConf().setAppName("spark-streaming_hello").setMaster

("local[2]")

《Spark Streaming实时流式大数据处理实战》 ——2.2 Spark运行模式

Spark spark 大数据 大数据

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:三项荣誉!华为云绽放2021云原生产业大会
下一篇:高频访问SQLite数据库
相关文章