spark-submit --packages在我的集群上不起作用可能是什么原因?

时间:2017-04-14 18:32:37

标签: scala maven apache-spark

我正在尝试在spark应用程序中运行我的spark示例postgress数据库。我将spark命令行参数作为spark-submit --packages org.postgresql:postgresql:9.3-1101.jdbc41.jar,但我是仍然没有找到类异常。你能帮我解决一下我的问题吗?

2 个答案:

答案 0 :(得分:1)

如果您可以提供一些代码段并解释如何构建jar并在群集上运行它的步骤,将会更有帮助。另外,执行模式(客户端/集群)是什么?因为classNotFoundException的可能原因有时可能特定于您如何进行spark-submit调用。

以下代码为我工作。你可以尝试一下。

在eclipse中的scala maven项目中的scala对象文件下面创建: 代码是:

x = nil

之后,我首先在eclipse上本地测试了上面的代码,以验证代码是否正常工作。 然后,使用maven来构建jar。

最后从mac终端运行以下命令: 在本地模式: ./spark-submit --class SparkPGSQLConnect --master local [*] - driver-class-path postgresql-42.0.0.jre6.jar~ / SPGTestClient.jar

在群集模式下: ./spark-submit --class SparkPGSQLConnect --master yarn --deploy-mode cluster --conf spark.executor.memory = 200 mb --conf spark.executor.cores = 2 --conf“spark.driver.extraClassPath = postgresql-42.0.0.jre6.jar“〜/ SPGTestCluster.jar

我需要明确的一些罐子是: postgresql-42.0.0.jre6.jar(这是我需要的,因为我得到:线程中的异常“main”java.sql.SQLException:尝试从我的mac终端进行spark-submit时没有合适的驱动程序错误。)

答案 1 :(得分:0)

此处有类似的问题spark-submit classpath issue with --repositories --packages options

遇到此问题时,我正在使用Spark 2.4.0。我还没有解决方案,只是基于实验的一些观察和阅读解决方案。我在此向他们指出是为了防止某些人进行调查。如果以后再找到更多信息,我将更新此答案。

  • 只有在必须引用某些自定义存储库的情况下,才需要--repositories选项
  • 默认情况下,如果未提供--repositories选项,则使用maven中央存储库
  • 指定了--packages选项时,submit操作将尝试在~/.ivy2/cache~/.ivy2/jars~/.m2/repository目录中查找软件包及其相关性。
  • 如果找不到它们,则使用ivy从maven Central下载它们并将其存储在~/.ivy2目录下。

就我而言,我已经观察到

  • spark-shell--packages选项完美配合
  • spark-submit将无法执行相同的操作。它将正确下载依赖项,但无法将jar传递给驱动程序和工作程序节点
  • 如果我使用spark-submit而不是集群在本地运行驱动程序,则
  • --packages--deploy-mode client选项一起使用。
  • 这将在我运行spark-submit命令的命令外壳中本地运行驱动程序,但是工作程序将在具有适当依赖项jar的群集上运行

我发现以下讨论很有用,但我仍然必须确定这个问题。 https://github.com/databricks/spark-redshift/issues/244#issuecomment-347082455

大多数人只是使用UBER jar来避免遇到此问题,甚至避免平台所提供的相同依赖项jar的版本不同的jar版本冲突的问题。

但是我不喜欢停顿安排之外的想法,并且仍在寻找解决方案。