将系统属性传递给spark-submit并从类路径或自定义路径读取文件

2024-01-14

我最近发现一种使用 logback 代替 log4j 的方法 https://stackoverflow.com/a/45480145/1549135在 Apache Spark 中(既适合本地使用,也适合spark-submit)。然而,还缺少最后一块。

问题是 Spark 非常努力地不去看logback.xml其类路径中的设置。我已经找到了一种在本地执行期间加载它的方法:

到目前为止我所拥有的

基本上,检查系统属性logback.configurationFile,但正在加载logback.xml从我的/src/main/resources/万一:

// the same as default: https://logback.qos.ch/manual/configuration.html
private val LogbackLocation = Option(System.getProperty("logback.configurationFile"))
// add some default logback.xml to your /src/main/resources
private lazy val defaultLogbackConf = getClass.getResource("/logback.xml").getPath

private def getLogbackConfigPath = {
   val path = LogbackLocation.map(new File(_).getPath).getOrElse(defaultLogbackConf)
   logger.info(s"Loading logging configuration from: $path")
   path
}

然后当我初始化 SparkContext 时...

val sc = SparkContext.getOrCreate(conf)
sc.addFile(getLogbackConfigPath)

我可以确认它在本地有效。

和谁玩spark-submit

spark-submit \
  ...
  --master yarn \
  --class com.company.Main\
  /path/to/my/application-fat.jar \
  param1 param2 

这给出了一个错误:

Exception in thread "main" java.io.FileNotFoundException: Added file file:/path/to/my/application-fat.jar!/logback.xml does not exist

我认为这是无稽之谈,因为首先应用程序找到文件(根据我的代码)

getClass.getResource("/logback.xml").getPath

然后,期间

sc.addFile(getLogbackConfigPath)

事实证明...哇!那里没有文件!?有没有搞错!?为什么它在 jar 内找不到该文件。显然它就在那里,我做到了triple检查了它。

另一种方法spark-submit

所以我想,好吧。我将传递我的文件,因为我可以指定系统属性。我把logback.xml文件在我旁边application-fat.jar and:

spark-submit \
  ...
  --conf spark.driver.extraJavaOptions="-Dlogback.configurationFile=/path/to/my/logback.xml" \
  --conf spark.executor.extraJavaOptions="-Dlogback.configurationFile=/path/to/my/logback.xml" \
  --master yarn \
  --class com.company.Main\
  /path/to/my/application-fat.jar \
  param1 param2 

我得到了与上面相同的错误。所以我的设置完全被忽略了!为什么?如何指定

-Dlogback.configurationFile

正确地将其传递给驱动程序和执行者?

Thanks!


1. 解决java.io.FileNotFoundException

This is 可能无法解决.

Simply, SparkContext.addFile无法从 Jar 内部读取文件。我相信它的待遇就像在某些地方一样zip或类似的。

Fine.

2. 传球-Dlogback.configurationFile

由于我对配置参数的误解,这不起作用。

因为我正在使用--master yarn参数,但我没有指定--deploy-mode to cluster这是默认的client.

Reading https://spark.apache.org/docs/1.6.1/configuration.html#application-properties https://spark.apache.org/docs/1.6.1/configuration.html#application-properties

Spark.driver.extraJavaOptions

注意:在客户端模式下,不能直接在应用程序中通过 SparkConf 设置此配置,因为此时驱动程序 JVM 已经启动。相反,请通过 --driver-java-options 命令行选项或在默认属性文件中进行设置。

所以通过这个设置--driver-java-options worked:

spark-submit \
  ...
  --driver-java-options "-Dlogback.configurationFile=/path/to/my/logback.xml" \
  --master yarn \
  --class com.company.Main\
  /path/to/my/application-fat.jar \
  param1 param2 

注意事项--driver-java-options

相比之下--conf多个参数have to作为一个参数传递,例如:

--driver-java-options "-Dlogback.configurationFile=/path/to/my/logback.xml -Dother.setting=value" \

以及以下内容不管用

--driver-java-options "-Dlogback.configurationFile=/path/to/my/logback.xml" \
--driver-java-options "-Dother.setting=value" \
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将系统属性传递给spark-submit并从类路径或自定义路径读取文件 的相关文章

  • 单元测试组合服务方法

    我正在为一个类编写 junit 单元测试 该类使用以下方法实现公开的接口 public Set
  • Quarkus 不以编程方式选择 bean

    我试图以编程方式选择 bean 但 quarkus 不会注入 bean 并引发异常 不支持吗 public enum ReportType ONE TWO Qualifier Retention RUNTIME Target METHOD
  • 在命令行java中突出显示文本[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一项任务是重新创建 unix cal 程序 除了一部分之外 相当简单 今天 它突出显示了该数字 我不知道该怎么做 关于如何在 Ja
  • 如何在Java中优雅地处理SIGKILL信号

    当程序收到终止信号时如何处理清理 例如 我连接到一个应用程序 希望任何第三方应用程序 我的应用程序 发送finish注销时的命令 发送该信息最好说什么finish当我的应用程序被破坏时的命令kill 9 编辑1 kill 9无法被捕获 谢谢
  • Java:线程“主”中的异常 java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:

    我是初学者 谁能帮我弄清楚我们在做什么 我正在尝试读取字符串并将字符串的每个字符存储在数组中 import java util Scanner public class CoreMainDigitExtractor static Scann
  • 如何从DataFrame中获取最后一行?

    我有一个DataFrame 该DataFrame有两列 value 和 timestamp timestmp 是有序的 我想获取DataFrame的最后一行 我该怎么办 这是我的输入 value timestamp 1 1 4 2 3 3
  • 迁移到Java 9或更高版本时是否需要切换到模块?

    我们目前正在从 Java 8 迁移到 Java 11 但是 升级我们的服务并没有我们预期的那么痛苦 我们基本上只需要更改我们的版本号build gradle文件和服务都顺利启动并运行 我们升级了库以及使用这些库的 微 服务 到目前为止没有问
  • 尝试获取屏幕上绘制的每个随机圆圈的 x、y 坐标

    您好 我正在制作一款游戏 该游戏将在屏幕上创建随机圆圈 随机创建的圆圈的值为红色或绿色 我的问题是 我希望不仅能够确定用户何时单击其中一个圆圈 而且还能够确定他们最终单击的圆圈 红色或绿色 下面是我的代码 我的主要问题是试图找到将要绘制的圆
  • 使用 JSch 分别为各个提示提供输入

    问题是 SSH 连接需要在常规登录后提供另一个用户 ID 和密码信息 我正在使用 JSch 连接到远程服务器 它接受以下形式的输入InputStream 和这个InputStream只能通过一次 由于会话是交互式的 这会导致问题 我尝试将输
  • Kafka Java Consumer 已关闭

    我刚刚开始使用卡夫卡 我面临着消费者的一个小问题 我用Java写了一个消费者 我收到此异常 IllegalStateException 此消费者已关闭 我在以下行中遇到异常 ConsumerRecords
  • LocalDate 减去 period 得到错误的结果

    LocalDate减去一个Period 如 28年1个月27天 得到错误的结果 但减去一个Period 只有天单位 如 10282 天 得到正确的结果 有什么需要注意的吗 public static void main String arg
  • Java 中的 ExecuteUpdate sql 语句不起作用

    我正在学习如何将 SQL 与 Java 结合使用 我已成功安装 JDBC 驱动程序 并且能够从数据库读取记录并将其打印在屏幕上 我的问题发生在尝试执行更新或插入语句时 没有任何反应 这是我的代码 问题所在的方法 public static
  • 从 HttpClient 3 转换为 4

    我已经成功地对所有内容进行了更改 但以下内容除外 HttpClient client HttpPost method client new DefaultHttpClient method new HttpPost url InputStr
  • 合并两个地图的最佳实践是什么

    如何将新地图添加到现有地图 地图具有相同的类型Map
  • 使用 HTTPServletRequestWrapper 包装请求参数

    我有一个可以验证 授权 REST 调用的过滤器 该过滤器需要访问请求参数 因此我为此编写了一个自定义 HTTPServletRequestWrapper import java util Collections import java ut
  • JAXB 编组器无参数默认构造函数

    我想从 java 库中编组一个 java 对象 当使用 JAXB marschaller 编组 java 对象时 我遇到了一个问题 A 类没有无参数默认构造函数 我使用Java Decompiler来检查类的实现 它是这样的 public
  • Java8:流映射同一流中的两个属性

    我有课Model带有以下签名 class Model private String stringA private String stringB public Model String stringA String stringB this
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • CXF:通过 SOAP 发送对象时如何排除某些属性?

    我使用 Apache CXF 2 4 2 当我将数据库中的某个对象返回给用户时 我想排除一些属性 例如密码 我怎样才能做到这一点无需创建临时的班级 有这方面的注释吗 根据 tomasz nurkiewicz 评论我应该使用 XmlTrans
  • 你能快速告诉我这个伪代码是否有意义吗?

    我相信我的代码现在是万无一失的 我现在将写出伪代码 但我确实有一个问题 为什么 DRJava 要求我返回 if 语句之外的内容 正如你所看到的 我为 ex 写了 return 1 只是因为它问了 但是它永远不会返回该值 谁可以给我解释一下这

随机推荐

  • 适用于 VISTA、7 及更高版本的 Windows API

    WinAPI Win32 之间有什么根本区别吗 利用新操作系统功能是否需要任何其他知识 过去编写过 Win32 应用程序的人是否可能会陷入任何陷阱 我不是在谈论 Silverlight 那是一个完全不同的蜡球 我还没有在工作中支持这一点的
  • 我可以安全地将 OpenMP 与 C++11 结合使用吗?

    OpenMP 标准仅考虑 C 98 ISO IEC 14882 1998 这意味着在 C 03 甚至 C 11 下没有支持使用 OpenMP 的标准 因此 任何使用 C gt 98 和 OpenMP 的程序都会在标准之外运行 这意味着即使它
  • 使用 rhino 的 JavaAdapter 的示例

    有人可以给我提供一个如何使用 Rhino 的 java 适配器在 java 脚本中扩展 java 类的示例吗 对于其他可能遇到此问题的人来说 有一个很好的例子here http my opera com sutabi blog puttin
  • 已达到 Google App Engine 前端实例时间限制

    我有一个使用 Google App Engine 免费选项托管的静态 html 网站 我没有任何流量可言 因为它是新网站 唯一的流量是我自己访问该网站 我注意到 只有 15 个主页请求 我的前端实例消耗时间为 5 按照这个速度 我的网站每天
  • 如何在Tableau中显示40+列?

    我正在尝试制作一份包含大约 40 列 Dims measure 的列表报告 但无法正确完成 该要求推动了Tableau通过利用其仅 16 列的限制来限制 我怎样才能完成这件事 我读了这个 http www tableausoftware c
  • Dot:如何用黑色轮廓装饰图形节点,同时用另一种颜色填充?

    我需要格式化点图的帮助 为了简化我的问题 我在这里有一个点代码 我通过点工具运行它 digraph G TestNode label Test Node shape egg style filled color yellow 结果是这样的
  • HTTParty 的内存问题和下载大文件

    这会导致 Ruby 的内存问题吗 我知道如果大小超过 10KB Open URI 就会写入 TempFile 但是 HTTParty 会在写入 TempFile 之前尝试将整个 PDF 保存到内存中吗 src Tempfile new fi
  • 调整 WriteableBitmap 的大小

    我创建了 Gray16 格式的 WriteableBitmap 我想将此 WriteableBitmap 调整为我已知的尺寸 并保留像素格式 Gray16 是否有人致力于调整 WriteableBitmap 的大小 请帮我 我也在网上搜索了
  • queryselectorAll() 与正则表达式属性选择器

    var arr slice call document querySelectorAll a href pricing 返回一个长度为 6 的数组 var arr slice call document querySelectorAll a
  • 访问 SimpleXMLElement 中的数字属性

    我正在尝试访问以下元素中的数字 但无法从中获取值 echo object gt 0 returns Parse error syntax error unexpected T LNUMBER expecting T STRING or T
  • Maven:POM 模块和子模块层次结构

    我的项目结构如下 module pom xml submodule pom xml pom xml POM 简化 Project
  • 如何使用字符串创建 JSON 对象?

    我想使用 String 创建一个 JSON 对象 例子 JSON test1 value1 test2 id 0 name testName 为了创建上面的 JSON 我使用了它 String message JSONObject json
  • 将多个 javascript 文件合并为一个的工具... [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有一种工具可以将多个javascript文件合并为一个然后压缩它们 雅虎 YUI 压缩器 http developer yahoo c
  • 相同的选择菜单列表项切换

    我正在尝试开发一个涉及 2 个选择列表项的功能 流程是这样的 有两个列表项 相同 具有相同的列表项 当我选择一个选项时Main Tags列表 相同的选项Sub Tags列表应该被禁用 例如 如果我选择Tag 1来自Main Tags然后列出
  • cLion + Qt5 - 退出代码 -1073741515 (0xC0000135)

    我正在尝试使用 QT5 和 cLion 运行简单的测试 但我遇到了退出代码墙 这是我的环境 克狮2017 2minGw 5 0 cMake 3 8 2Qt 5 9 0 CMakeList txt cmake minimum required
  • 从列表中删除项目有困难吗?

    我有两个清单 第一个是所有学生 第二个是选定的学生 我希望如果我一次选择某个学生 他们将从所有学生列表中删除 这是我的代码 但事实并非如此 学生不会被开除 foreach var li in ListSelectedStudents ToL
  • 将 json 数组读入 SQL Server 中的行

    给定下面的示例 json 数据 我如何编写一个查询来一步提取数组数据 我的目标是 ActionRecs 数组 4 中的每一项都占一行 我的实际 json 更复杂 但我认为这给出了我的目标的一个很好的例子 declare json2 nvar
  • 在 Pandas 数据帧上循环时跳过行

    我正在努力解决以下问题 并且似乎在网上找不到任何解决方案 我对数据框有一个 for 循环 该循环应该执行以下操作 如果 reversal 列的内容 1 则用 1 填充 action 列 跳过 125 行 用 1 填充 action 的下一个
  • 如何卸载 Visual Studio 2012 Update 2?

    我安装了 VS2012 然后更新到 VS2012 Update 2 因此我的 Visual Studio 版本为 11 0 60315 01 Update 2 但现在我想恢复到 11 0 50727 1 RTMREL 如何卸载更新 Visu
  • 将系统属性传递给spark-submit并从类路径或自定义路径读取文件

    我最近发现一种使用 logback 代替 log4j 的方法 https stackoverflow com a 45480145 1549135在 Apache Spark 中 既适合本地使用 也适合spark submit 然而 还缺少