在运行 spark 应用程序时包含 aws jdbc 驱动程序

Posted

技术标签:

【中文标题】在运行 spark 应用程序时包含 aws jdbc 驱动程序【英文标题】:Include aws jdbc driver while running spark application 【发布时间】:2017-02-13 11:58:01 【问题描述】:

我正在尝试在 spark 应用程序中从 redshift 中提取数据。我包含了一些依赖项,并且我能够在我的本地计算机上执行此操作。但是当我尝试在 Amazon EMR 上运行应用程序时出现以下错误。 以下是我要执行的命令:

spark-submit --class classname --packages com.databricks:spark-avro_2.11:3.0.0,com.databricks:spark-redshift_2.11:2.0.1,com.databricks:spark-csv_2.11:1.5.0,com.amazon.redshift:redshift-jdbc41:1.2.1 --deploy-mode client /mnt/firstRun.jar

它会抛出以下错误:

::::::::::::::::::::::::::::::::::::::::::::::

::          UNRESOLVED DEPENDENCIES         ::

::::::::::::::::::::::::::::::::::::::::::::::

:: com.amazon.redshift#redshift-jdbc41;1.2.1: not found

::::::::::::::::::::::::::::::::::::::::::::::

:: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS
Exception in thread "main" java.lang.RuntimeException: [unresolved dependency: com.amazon.redshift#redshift-jdbc41;1.2.1: not found]
at org.apache.spark.deploy.SparkSubmitUtils$.resolveMavenCoordinates(SparkSubmit.scala:1066)
at org.apache.spark.deploy.SparkSubmit$.prepareSubmitEnvironment(SparkSubmit.scala:294)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:158)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:124)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Command exiting with ret '1'

我知道我提供 jdbc 驱动程序包的方式有问题。我这样做是因为我的 Maven 依赖项是:

<dependency>
  <groupId>com.amazon.redshift</groupId>
  <artifactId>redshift-jdbc41</artifactId>
  <version>1.2.1.1001</version>
</dependency>

我以groupId:artifactId:version的形式定义了包。 提前谢谢你。

【问题讨论】:

--packages 选项提供 maven 坐标,但该包不在 maven 中。您将不得不以另一种方式提供 jar,例如与您的 fatjar 捆绑在一起。 【参考方案1】:

我觉得答案和我这里Write data to Redshift using Spark 2.0.1的答案一样

基本上,如果您不在 EMR 上运行,则必须下载 JDBC 驱动程序并将其放在 Maven 可以找到的位置。

在 EMR 上它已经存在,因此您可以像这样引用它

spark-submit …blah… --jars /usr/share/aws/redshift/jdbc/RedshiftJDBC41.jar

【讨论】:

以上是关于在运行 spark 应用程序时包含 aws jdbc 驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

zeppelin aws中的spark python错误运行程序

使用 jdb 调试 Java servlet。如何将 jdb 与 Tomcat 连接

如何在没有 Spark-Shell 的情况下从 AWS 控制台运行 Spark jar 文件

如何在 AWS Elastic Beanstalk 上安装/运行 Spark Java 框架?

AWS Glue - Spark 作业 - 如何增加内存限制或更有效地运行?

关于在集群 (AWS) 上运行 Spark 作业的说明