我正在尝试在spark应用程序中运行我的spark示例postgress数据库。我将spark命令行参数作为spark-submit --packages org.postgresql:postgresql:9.3-1101.jdbc41.jar,但我是仍然没有找到类异常。你能帮我解决一下我的问题吗?
答案 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
目录中查找软件包及其相关性。~/.ivy2
目录下。就我而言,我已经观察到
spark-shell
与--packages
选项完美配合spark-submit
将无法执行相同的操作。它将正确下载依赖项,但无法将jar传递给驱动程序和工作程序节点spark-submit
而不是集群在本地运行驱动程序,则--packages
与--deploy-mode client
选项一起使用。 我发现以下讨论很有用,但我仍然必须确定这个问题。 https://github.com/databricks/spark-redshift/issues/244#issuecomment-347082455
大多数人只是使用UBER jar来避免遇到此问题,甚至避免平台所提供的相同依赖项jar的版本不同的jar版本冲突的问题。
但是我不喜欢停顿安排之外的想法,并且仍在寻找解决方案。