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

时间:2017-02-13 11:58:02

标签: maven apache-spark amazon-redshift

我正在尝试从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的形式定义了包。 提前谢谢。

1 个答案:

答案 0 :(得分: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