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)来并发执行应用程序。

本地伪集群运行模式:

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

   上面这条命令代表会使用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

2.spark自带cluster manager的standalone cluster模式(集群):

   示例如下:

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

   客户端的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

   在Resource Manager节点上提交应用程序,会生成SparkSubmit进程,该进程会执行driver程序。
   RM会在集群中的某个NodeManager上,启动一个ExecutorLauncher进程,来做为ApplicationMaster。另外,也会在多个NodeManager上生成CoarseGrainedExecutorBackend进程来并发的执行应用程序。

2.基于YARN的Resource Manager的Custer模式(集群)

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

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

   在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)

四、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

你可能感兴趣的:(spark)