Spark部署模式与作业提交
2020-03-12 本文已影响0人
TZX_0710
Spark所有模式均用
spark-submit
命令提交作业,其格式如下:./bin/spark-sbumit
--class <main.class> \ #应用程序主入口类
--master <master-url>\ #集群的master url
--deploy-mode <deloy-mode>\ #部署模式
--conf<key>=<value> \ 可选配置
<application-jar>#Jar包路径
<applicatio-arguments>#传递给主入口类的参数
1.deploy-mode 有cluster和client2种可选参数,默认为client。
- 在cluster模式下,SparkDriver在应用程序Master进程内运行,该进程由集群上的YARN管理,提交作业的客户端可以在启动应用程序后关闭
- 在client模式下,SparkDriver在提交作业的客户端进程中运行,Master进程仅用于从Yarn请求资源。
master-url所有可选参数
Master URL | Meaning |
---|---|
local | 使用一个线程本地运行Spark |
local[k] | 使用K个worker线程本地运行Spark |
local[k,f] | 使用K个worker线程本地运行,第二个参数为失败重试次数 |
local[*] | 使用CPU核心数一样的线程本地运行Spark |
local[*,F] | 使用与CPU核心书一样的线程数在本地运行Spark,第二个参数为Task失败重试次数 |
Spark://HOST:PORT | 连接指定的standalone集群的master节点,端口号默认为7077 |
spark://HOST1:PORT1,HOST2,PORT2 | 连接standalone集群 |
mesos://HOST:PORT | 连接至给定的Mesos集群。默认端口是5050 |
yarn | 连接至一个Yarn集群,集群参数由配置的HADOOP_CONF_DIR或者YARN_CONF_DIR来决定 |
local模式提交打包
[root@node03 jars]# spark-submit \
> --class org.apache.spark.examples.SparkPi \
> --master local[2]\
> /usr/local/spark-2.4.5-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.4.5 .jar \
> 100
Standalone模式
#使用client的方式提交到standalone集群
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://node01:7077 \
/usr/local/spark-2.4.5-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.4.5.jar \
100
#使用cluster的方式提交到standlone集群
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://node01:7077 \
--deploy-mode cluster \
--supervise \
--executor-memory 700M \
--total-executor-cores 2 \
/usr/local/spark-2.4.5-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.4.5.jar \
100
执行完成的结果可以通过在spark的work目录下查找到对应的结果
在提交到Spark集群执行该任务的时候发现如下错误
解决办法:可以采用调大executor-memory 减少total-executor-cores
Spark on Yarn模式 必须保证hadoop在启动状态
修改spark的spark-env.sh 配置文件增加如下
YARN_CONF_DIR=/usr/local/hadoop-2.7.7/etc/hadoop
重启spark
# 以client模式提交到yarn集群
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
--executor-memory 1G \
--num-executors 10\
--conf spark.yarn.am.memoryOverhead=1G\ ==用于client
/usr/local/spark-2.4.5-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.4.5.jar \
100
#以cluster的方式提交到yarn上
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--executor-memory 1G \
--num-executors 5 \
--conf spark.yarn.driver.memoryOverhead=1G \
/usr/local/spark-2.4.5-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.4.5.jar \
100
提交到集群我们可以通过webui界面查看到输出结果http://node02:8088/proxy/application_1583994429613_0010
启动spark在yarn上运行发现如下错误:
Container killed on request. Exit code is 143
这是物理内存使用超过了限定值,YARN的NodeManager监控到内存使用超过阈值,强制终止该container进程。
解决方案:
(1)可以在spark-defaults.conf设置 spark.yarn.driver.memoryOverhead(cluster环境)/spark.yarn.am.memoryOverhead(client环境)增大memoryOverhead。
(2)可以在提交的时候 使用 --conf spark.yarn.driver.memoryOverhead=1G (cluster)
--conf spark.yarn.am.memoryOverhead (client环境)failed; error='Cannot allocate memory' (errno=12)
到最后一步发现无法分配内存 解决方案 无法分配足够的内存 因为我的电脑内存不够 在虚拟机环境运行所以报错
修改executor-memory的内存大小
修改num-executors的数量 让内存足够分配进程数量