【问题标题】:spark-submit how to specify that dependent libraries are inside application's jarspark-submit 如何指定依赖库在应用程序的 jar 中
【发布时间】:2017-02-24 13:08:26
【问题描述】:

我正在为 Spark 2.1.0 构建一个小型测试应用程序,在我的计算机上作为 2 个工作集群运行,并将依赖库打包到我的应用程序的 jar 文件中。如何在 spark-submit 期间告诉 Spark 应用程序的 jar 文件中的库?否则我会在线程“main”java.lang.NoClassDefFoundError 中遇到异常。

或者应该将依赖库复制到 Spark?

提前致谢。

【问题讨论】:

  • Spark 不支持 MapReduce 支持的“应用程序 jar 中的库”功能。

标签: apache-spark


【解决方案1】:

要添加外部库,请在以下目录中添加应用程序 jar

spark.driver.extraLibraryPath spark.driver.extraClassPath
spark.executor.extraClassPath
spark.executor.extraLibraryPath

您可以在 /etc/spark/conf.dist/spark-defaults.conf 文件中找到上述目录的路径

【讨论】:

  • 所以 spark 本身并没有在罐子里看?
  • 您需要检查您是如何打包应用程序 jar 的。我假设您正在使用 maven 或 sbt 来构建您的 jar。构建和打包是否成功完成?
  • 我正在使用 IntelliJ IDEA。我的罐子里应该有一些特别的东西吗?所有库都在 jar 的根目录中。
【解决方案2】:

更简单的方法是构建一个 uber jar - 您在 pom 中的所有依赖项都将添加到您的 jar 中。

另一个也是最好的方法是 -

  1. 在集群类路径(在 pom 将它们作为提供的范围)
  2. 任何第三方库都可以 使用“--jars /fullpath/your.jar”添加火花提交或通过 spark.driver.extraLibraryPath, spark.driver.extraClassPath, spark.executor.extraClassPath,spark.executor.extraLibraryPath 为 上面提到的。

【讨论】:

  • 我使用所有依赖项构建 jur,但 spark 在加载时找不到这些。
猜你喜欢
  • 2015-06-08
  • 2016-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2015-04-28
相关资源
最近更新 更多