Spark实战(八)spark的几种启动方式
spark常用的启动方式
一、Local(本地模式)
Spark单机运行,一般用于开发测试。可以通过Local[N]来设置,其中N代表可以使用N个线程,每个线程拥有一个core。如果不指定N,则默认是1个线程(该线程有1个core)。spark-submit 和 spark-submit --master local 效果是一样的,同理spark-shell 和 spark-shell --master local 效果是一样的
运行该模式非常简单,只需要把Spark的安装包解压后,改一些常用的配置即可使用,而不用启动Spark的Master、Worker守护进程,也不用启动Hadoop的各服务(除非需要用到HDFS)
这个SparkSubmit进程既是客户提交任务的Client进程、又是Spark的driver程序、还充当着Spark执行Task的Executor角色。
示例如下:
spark-submit --class JavaWordCount --master local[10] JavaWordCount.jar file:///tmp/test.txt
代码中设置:
spark = SparkSession\
.builder\
.appName("PythonWordCount")\
.master("local")\
.getOrCreate()
sc = spark.sparkContext
parsed =urllib.parse.urlparse("http://www.baidu.com")
print(parsed.netloc)
spark-submit --master local[2] 代表会有2个线程(每个线程一个core)来并发执行应用程序。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
本地伪集群运行模式:
spark-submit --master local-cluster[2, 3, 1024]
- 1
上面这条命令代表会使用2个executor进程,每个进程分配3个core和1G的内存,来运行应用程序。SparkSubmit依然充当全能角色,又是Client进程,又是driver程序,还有点资源管理的作用。生成的两个CoarseGrainedExecutorBackend,就是用来并发执行程序的进程。
二、Standalone模式
1.Spark自带Cluster Manager的Standalone Client模式:
构建一个由Master+Slave构成的Spark集群,Spark运行在集群中。和单机运行的模式不同,这里必须在执行应用程序前,先启动Spark的Master和Worker守护进程。这种运行模式,可以使用Spark的8080 来观察资源和应用程序的执行情况了。
启动示例如下:
spark-submit --master spark://mini1:7077或者 spark-submit --master spark://mini1:7077 --deploy-mode client
spark = SparkSession\
.builder\
.appName("PythonWordCount")\
.master("spark://mini1:7077")\
.getOrCreate()
sc = spark.sparkContext
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
2.spark自带cluster manager的standalone cluster模式(集群):
示例如下:
spark-submit --master spark://mini1:6066 --deploy-mode cluster
- 1
客户端的SparkSubmit进程会在应用程序提交给集群之后就退出,同时Master会在集群中选择一个Worker进程生成一个子进程DriverWrapper来启动driver程序,而该DriverWrapper 进程会占用Worker进程的一个core,所以同样的资源下配置下,会比第3种运行模式,少用1个core来参与计算。
三、Spark on Yarn模式
1.基于YARN的Resource Manager的Client模式(集群)
Spark客户端直接连接Yarn。不需要额外构建Spark集群。现在越来越多的场景,都是Spark跑在Hadoop集群中,所以为了做到资源能够均衡调度,会使用YARN来做为Spark的Cluster Manager,来为Spark的应用程序分配资源。
按照Spark应用程序中的driver分布方式不同,Spark on YARN有两种模式: yarn-client模式、yarn-cluster模式。当在YARN上运行Spark作业,每个Spark executor作为一个YARN容器运行。Spark可以使得多个Tasks在同一个容器里面运行。
使用如下命令执行应用程序:
spark-submit --master yarn
或者 spark-submit --master yarn --deploy-mode client
- 1
- 2
在Resource Manager节点上提交应用程序,会生成SparkSubmit进程,该进程会执行driver程序。
RM会在集群中的某个NodeManager上,启动一个ExecutorLauncher进程,来做为ApplicationMaster。另外,也会在多个NodeManager上生成CoarseGrainedExecutorBackend进程来并发的执行应用程序。
2.基于YARN的Resource Manager的Custer模式(集群)
使用如下命令执行应用程序:
spark-submit --master yarn --deploy-mode cluster
- 1
在Resource Manager端提交应用程序,会生成SparkSubmit进程,该进程只用来做Client端,应用程序提交给集群后,就会删除该进程。
Resource Manager在集群中的某个NodeManager上运行ApplicationMaster,该AM同时会执行driver程序。紧接着,会在各NodeManager上运行
应用程序的结果,会在执行driver程序的节点的stdout中输出,而不是打印在屏幕上。
conf = SparkConf()
conf.setAppName("Spark")
conf.setMaster('yarn') # spark standalone
conf.set('spark.executor.instances', 3) # cluster on yarn
conf.set('spark.executor.memory', '1g')
conf.set('spark.executor.cores', '1')
# conf.set('spark.cores.max', '2')
# conf.set('spark.logConf', True)
conf.set('spark.streaming.blockInterval', 1000*4) # restart receiver interval
sc = SparkContext(conf = conf)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
四、Spark on Mesos模式
Spark客户端直接连接Mesos。不需要额外构建Spark集群。
启动示例如下
./spark-shell --master mesos://host:port
./spark-shell --master mesos://host:port --deploy-mode client
./spark-shell --master mesos://host:port --deploy-mode cluster
posted on 2021-01-23 18:46 ExplorerMan 阅读(1801) 评论(0) 编辑 收藏 举报