在运行 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 框架?