Spark运行模式Local+Standalone+Yarn+mesos

bin/spark-submit --help

注意:

--master MASTER_URL spark://host:port, mesos://host:port, yarn, or local.

--deploy-mode DEPLOY_MODE Whether to launch the driver program locally ("client") or on one of the worker machines inside the cluster ("cluster")(Default: client).

bin/spark-shell --help

注意:自己原本以为只有在submit的时候才会有这几种模式的区分,而在shell模式下,就不存在

--master MASTER_URL spark://host:port, mesos://host:port, yarn, or local.

--deploy-mode DEPLOY_MODE Whether to launch the driver program locally ("client") or on one of the worker machines inside the cluster ("cluster")

(Default: client).

1,测试或实验性质的本地运行模式 (单机)

该模式被称为Local[N]模式,是用单机的多个线程来模拟Spark分布式计算,通常用来验证开发出来的应用程序逻辑上有没有问题。

spark-submit 和 spark-submit --master local 效果是一样的

(同理:spark-shell 和 spark-shell --master local 效果是一样的)

spark-submit --master local[4] 代表会有4个线程(每个线程一个core)来并发执行应用程序。

提交作业:

spark-submit --class JavaWordCount --master local[10] JavaWordCount.jar file:///tmp/test.txt

可以看到,在程序执行过程中,只会生成一个SparkSubmit进程。

这个SparkSubmit进程又当爹、又当妈,既是客户提交任务的Client进程、又是Spark的driver程序、还充当着Spark执行Task的Executor角色。(如下图所示:driver的web ui)

这里有个小插曲,因为driver程序在应用程序结束后就会终止,那么如何在web界面看到该应用程序的执行情况呢,需要如此这般:(如下图所示)

先在spark-env.sh 增加SPARK_HISTORY_OPTS;

然后启动start-history-server.sh服务;

就可以看到启动了HistoryServer进程,且监听端口是18080。

之后就可以在web上使用http://hostname:18080愉快的玩耍了。

2,测试或实验性质的本地伪集群运行模式(单机模拟集群)

这种运行模式,和Local[N]很像,不同的是,它会在单机启动多个进程来模拟集群下的分布式场景,而不像Local[N]这种多个线程只能在一个进程下委屈求全的共享资源。通常也是用来验证开发出来的应用程序逻辑上有没有问题,或者想使用Spark的计算框架而没有太多资源。

用法是:提交应用程序时使用local-cluster[x,y,z]参数:x代表要生成的executor数,y和z分别代表每个executor所拥有的core和memory数。

spark-submit --master local-cluster[2, 3, 1024]

(同理:spark-shell --master local-cluster[2, 3, 1024]用法也是一样的)

上面这条命令代表会使用2个executor进程,每个进程分配3个core和1G的内存,来运行应用程序。可以看到,在程序执行过程中,会生成如下几个进程:

SparkSubmit依然充当全能角色,又是Client进程,又是driver程序,还有点资源管理的作用。生成的两个CoarseGrainedExecutorBackend,就是用来并发执行程序的进程。它们使用的资源如下:

运行该模式依然非常简单,只需要把Spark的安装包解压后,改一些常用的配置即可使用。而不用启动Spark的Master、Worker守护进程( 只有集群的standalone方式时,才需要这两个角色),也不用启动Hadoop的各服务(除非你要用到HDFS),这是和其他模式的区别哦,要记住才能理解。下面说说集群上的运行模式。

3,Spark自带Cluster Manager的Standalone Client模式(集群)

终于说到了体现分布式计算价值的地方了!(有了前面的基础,后面的内容我会稍微说快一点,只讲本文的关注点)

和单机运行的模式不同,这里必须在执行应用程序前,先启动Spark的Master和Worker守护进程。不用启动Hadoop服务,除非你用到了HDFS的内容。

start-master.sh

start-slave.sh -h hostname url:master

图省事,可以在想要做为Master的节点上用start-all.sh一条命令即可,不过这样做,和上面的分开配置有点差别,以后讲到数据本地性如何验证时会说。

启动的进程如下:(其他非Master节点上只会有Worker进程)

这种运行模式,可以使用Spark的8080 web ui来观察资源和应用程序的执行情况了。

可以看到,当前环境下,我启动了8个worker进程,每个可使用的core是2个,内存没有限制。

言归正传,用如下命令提交应用程序

spark-submit --master spark://wl1:7077

或者 spark-submit --master spark://wl1:7077 --deploy-mode client

代表着会在所有有Worker进程的节点上启动Executor来执行应用程序,此时产生的JVM进程如下:(非master节点,除了没有Master、SparkSubmit,其他进程都一样)

Master进程做为cluster manager,用来对应用程序申请的资源进行管理;

SparkSubmit 做为Client端和运行driver程序;

CoarseGrainedExecutorBackend 用来并发执行应用程序;

注意,Worker进程生成几个Executor,每个Executor使用几个core,这些都可以在spark-env.sh里面配置,此处不在啰嗦。

这是driver web ui的显示,可以看到每个executor的资源使用情况

4,spark自带cluster manager的standalone cluster模式(集群)

这种运行模式和上面第3个还是有很大的区别的。使用如下命令执行应用程序(前提是已经启动了spark的Master、Worker守护进程)不用启动Hadoop服务,除非你用到了HDFS的内容。

spark-submit --master spark://wl1:6066 --deploy-mode cluster

各节点启动的JVM进程情况如下:

客户端的SparkSubmit进程会在应用程序提交给集群之后就退出(区别1)

Master会在集群中选择一个Worker进程生成一个子进程DriverWrapper来启动driver程序(区别2)

而该DriverWrapper 进程会占用Worker进程的一个core,所以同样的资源下配置下,会比第3种运行模式,少用1个core来参与计算(观察下图executor id 7的core数)(区别3)

应用程序的结果,会在执行driver程序的节点的stdout中输出,而不是打印在屏幕上(区别4)

5,基于YARN的Resource Manager的Client模式(集群)

现在越来越多的场景,都是Spark跑在Hadoop集群中,所以为了做到资源能够均衡调度,会使用YARN来做为Spark的Cluster Manager,来为Spark的应用程序分配资源。

在执行Spark应用程序前,要启动Hadoop的各种服务。由于已经有了资源管理器,所以不需要启动Spark的Master、Worker守护进程。相关配置的修改,请自行研究。

使用如下命令执行应用程序

spark-submit --master yarn

或者 spark-submit --master yarn --deploy-mode client

提交应用程序后,各节点会启动相关的JVM进程,如下:

在Resource Manager节点上提交应用程序,会生成SparkSubmit进程,该进程会执行driver程序。

RM会在集群中的某个NodeManager上,启动一个ExecutorLauncher进程,来做为

ApplicationMaster。另外,也会在多个NodeManager上生成CoarseGrainedExecutorBackend进程来并发的执行应用程序。

对应的YARN资源管理的单元Container,关系如下:

6,基于YARN的Resource Manager的Cluster模式(集群)

使用如下命令执行应用程序:

spark-submit --master yarn --deploy-mode cluster

和第5种运行模式,区别如下:

在Resource Manager端提交应用程序,会生成SparkSubmit进程,该进程只用来做Client端,应用程序提交给集群后,就会删除该进程。

Resource Manager在集群中的某个NodeManager上运行ApplicationMaster,该AM同时会执行driver程序。紧接着,会在各NodeManager上运行CoarseGrainedExecutorBackend来并发执行应用程序。

应用程序的结果,会在执行driver程序的节点的stdout中输出,而不是打印在屏幕上。

对应的YARN资源管理的单元Container,关系如下:

Spark程序提交

提交方式分为Standalone(client\cluster)和Yarn(client\cluster) 四种。

首先编写好我们的wordcount程序然后打成jar包,传到我们的服务器上。

object Wordcount { def main(args:Array[String]): Unit ={ val conf = new SparkConf().setAppName("WordCount") val sc = new SparkContext(conf) val inputpath = args(0) val lines = sc.textFile(inputpath) val words = lines.flatMap(line=>line.split(" ")) words.count() val wordcounts = words.map(word=>(word,1)).reduceByKey(_+_) wordcounts.saveAsTextFile(args(1)) } }

我们需要使用spark的bin/spark-submit来提交我们的程序,具体参数使用help命令查看:

bin/spark-submit --help

Standalone模式 client

bin/spark-submit \ --class cn.lyl.spark.Wordcount \ --master spark://master:7077 \ --executor-memory 1G \ wordcount.jar \ hdfs://master:8020/user/README.txt \ hdfs://master:8020/user/wordcount1

Standalone模式 cluster

bin/spark-submit \ --class cn.lyl.spark.Wordcount \ --master spark://master:7077 \ --executor-memory 1G \ --deploy-mode cluster \ wordcount.jar \ hdfs://master:8020/user/README.txt \ hdfs://master:8020/user/wordcount2

Yarn模式 client

bin/spark-submit \ --class cn.lyl.spark.Wordcount \ --deploy-mode client \ --master yarn \ --executor-memory 1G \ wordcount.jar \ hdfs://master:8020/user/README.txt \ hdfs://master:8020/user/wordcount3

Yarn cluster

bin/spark-submit \ --class cn.lyl.spark.Wordcount \ --deploy-mode cluster \ --master yarn \ --executor-memory 1G \ wordcount.jar \ hdfs://master:8020/user/README.txt \ hdfs://master:8020/user/wordcount4

介绍

  • 本地模式

Spark单机运行,一般用于开发测试。

  • Standalone模式

构建一个由Master+Slave构成的Spark集群,Spark运行在集群中。

  • Spark on Yarn模式

Spark客户端直接连接Yarn。不需要额外构建Spark集群。

  • Spark on Mesos模式

Spark客户端直接连接Mesos。不需要额外构建Spark集群。

启动方式: spark-shell.sh(Scala)

spark-shell通过不同的参数控制采用何种模式进行。 涉及两个参数:

1

2

3

4

--master MASTER_URL spark://host:port, mesos://host:port, yarn, or local.

--deploy-mode DEPLOY_MODE Whether to launch the driver program locally ("client") or

on one of the worker machines inside the cluster ("cluster")

(Default: client).

–master参数用于指定采用哪种运行模式。

对于Spark on Yarn模式和Spark on Mesos模式还可以通过 –deploy-mode参数控制Drivers程序的启动位置。

  • 进入本地模式:

./spark-shell --master local ./spark-shell --master local[2] # 本地运行,两个worker线程,理想状态下为本地CPU core数

  • 进入Standalone模式:

./spark-shell --master spark://192.168.1.10:7077

备注:测试发现MASTER_URL中使用主机名替代IP地址无法正常连接(hosts中有相关解析记录),即以下命令连接不成功:

./spark-shell --master spark://ctrl:7077 # 连接失败

  • Spark on Yarn模式

1

2

3

4

5

6

7

./spark-shell --master yarn

./spark-shell --master yarn-client

#不支持这种模式

#./spark-shell --master yarn-cluster

./spark-shell --master yarn --deploy-mode client

#不支持这种模式

#./spark-shell --master yarn --deploy-mode cluster

备注:Yarn的连接信息在Hadoop客户端的配置文件中指定。通过spark-env.sh中的环境变量HADOOPCONFDIR指定Hadoop配置文件路径。

  • Spark on Mesos模式:

./spark-shell --master mesos://host:port ./spark-shell --master mesos://host:port --deploy-mode client ./spark-shell --master mesos://host:port --deploy-mode cluster

启动方式: pyspark(Python)

参数及用法与Scala语言的spark-shell相同,比如:

pyspark --master local[2]

参考:Spark入门教程(三)Spark运行模式(Local、Standalone、Yarn)

参考:hongma+Spark多种运行模式

参考:Spark的四种运行模式(1.2.1)

参考:

Spark运行模式Local+Standalone+Yarn+mesos相关推荐

  1. Spark运行模式(local standalond,yarn-client,yarn-cluster,mesos-client,mesos-cluster)

    spark部署在单台机器上面时,可以使用本地模式(Local)运行:当部署在分布式集群上面的时候,可以根据自己的情况选择Standalone模式(Spark自带的模式).YARN-Client模式或者 ...

  2. 详解Spark运行模式(local+standalone+yarn)

    一.简述 Spark 有多种运行模式: 1.可以运行在一台机器上,称为 Local(本地)运行模式. 2.可以使用 Spark 自带的资源调度系统,称为 Standalone 模式. 3.可以使用 Y ...

  3. 第三章 Spark运行模式及原理

    第三章 Spark运行模式及原理 目录 Spark运行模式概述 Local模式 Standalone模式 Local cluster模式 Mesos模式 YARN standalone/YARN cl ...

  4. 一篇文章读懂:Spark运行模式

    Spark性能调优与原理分析 01.Spark运行模式 运行Spark的应用程序,其实仅仅需要两种角色,Driver和Executor.Driver负责将用户的应用程序划分为多个Job,分成多个Tas ...

  5. spark封神之路(2)-spark运行模式

    本专栏系列视频教程 2 spark运行模式入门 1.官网地址 http://spark.apache.org/ 2.文档查看地址 https://spark.apache.org/docs/2.1.1 ...

  6. Spark 安装部署(Local+Standalone+Yarn等)

    概述 Spark作为一个数据处理框架和计算引擎,被设计在所有常见的集群环境中运行, 在国内工作中主流的环境为Yarn,不过逐渐容器式环境也慢慢流行起来.接下来,我们就分别看看不同环境下Spark的运行 ...

  7. Spark运行模式Standalone 模式

    Standalone 模式 Standalone 模式概述 standalone n. 脱机; adj. 单独的,独立的; local 本地模式毕竟只是用来进行练习演示的,真实工作中还是要将应用提交到 ...

  8. Spark 运行模式 standalong yarn

    standalong 模式需要在spark master 节点上启动 spark/sbin/start-all.sh 主从节点都可以run standalong client ./bin/spark- ...

  9. mysql standalone模式,Apache运行模式之standalone和inetd模式介绍

    不仔细看httpd.conf配置文件还不知道有这回事,汗. ServerType这个配置选项指定如何运行Apache.Apache可以使用两种方法来运行:standalone(独立式)和inetd(超 ...

最新文章

  1. 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 MetaClass 进行方法注入普通方法 )
  2. 白话Elasticsearch57-数据建模之实现悲观锁并发控制的三种方式(未成功)
  3. leetcode 318. Maximum Product of Word Lengths | 318. 最大单词长度乘积
  4. 2018 年度总结 —— 缘见
  5. jboss eap 7.0_创建委托登录模块(用于JBoss EAP 6.1)
  6. ASP.NET服务器控件对应的HTML标签
  7. 一个运营专员该如何做好数据分析?
  8. 图像全参考客观评价算法比较
  9. VS2017 CUDA编程学习1:CUDA编程两变量加法运算
  10. 从多种模型中选择最合适的模型,用于行人检测
  11. 动环监控系统中B接口的实现
  12. uniapp 自定义图标icon
  13. python合并列表并按升序排序_程序合并间隔并在Python中按升序对其进行排序
  14. 学渣的刷题之旅 leetcode刷题 27.移除元素
  15. img标签src引入svg如何修改颜色
  16. 【财富空间】毛日昇:阿里“五新”战略有力助推供给侧结构性改革
  17. 软考初级程序员上午单选题(20)
  18. 负载均衡及软、硬负载简介
  19. 路灯杆子超进化,智慧灯杆的无线通信解决方案
  20. FANSMI音乐下载器原理

热门文章

  1. 无法启动python怎么办_解决python写的windows服务不能启动的问题
  2. 建立循环双链表(头插法)
  3. 建立单链表(头插法)
  4. C++中STL中的大、小、相等概念
  5. 简述python程序结构_Python程序结构
  6. 打造线下版元宇宙!机器人VR助力远程做核酸,登上Science子刊
  7. AAAI2021论文:一个激光雷达点云的3D目标单步检测法CIA-SSD
  8. pom.xml中的dependencyManagement
  9. 科学计算工具NumPy(3):ndarray的元素处理
  10. Win10下MySQL_Workbench连接远程主机MySQL5.7