2017-02-13 84 views
0

我試圖從spark應用程序中的redshift中提取數據。我包括一些依賴項,並且我能夠在我的本地計算機中執行此操作。但是當我嘗試在Amazon EMR上運行應用程序時,出現以下錯誤。 以下是我試圖執行命令:在運行spark應用程序時包含aws jdbc驅動程序

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

的'--packages'選項提供行家COORDS,但那個包是不是行家。你將不得不以另一種方式提供jar,比如捆綁你的fatjar。 – ImDarrenG

回答

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