Spark部署模式(一)——Local模式

本文深入讲解Spark的运行机制,包括单节点模式下的配置与优化,官方求π案例解析,WordCount实战演示,以及Driver和Executor的角色区分。揭示Spark运算流程,资源调度策略,和RDD缓存机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. 官方求PI案例(直接运行已打成依赖jar包中的指定class)

2. 编写scala语言实现功能

3. 整个Spark运算的流程:

4. Spark中的Driver和Executor

5. 总结Spark中各种组成部分的关系


Local模式就是Spark运行在单节点的模式,通常用于在本机上练手和测试,分为以下三种情况:

(1)local:所有计算都运行在一个线程中;

(2)local[K]:指定K个线程来运行计算,通常CPU有几个Core(线程数),就指定K为几,最大化利用CPU并行计算能力;

(3)local[*]:自动设定CPU的最大Core数;

在API操作中体现在SparkConf的环节(配置信息),将Master(资源管理器)设定为哪种模式,对应几个线程:

 val conf = new SparkConf().setMaster("local[*]").setAppName("Application")

1. 官方求PI案例(直接运行已打成依赖jar包中的指定class)

首先启动单节点的HDFS(单节点已安装完毕Spark和Hadoop)

[kevin@hadoop100 spark]$ bin/spark-submit \
> --class org.apache.spark.examples.SparkPi \
> --executor-memory 1G \
> --total-executor-cores 2 \
> ./examples/jars/spark-examples_2.11-2.1.1.jar \
> 100

   bin/spark-submit是Spark的bin目录下一个提交任务脚本

   executor-memory,是给executor(具体计算功能的承担者)分配1G的内存

   total-executor-cores,指定每个executor使用的cup核数为2个

   最后的jar包是已经打成依赖的jar包;这个jar包可以是本地、也可以是HDFS中hdfs://、也可以是来自文件系统file:// path

运行结果如下,该算法是利用蒙特·卡罗算法求PI

Pi is roughly 3.1409291140929114

2. 编写scala语言实现功能

这里写一个WordCount的测试Demo程序:

(1)在spark/input目录下,创建1.txt和2.txt文件

[kevin@hadoop100 input]$ cat 1.txt 
hello spark
hello world
[kevin@hadoop100 input]$ cat 2.txt
hello hi
kevin spark

(2)启动spark-shell

[kevin@hadoop100 spark]$ bin/spark-shell
....
scala> 

(3)运行WordCount的scala程序

scala> sc.textFile("input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect
res0: Array[(String, Int)] = Array((world,1), (kevin,1), (hello,3), (spark,2), (hi,1))

textFile("input"):读取本地文件,spark/input文件夹数据;

flatMap(_.split(" ")):压平操作,按照空格分割符,将文件每一行数据映射(Map)成一个个单词;

map((_,1)):对每一个单词操作,将单词映射为元组(单词,1);

reduceByKey(_+_):形同key的value值进行聚合,相加;

collect:将数据收集到Driver端展示。

(4)登录4040端口,可以查看DAG图

发现Executor中分成了两个stage来运算。

 

3. 整个Spark运算的流程:

Client提交Spark任务;

Driver驱动器中初始化sc、任务划分、任务调度;然后像资源管理器ApplicationMaster注册应用程序,AM向Master申请资源,并分配给具体的Worker工作节点;

在Worker中的Executor执行器执行任务,执行设定的textFile、flatMap等操作算子,

最后通过collect算子反向注册给Driver,在Driver端显示运行结果。

 

4. Spark中的Driver和Executor

(1)Driver(驱动器):负责任务调度

它负责开发人员编写的用来创建SparkContext、创建RDD,以及进行RDD的转化操作和行动操作代码的执行

用API操作,Driver就是编写SparkContext的那个main方法的进程;

用spark shell操作,启动shell时会自动生成一个叫做sc的SparkContext对象;

主要作用:

`   把用户程序转化成Job

·   跟踪Executor的运行状况

·   为Executor节点调度任务

·   UI展示应用程序执行结果

(2)Executor(执行器)

存在于Worker工作节点中,负责具体的spark运算任务的进程,并且可以实现HA和负载均衡,负责:

·   运行编写的spark任务,并将结果返回给Driver

·   RDD直接缓存在Executor中,实现基于内存的spark运算

 

5. 总结Spark中各种组成部分的关系

Spark中,Master和ApplicationMaster相当于Yarn中的ResourceManager和ApplicationMaster;前者分配全局资源,后者为任务向Master申请资源并分配给Worker;

(1)Master和Applcation负责资源调度;

(2)Driver负责任务调度;

(3)Worker是具备资源环境的工作节点;

(4)Executor在Worker中实现具体计算;

(5)RDD直接缓存在Executor中,基于内存计算。

一个物理节点可以有多个Worker,一个Worker可以包含多个Executor,一个Executor拥有多个Core和Memory

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值