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