问题

Spark应用名在使用yarn-cluster模式提交时不生效,在使用yarn-client模式提交时生效,如图1所示,第一个应用是使用yarn-client模式提交的,正确显示我们代码里设置的应用名Spark Pi,第二个应用是使用yarn-cluster模式提交的,设置的应用名没有生效。

图1 提交应用

回答

导致这个问题的主要原因是,yarn-client和yarn-cluster模式在提交任务时setAppName的执行顺序不同导致,yarn-client中setAppName是在向yarn注册Application之前读取,yarn-cluser模式则是在向yarn注册Application之后读取,这就导致yarn-cluster模式设置的应用名不生效。

解决措施:

在spark-submit脚本提交任务时用--name设置应用名和sparkconf.setAppName(appname)里面的应用名一样。

比如我们代码里设置的应用名为Spark Pi,用yarn-cluster模式提交应用时可以这样设置,在--name后面添加应用名,执行的命令如下:

./spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster --name SparkPi lib/spark-examples*.jar 

0x00 背景
首先,可以传入spark运行环境参数有三个地方:命令行(spark-subimit),代码(new SparkConf或SparkSession),client配置文件。
在spark提交任务时,代码里设置了appname,命令行和client配置文件都没有设置。
使用yarn-client模式提交,appname是代码里设置的。
使用yarn-cluster模式提交,appname变为执行类的全类名,例如com.aa.bb.Main。
0x01 原因
在源码里找到,如果appname设置为空,appname设置为类名。

SparkSubmitArguments源码:

可是明明在代码里设置了,为什么client模式可以,cluster模式不可以。
原因是client和cluster模式启动方式不一样(前面已经做过分析),cluster模式不会读取代码里配置,直接读取命令行配置。client模式都会读取,但是代码里优先级最高。

在给apname赋值的时候,会先取命令行传入的参数再取客户端配置文件的参数。
所以cluster模式读的是命令行配置。
 
 

Spark代码中设置appName在client模式和cluster模式中不一样问题的更多相关文章

  1. Python中random模块在主函数中设置随机种子是否对于调用的函数中的随机值产生影响?

    一个问题,加入我有一个工程文件,在main函数里面调用random模块,设置随机种子,主函数中的随机种子的设置是否会影响主函数所调用的函数中的随机值? 实际上这个问题非常重要,比如你在跑网络的时候,初 ...

  2. Winform中设置DevExpress的RadioGroup的items从配置文件中加载

    场景 DevExpress的RadioGroup的items选项如果是不确定的话,需要其从配置文件中加载. 实现 在项目目录下新建Config文件夹,文件夹下新建xml配置文件. <?xml v ...

  3. 稳定模式在RESTful架构中的应用

    本文由 ImportNew - 乔永琪 翻译自 javaworld.欢迎加入翻译小组.转载请见文末要求. 分布式系统中保持网络稳定的五种方式 重试模式 超时模式 断路器模式 握手模式 隔离壁模式 倘若 ...

  4. jboss:在standalone.xml中设置系统属性(system-properties)

    就象在.net的web应用中,可以在web.config中设置appSettings一样,jboss的standalone.xml中也可以由开发人员自行添加系统属性,用法如下: </extens ...

  5. IOS开发—IOS 8 中设置applicationIconBadgeNumber和消息推送

    摘要 在IOS7中设置applicationIconBadgeNumber不会有什么问题,但是直接在IOS8中设置applicationIconBadgeNumber会报错 因为在IOS8中要想设置a ...

  6. 【转】IOS开发—IOS 8 中设置applicationIconBadgeNumber和消息推送

    在IOS7中设置applicationIconBadgeNumber不会有什么问题,但是直接在IOS8中设置applicationIconBadgeNumber会报错 因为在IOS8中要想设置appl ...

  7. 在linux中设置静态ip地址

    在linux中设置静态ip地址1.在终端中输入:vi /etc/sysconfig/network-scripts/ifcfg-eth0 2.开始编辑,填写ip地址.子网掩码.网关.DNS等[root ...

  8. iview 表格 某一列中设置radio

    在iview 表格 某一列中设置radio,说白了还是要在render中添加,方法为: { title: '业务参数设置', // key: 'pyCode', align: 'center', re ...

  9. IIS 7 托管管道模式 经典模式(Classic) 集成模式(Integrated) 分析与理解

    IIS 7.0 支持两种管道模式:一种是IIS 7.0最新提供的集成管道模式,另一种是经典管道模式,经典管道模式是由先前版本的IIS提供的. 我们可以通过应用程序池设置管道模式,这项功能对IIS管理员 ...

随机推荐

  1. 【!Important】Zookeeper用来做什么的,有几种类型的节点

    zookeeper=文件系统+通知机制 一.Zookeeper提供了什么 1.文件系统 Zookeeper维护一个类似文件系统的数据结构 每个子目录项如NameService都被称为znoed,和文件 ...

  2. TIScript Graphics

    $(#main_frame).paintContent = function(gfx) { gfx.pushLayer(#background-area); gfx.translate(0.5,0.5 ...

  3. 通过USB转TTL串口下载stm32程序

    目录: 1.硬件及其接线 2.驱动及软件 3.下载程序测试 1.硬件及其接线 1.1 USB转TTL刷机板(CH340模块升级小板) 1.2 主芯片STM32F103C8T6开发板 1.3接线 1.3 ...

  4. vue 数据管道

    文档https://cn.vuejs.org/v2/guide/filters.html html 片段 <div class="app"> <div>{{ ...

  5. EF将IEnumerable<T>类型转换为Dictionary<T,T>类型

    x 无标题 #region 博客Code {DBEntities}生成EFModel的时候自己命名的 using ({DBEntities} db = new { DBEntities }()) { ...

  6. 各种可再发行组件包Redistributable及framework 下载

    安装包名称 版本号 下载地址 Visual C++ 2005 Redistributable Package (x64)   下载 Visual C++ Redistributable Package ...

  7. tensorflow scope的作用

    我们在使用tensorflow的时候,当你想复用一个函数的模块,调试时候回提示你变量已经出现,提示你是否重用.那我们当然是不重用的,因为每一个变量都是我们需要的. 要体现不同,就在不同的变量中使用na ...

  8. python--列表、字典、元组、集合对比

    数据类型# 计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定义不同的数据类型.# a:整形和浮点型(正数和负数)# b:布尔类型(true,fals ...

  9. Chap5:数字货币交易[《区块链中文词典》维京&甲子]

  10. day2_python基础

    1.变量: 用来存东西的,左边是名字,右边是值 2.python中的单引号.双信号.三引号 单引号和双引号和三引号没什么区别,用哪个都可以,如果定义字符串里面如果有单引号,则外面用双引号;如果字符串里 ...