spark中spark-submit在yarn中执行spark程序的jar

本文详细介绍如何在IDEA中将Spark应用打包成jar,并在Linux环境下部署与运行。包括修改SparkSession设置、上传jar文件、启动Spark服务、配置spark-submit命令及监控进度等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

*1、先在idea中打成jar包

1>、在打jar时,一定要把  SparkSession.master("local[2]")注释掉**

在这里插入图片描述
在这里插入图片描述

2、上传jar到linux中

3、启动spark程序

**

此命令一定要在spark安装包下执行呢

**

/spark/sbin/start-all.sh

启动完,用jps查看进程
在这里插入图片描述

4、启动spark历史服务器

此命令一定要在spark安装包下执行呢

/spark/sbin/start-history-server.sh 

在这里插入图片描述

5、使用spark-submit命令加载jar

在这里插入图片描述

/spark/bin/spark-submit  \
--class Test.BigSql \    //这路径直接从Scala往下写,不用后缀的.scala字样
--master yarn \
--deploy-mode cluster \
--driver-memory 4g \
--executor-memory 4g \
--executor-cores 4 \
--queue default \
/DDWW/DW.jar   //这是我linux上放jar的位置

执行时,可以在yarn上查看进度:
yarn端口号:8088

在这里插入图片描述

阅读此片文章的技术控,你那不懂欢迎关注加好友,我们一起交流
一起钻研讨论打通大数据各个组件的通道

阅读此片文章的技术控,你那不懂欢迎关注加好友,我们一起交流
一起钻研讨论打通大数据各个组件的通道

阅读此片文章的技术控,你那不懂欢迎关注加好友,我们一起交流
一起钻研讨论打通大数据各个组件的通道

阅读此片文章的技术控,你那不懂欢迎关注加好友,我们一起交流
一起钻研讨论打通大数据各个组件的通道

<think>好的,我现在要解决用户的问题:如何在Spark应用代码中读取通过spark-submit传递的--master yarn参数。首先,我需要回顾一下Spark的配置机制和参数传递的优先级。根据之前的回答,SparkConf中的显式设置优先级最高,然后是命令行参数,最后是配置文件。 用户想知道如何在代码里获取通过spark-submit传递的--master参数。首先,我需要确认--master参数的作用。这个参数用于指定集群管理器,比如yarn、local[*]等。用户可能在代码中需要根据不同的部署环境(比如测试和生产)动态调整某些配置,这时候就需要获取master的值。 接下来,我需要思考如何从SparkConf或SparkContext中获取这个参数。根据Spark的文档,SparkConf对象会包含所有显式设置的配置,包括通过命令行传递的。因此,应该可以通过SparkConf的get方法或者SparkContext的getConf方法来获取。 但是要注意,如果用户在代码中显式设置了spark.master属性,比如在SparkConf里调用了.setMaster("local"),那么这个值会覆盖命令行传入的--master参数。这时候,即使spark-submit传了--master yarn,代码里的设置会生效,而用户可能拿不到yarn这个值。不过,用户的问题中并没有提到代码里是否有显式设置,所以需要假设用户没有设置,或者希望即使设置了也能获取到实际使用的参数。 接下来,验证一下具体的获取方法。例如,在Scala代码中,可以通过sc.getConf.get("spark.master")来获取。在Python中,可能是通过SparkSession的sparkContext.getConf().get("spark.master")。用户的问题没有指定语言,但之前的示例中有Scala代码,可能需要给出多语言的示例。 然后,是否需要考虑其他情况,比如当没有显式设置时,spark-submit的参数是否会被正确传递。根据引用[3],如果默认配置文件中设置了spark.master,而命令行没有指定,那么配置文件的值会被使用。但用户的问题是明确通过spark-submit传递了--master yarn,所以这时候代码应该能正确获取到yarn。 另外,用户可能在代码中需要根据不同的master值执行不同的逻辑,比如本地测试和集群运行时有不同的初始化步骤。这时候获取master参数就很有必要。 还需要考虑是否有可能无法获取的情况。例如,如果用户代码中显式调用了setMaster,那么从SparkConf里获取的会是代码里设置的值,而不是命令行传入的。这时候需要提醒用户注意配置的优先级,避免混淆。 最后,总结步骤:通过SparkConf获取spark.master属性的值,并提供示例代码,同时指出注意事项,比如优先级问题和可能的覆盖情况。确保回答准确,并引用相关来源支持结论。</think>根据 Spark 配置管理机制和引用内容[^3],**在 Spark 应用代码中可以通过 `SparkConf` 或 `SparkContext` 直接读取 `--master` 参数**。以下是具体实现方法及注意事项: --- ### **方法 1:通过 `SparkConf` 读取** 直接访问 `spark.master` 属性(即使代码中未显式设置该参数,也能获取到通过 `spark-submit` 传递的值): ```scala val conf = new SparkConf() val master = conf.get("spark.master") // 返回 "yarn" println(s"Master URL: $master") ``` #### **验证逻辑** - 若 `spark-submit` 指定 `--master yarn`,则 `spark.master` 值为 `yarn`。 - 若代码中显式调用 `.setMaster("local[*]")`,则此值会覆盖命令行参数[^3]。 --- ### **方法 2:通过 `SparkContext` 读取** 从已初始化的 `SparkContext` 中获取配置: ```scala val sc = new SparkContext(conf) val masterFromContext = sc.getConf.get("spark.master") println(s"Master from context: $masterFromContext") ``` --- ### **关键注意事项** 1. **参数优先级问题** - 若代码中显式设置 `spark.master`(如 `SparkConf.setMaster("local[*]")`),则代码中的值会覆盖 `spark-submit` 传递的参数[^3]。 - 若未通过任何方式设置 `spark.master`,Spark 会尝试从 `spark-defaults.conf` 或环境变量中读取默认值。 2. **动态获取参数的典型场景** ```scala // 根据不同的 master 参数执行不同逻辑 val master = conf.get("spark.master") master match { case "yarn" => println("Running on YARN cluster") case "local[*]" => println("Running in local mode") case _ => println(s"Unknown master: $master") } ``` 3. **Python 实现示例** ```python from pyspark.sql import SparkSession spark = SparkSession.builder.appName("ReadMasterParam").getOrCreate() master = spark.sparkContext.getConf().get("spark.master") print(f"Master URL: {master}") ``` --- ### **参数传递验证示例** #### 场景 1:通过 `spark-submit` 指定 `--master` ```bash spark-submit --master yarn --class MyApp myApp.jar ``` - **代码输出**:`Master URL: yarn` #### 场景 2:代码中显式设置 `spark.master` ```scala val conf = new SparkConf().setMaster("local[*]") // 覆盖命令行参数 val sc = new SparkContext(conf) println(sc.getConf.get("spark.master")) // 输出 "local[*]" ``` --- ### **引用总结** - `spark.master` 参数可通过 `SparkConf` 或 `SparkContext` 直接读取[^3]。 - 代码中显式设置的参数优先级高于 `spark-submit` 命令行参数[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值