概述
Spark运行时架构
在分布式环境下,Spark
集群采用的是主/从结构。在一个Spark集群中,有一个驱动器(driver)节点
和一个执行器(executor)节点
。Spark
应用通过一个叫做集群管理器(Cluster Manager)
的外部服务在集群中的机器上启动。Spark
自带的集群管理器被称为独立集群管理器。Spark
也能运行在Hadoop Yarn
和Apache Mesos
这两大开源集群管理器上。
集群管理器
Spark
依赖于集群管理器来启动执行器节点,而在某些特殊情况下,也依赖集群管理器来启动驱动器节点,
Spark
文档中始终使用驱动器节点和执行器节点的概念来描述执行Spark
应用的进程。而主节点(master)
和工作节点(worker)
的概念则被用来分别表述集群管理器中的中心化的部分和分布式的部分。这些概念很容易混淆,所以要格外小心。例如,Hadoop Yarn
会启动一个叫做资源管理器(Resource Manager)的主节点守护进程,以及一系列叫做节点管理器(Node Manager)的功能做节点守护进程,而在Yarn
的工作节点上,Spark
不仅可以运行执行器进程,还可以运行驱动器进程。
启动一个程序
不论使用哪种集群管理器,都可以使用Spark
提供的统一脚本Spark-submit
将你的应用提交到集群管理器上。通过不同的配置选项,Spark-submit
可以连接到响应的集群管理器上,并控制应用所使用的资源数量。在使用某些特定集群管理器时,Spark-submit
也可以将driver
节点运行在集群内部(比如一个Yarn
的功能做节点)。
(1)用户通过Spark-submit脚本提交应用。
(2)spark-submit脚本启动驱动器程序,调用用户定义的main()方法。
(3)driver程序与集群管理器通信,申请资源以启动executor节点。
(4)集群管理器为driver程序启动executor节点。
(5)driver进程执行用户应用中的操作。根据程序中所定义的对RDD的转化操作和行动操作,驱动器节点把工农做以人物的形式发送到executor进程。
(6)任务在executor程序中进行计算并保存结果。
(7)如果driver程序的main()方法退出,或者调用了SparkContext.stop(),驱动器程序会终止执行器进程,并且通过集群管理器释放资源。
使用spark-submit
部署应用
1.提交Python应用
bin/spark-submit my_script.py
如果在调用spark-submit
时除了脚本或者JAR包的名字之外没有别的参数,那么这个Spark程序只会在本地执行。当我们希望将应用提交到Spark集群上的时候,可以将独立集群的地址和希望启动的每个executor
进程的大小作为附加标记提供,如下例。
2.提交应用时添加附加参数
bin/spark-submit --master spark://host:7007 --executor-memory 10g my_script.py
--master
标记指定要连接的集群URL
值 | 描述 |
---|---|
spark://host:port | 连接到指定端口的Spark独立集群上。默认情况下Spark独立主节点使用7007端口 |
mesos://host:port | 连接到指定端口的Mesos集群上。默认情况下Mesos主节点监听5050端口 |
yarn | 连接到一个Yarn 集群,当在Yarn 上运行时,需要设置环境变量HADOOP_CONF_DIR 指向Hadoop 配置目录,以获取集群信息 |
local | 运行本地模式,使用单核 |
local[N] | 运行本地模式,使用N个核心 |
local[*] | 运行本地模式,使用尽可能多的核心 |
spark-submit
的一些常见标记
标记 | 描述 |
---|---|
–master | 表示要连接的集群管理器。见上图 |
–deploy-mode | 将driver部署到worker节点(cluster模式)或者作为外部客户端部署到本地(client模式),默认情况下是client模式 |
–py-files | 需要添加到PythonPath中的文件的列表,可以包含.py、.egg以及.zip文件 |
–name | 应用的显示名,会显示在Spark的网页用户界面中 |
–executor-memory | executor进程使用的内存量,以字节为单位。 |
–class | 应用程序的入口点(例如,org.apache.spark.examples.SparkPi) |
–conf | 用key=value格式强制指定Spark配置属性,用引号括起来 |
–application-jar | 包含应用程序和所有依赖的jar包的路径,路径必须是在集群中是全局可见的,例如,hdfs://路径或者file://路径 |
–application-arguments | 传递给主类中main函数的参数 |
调用
export HADOOP_CONF_DIR=/etc/hadoop/conf
HADOOP_USER_NAME=hdfs spark2-submit --master 'yarn' --deploy-mode 'client' --executor-memory 4g --num-executors 20 --total-executor-cores 90 /home/marq/IFSResponseLog2LibsvmTask.py -i /ctrp/marq/response/all/{}/* -o /ctrp/marq/sample/svm/response/all/{}/
export HADOOP_CONF_DIR=/etc/hadoop/conf
HADOOP_USER_NAME=hdfs spark2-submit --master 'yarn' --deploy-mode 'client' --py-files='LogPathUtils.zip','IFSImpressionLog.zip','IFSClickLog.zip' /home/marq/IFSClickThroughDataProcessTaskNew.py -a 12 -l 7 -o /ctrp/marq/12/
HADOOP_USER_NAME=hdfs
/data/app/spark/bin/spark-submit
--master spark://10.80.75.142:7077
--executor-memory 10g
--total-executor-cores 160
--jars /data/app/spark-tensorflow-connector_2.11-1.13.1.jar
--conf spark.pyspark.python=/data/anaconda3/bin/python
--conf spark.pspark.driver.python=/data/anaconda3/bin/python
/data/prod/marq/dmp/deep-learning-ctr-prediction/python/lib/dp/spark/tfrd.py
> /data/prod/marq/dmp/log/wdl/spark_tfrd/out-tfrd_ffm_20200611.log
spark-submit --master 'local[*]' /data/prod/marq/dmp/deep-learning-ctr-prediction/python/lib/dp/spark/tfrd.py
最后
以上就是眯眯眼水杯为你收集整理的使用spark-submit部署应用Spark运行时架构使用spark-submit部署应用的全部内容,希望文章能够帮你解决使用spark-submit部署应用Spark运行时架构使用spark-submit部署应用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复