博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spark集群模式&Spark程序提交
阅读量:6267 次
发布时间:2019-06-22

本文共 4211 字,大约阅读时间需要 14 分钟。

Spark集群模式&Spark程序提交

1. 集群管理器

      Spark当前支持三种集群管理方式

            Standalone—Spark自带的一种集群管理方式,易于构建集群。

            Apache Mesos—通用的集群管理,可以在其上运行Hadoop MapReduce和一些服务应用。

            Hadoop YARN—Hadoop2中的资源管理器。

      Tip1: 在集群不是特别大,并且没有mapReduce和Spark同时运行的需求的情况下,用Standalone模式效率最高。

      Tip2: Spark可以在应用间(通过集群管理器)和应用中(如果一个SparkContext中有多项计算任务)进行资源调度。

2. 组件

      Spark应用程序在集群上以一系列进程集合运行,通过程序(driver program)中的SparkContext对象进行卸掉。SparkContext可以与多种集群管理器(Cluster Manager)相连接,这些集群管理器可以在应用程序间分配计算资源。连到集群管理器后,Spark在急群众查找executor节点,这些节点执行运算与数据的存储。用户的应用程序(以JAR文件的形式传给SparkContext)被发送到executors。最后SparkContext发送任务tasks到executors进行执行。

                                                 

 

      Tip1: 每个Executor中以线程池的方式并行运行多个Task。意味着是应用程序之间在调度方面(每个driver调度自身的任务)和执行方面(来自不同的任务在不同的JVM上执行)相互隔离,同时,数据无法在不同的应用程序(SparkContext)之间共享,除非数据被写入到额外的存储系统。

      Tip2: Spark对于底层集群管理系统来说是不可知的。只要它能够获得executor进程,并且彼此之间可以进行通信,那么很容易将其运行在一个同时支持其它应用框架的集群管理器(Mesos/YARN)上。

      Tip3: 由于driver在集群上调度任务,它所在的节点应该靠近工作节点,最好位于相同的局域网中。如果想要远程地向集群发送请求,最好是为driver开启RPC,以是的就近提交操作而不是在一个距离工作节点很远的位置启动driver。

3. 提交应用程序

      使用Spark的bin目录中的spark-submit脚本向集群中提交应用程序。该脚本不论cluster managers有何差异,提交作业时都有相同的接口,不必单独配置。

4. 使用spark-submit提交任务

      打包好应用程序后,可以使用bin/spark-submit脚本提交应用程序。该脚本负责所需类路径(classpath)以及依赖,该脚本可以用于所有Spark支持的集群部署模式。

   

./bin/spark-submit \  --class 
--master
\ --deploy-mode
\ --conf
=
\ ... # 其他选项
\ [application-arguments]

常用的选项:

      --class: 应用程序(application)入口

      --master: 集群中master节点的URL(e.g. spark://23.195.26.187:7077)

      --deploy-mode: 是否将driver部署到worker节点(cluster模式)或者将driver作为一个外部的client(client模式)

      application-jar:打包的包含相关依赖的jar文件的路径。该地址应该对集群可见,例如hdfs://或者file://地址。

      Application-arguments:传送给应用程序main函数的参数。

 

      Tip1: 在一个与worker机器物理上相近的机器上提交应用程序(例如Standalone模式时EC2集群上的master节点),这种情况client模式更合适。Client模式下,driver直接在spark-submit程序中启动,应用程序相关的输入输出与所在的console相联系。Client模式同样适用spark-shell中的应用程序。

      Tip2: 如果一个应用程序在与那里worker集群的节点上提交(例如本地的笔记本),此时适合使用cluster模式减少driver和executer之间的网络延时。注意,当前cluster模式不适用于standalone集群,Mesos集群或程序。

      Tip3: 可以使用 –help 选项查看spark-submit支持的所有选项。

以下示例给出常用选项:

      

# 本地运行,占用8个core./bin/spark-submit \  --class org.apache.spark.examples.SparkPi \  --master local[8] \  /path/to/examples.jar \  100# 独立部署,client模式./bin/spark-submit \  --class org.apache.spark.examples.SparkPi \  --master spark://207.184.161.138:7077 \  --executor-memory 20G \  --total-executor-cores 100 \  /path/to/examples.jar \  1000# 独立部署,cluster模式,异常退出时自动重启./bin/spark-submit \  --class org.apache.spark.examples.SparkPi \  --master spark://207.184.161.138:7077 \  --deploy-mode cluster  --supervise  --executor-memory 20G \  --total-executor-cores 100 \  /path/to/examples.jar \  1000# YARN上运行,cluster模式export HADOOP_CONF_DIR=XXX./bin/spark-submit \  --class org.apache.spark.examples.SparkPi \  --master yarn \  --deploy-mode cluster \  # 要client模式就把这个设为client  --executor-memory 20G \  --num-executors 50 \  /path/to/examples.jar \  1000# 独立部署,运行python./bin/spark-submit \  --master spark://207.184.161.138:7077 \  examples/src/main/python/pi.py \  1000# Mesos集群上运行,cluster模式,异常时自动重启./bin/spark-submit \  --class org.apache.spark.examples.SparkPi \  --master mesos://207.184.161.138:7077 \  --deploy-mode cluster  --supervise  --executor-memory 20G \  --total-executor-cores 100 \  http://path/to/examples.jar \  1000

 

 

5. 监控

      每个driver程序均有一个Web界面,通常运行在4040端口,将会显示正在运行的任务的信息,executors及存储的相关信息。通过使用http://<driver-node>:4040进行访问。

6. Master地址

      传送到Spark的master的地址可以使用如下格式:                   

     

Master URL    含义local    本地运行Spark,只用1个worker线程(没有并行计算)local[K]    本地运行Spark,使用K个worker线程(理论上,最好将这个值设为你机器上CPU core的个数)local[*]    本地运行Spark,使用worker线程数同你机器上逻辑CPU core个数spark://HOST:PORT    连接到指定的Spark独立部署的集群管理器(Spark standalone cluster)。端口是可以配置的,默认7077。mesos://HOST:PORT    连接到指定的Mesos集群。端口号可以配置,默认5050。如果Mesos集群依赖于ZooKeeper,可以使用 mesos://zk://… 来提交,注意 –deploy-mode需要设置为cluster,同时,HOST:PORT应指向 MesosClusterDispatcher.yarn    连接到指定的 YARN  集群,使用–deploy-mode来指定 client模式 或是 cluster 模式。YARN集群位置需要通过 $HADOOP_CONF_DIR 或者 $YARN_CONF_DIR 变量来查找。yarn-client    YARN client模式的简写,等价于 –master yarn –deploy-mode clientyarn-cluster    YARN cluster模式的简写,等价于 –master yarn –deploy-mode cluster

 

7. 读取配置优先级

      在代码中的SparkConf中的配置参数具有最高优先级,其次是传送spark-submit脚本的参数,最后是配置文件(conf/spark-defaults.conf)中的参数。

      如果不清楚配置参数从何而来,可以使用spark-submit的—verbose选项来打印出细粒度的调度信息。

你可能感兴趣的文章
reduce/reduceRight
查看>>
(转)(contant的一些用法)
查看>>
Shell 脚本常用命令
查看>>
再次改版轮播图
查看>>
pandas系列 read_excel() 和 to_excel()各参数详解
查看>>
VGG使用重复元素的网络
查看>>
Android——Intent,Bundle
查看>>
Flip Game
查看>>
android网络编程之HttpUrlConnection的讲解--DownLoadManager基本用法
查看>>
Leetcode题目:Remove Duplicates from Sorted Array
查看>>
A little collection of cool unix terminal/console/curses tools
查看>>
40个js小技巧:屏蔽鼠标右键、取消选取、防止复制、粘贴、转换地址栏图标
查看>>
mac apache的使用
查看>>
go标准库的学习-hash
查看>>
log4j容器初始化探究
查看>>
Linux通配符与特殊符号知识大全
查看>>
[BZOJ5105]【[Code+#1]晨跑】
查看>>
bootstrap到底是用来做什么的(概念)
查看>>
高并发服务端分布式系统设计概要
查看>>
sqlite3.datebase.serialize(function(){})的问题
查看>>