正确提交spark应用

standalone+client模式

spark-submit --class com.jrq.submit.WordCount \
--name "SimpleWordCount" \
--master spark://master:7077 \
--deploy-mode client \
--driver-memory 512m \
--executor-memory 512m \
--total-executor-cores 2 \
--executor-cores 1 \
/home/hadoop-jrq/spark-course/spark-submit-app-1.0-SNAPSHOT.jar \
2

参数讲解:
1. --class com.jrq.submit.WordCount:这个是你的主入口函数
2. name “SimpleWordCount” 应用的名字
3. master spark://master:7077 你的集群的地址 见下图
在这里插入图片描述
4.–deploy-mode client client方式 还有个cluster模式,关于这两种模式的区别可以见https://blog.csdn.net/high2011/article/details/67637338写的很清楚的
5.–driver-memory 512m 启动driver端需要的内存大小,形如1000m, 1g等,默认是1024m
6.executor-memory 512m executor使用的内存大小
7.total-executor-cores 2 executor的总核心数
8.executor-cores 1 每个executor的核心数,这样就可以算出总的executor数=2/1
9./home/hadoop-jrq/spark-course/spark-submit-app-1.0-SNAPSHOT.jar 执行的jar包
10.2 你的程序需要的args参数

yarn+client 模式

spark-submit --class com.jrq.submit.WordCount \
--name "SimpleWordCount" \
--master yarn \
--deploy-mode client \
--driver-memory 512m \
--executor-memory 512m \
--num-executors 2 \
--executor-cores 1 \
/home/hadoop-jrq/spark-course/spark-submit-app-1.0-SNAPSHOT.jar \
2

–master yarn 指定为yarn模式运行

yarn+cluster模式

spark-submit --class com.jrq.submit.WordCount \ 
--name "SimpleWordCount" \ 
--master spark://master:6066 \  
--deploy-mode cluster \  
--driver-memory 512m \ 
--executor-memory 512m \ 
--total-executor-cores 2 \ 
--executor-cores 1 \ 
hdfs://master:9999/users/hadoop-jrq/submitapp/spark-submit-app-1.0-SNAPSHOT.jar \ 
2  

–master spark://master:6066 采用restFul形式提交应用,见上图中的cluster
–deploy-mode cluster cluster 模式运行

–conf参数

作用,用于传递一些参数,比如我们程序的输入输出路径等,如果改变,直接改变提交的参数即可,这样就不需要去频繁的改代码
–conf spark.driver.maxResultSize=2g \ // 指的是slave传过来的数据不能超过2G
–conf spark.wordcount.input.file=hdfs://master:9999/users/hadoop-jrq/submitapp/word.txt \ // 指定输入的路径
–conf spark.wordcount.output.path=hdfs://master:9999/users/hadoop-jrq/submitapp/wordcount \ // 指定输出的路径
–conf spark.executor.extraJavaOptions="-XX:+PrintGCDetails -XX:+PrintGCTimeStamps
-DmaxFavoriteNumber=50 " \ // 指定java的一些参数PrintGCDetails 打印GC的详细信息,PrintGCTimeStamps 打印GC的时间信息,DmaxFavoriteNumber一些参数,在程序中val maxCount = System.getProperty(“maxFavoriteNumber”).toInt 以这种方式接收,

在程序中我们这样写就可以了,抛错是因为,这两个路径都是必须的,没有路径就不用往下执行了,注意观察两哥参数的名字,注意名字的开头必须是spark.开头,否则会被过滤掉
val inputFile = conf.getOption(“spark.wordcount.input.file”)
.getOrElse(sys.error(“spark.wordcount.input.file must set”))
logger.info(s"inputFile ========== ${inputFile}")

val outputPath = conf.getOption("spark.wordcount.output.path")
  .getOrElse(sys.error("spark.wordcount.output.path must set"))
logger.info(s"outputPath ========== ${outputPath}")

其他参数

–jars “/home/hadoop-jrq/spark-course/spark-rdd-1.0-SNAPSHOT.jar” \ // 传入依赖包

备注:cluster执行的话,需要把一些相关东西放在executor都可以见到的地方,比如:hdfs上,而依赖包必须在每台机器的同一个位置都需要存在,否则会报错,比如下面的例子:

spark-submit --class com.jrq.submit.ExecutorParamTest \
--name "ExecutorParamTest" \
--master spark://master:6066 \
--deploy-mode cluster \
--driver-memory 512m \
--driver-class-path "/home/hadoop-jrq/spark-course/spark-rdd-1.0-SNAPSHOT.jar" \
--conf "spark.driver.extraJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -DsleepDuration=1" \
--executor-memory 512m \
--total-executor-cores 2 \
--executor-cores 1 \
--conf spark.executor.extraJavaOptions="-XX:+PrintGCDetails -XX:+PrintGCTimeStamps \
-DmaxFavoriteNumber=50 -DdogFavoriteColor=yellow" \
--conf spark.wordcount.dog.output.path=hdfs://master:9999/users/hadoop-jrq/submitapp/dog \
--conf spark.wordcount.input.file=hdfs://master:9999/users/hadoop-jrq/submitapp/word.txt \
--conf spark.wordcount.output.path=hdfs://master:9999/users/hadoop-jrq/submitapp/wordcount \
--conf spark.wordcount.hdfs.master=hdfs://master:9999 \
hdfs://master:9999/users/hadoop-jrq/submitapp/spark-submit-app-1.0-SNAPSHOT.jar \
2

–driver-class-path “/home/hadoop-jrq/spark-course/spark-rdd-1.0-SNAPSHOT.jar” \ 在每台机器上都需要存在,且是本地,不能放hdfs
而换成jar:
–jars “/home/hadoop-jrq/spark-course/spark-rdd-1.0-SNAPSHOT.jar” \ 只需要在提交的机器上有就行了

–files和–properties-file的应用

当–conf多了的时候,会有各种的不方便,因此,我们可以吧相关的配置写到文件中去,每次指定文件就行了,spark会自动把配置加载进conf中去
比如:spark-wordcount.conf中
spark.wordcount.input.file hdfs://master:9999/users/hadoop-jrq/submitapp/word.txt
spark.wordcount.output.path hdfs://master:9999/users/hadoop-jrq/submitapp/wordcount
spark.wordcount.hdfs.master hdfs://master:9999
然后提交的时候加上:
–properties-file /home/hadoop-jrq/spark-course/spark-wordcount.conf,… 如果有多个用逗号分隔
在比如:
wordcount.properties 中 放的是–conf spark.executor.extraJavaOptions= 后面的-D的参数
内容:
maxFavoriteNumber=300

提交:
–files /home/hadoop-jrq/spark-course/wordcount.properties
这样我们需要把代码改一下:
val configFileStream = this.getClass.getClassLoader.getResourceAsStream(“wordcount.properties”)
val properties = new Properties()
properties.load(configFileStream)
val maxCount = properties.getProperty(“maxFavoriteNumber”).toInt

–queue参数

Capacity Scheduler
Fair Scheduler
两种调度方式在我前面的yarn配置中有过说明,可以去看下
–queue hadoop-jrq \ 以这种方式指定你的队列
更多介绍可以去官网看下

通过代码提交应用

其底层是去找SPARK-HOME,然后找到spark-submit然后提交执行的,因此,你需要配置SPARK-HOME
package com.jrq.submit;

import org.apache.spark.launcher.SparkLauncher;

import java.io.File;
import java.io.IOException;
// 在代码中提交spark程序
public class ProcessCodeSubmitApp {
public static void main(String[] args) throws InterruptedException {
try {
Process process = new SparkLauncher()
// 提交的jar
.setAppResource("/Users/jiangrenqiang/spark/source/spark-course/spark-submit-app/target/spark-submit-app-1.0-SNAPSHOT.jar")
// 要执行的函数
.setMainClass(“com.jrq.submit.LocalSparkTest”)
// 设置APPName
.setAppName(“test code launch”)
// 设置master
.setMaster(“yarn”)
// --conf spark.driver.maxResultSize=2g \ // 指的是slave传过来的数据不能超过2G
// 参考SparkLauncher类中的参数
.setConf(SparkLauncher.DRIVER_MEMORY, “2g”)
// …
.setConf(“spark.wordcount.input.file”, “hdfs://master:9999/users/hadoop-jrq/submitapp/word.txt “)
// 将错误提交重定向到/Users/jiangrenqiang/spark-course/output.txt 这个文件中去
.redirectError()
.redirectOutput(new File(”/Users/jiangrenqiang/spark-course/output.txt”))
.launch();
System.out.println(“started app”);
process.waitFor();
System.out.println(“结束”);
} catch (IOException e) {
e.printStackTrace();
}
}
}
当然中间的参数,你也可以却写配置文件加进去

SparkAppHandle提交spark应用

可以得到应用的实时信息等,它的接口更加详细

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值