2015-10-04 54 views
0

我在Intellij中使用scala構建spark項目。我已經添加了以下相關:Spark中Redshift的連接錯誤

spark-redshift_2.10-0.5.1-SNAPSHOT 
RedshiftJDBC41-1.1.7.1007 
httpcore-4.4.3 
httpclient-4.5.1 
aws-java-sdk-s3-1.10.23-SNAPSHOT 
aws-java-sdk-core-1.10.23-SNAPSHOT 

我收到以下錯誤:

java.lang.NoClassDefFoundError: Could not initialize class com.amazonaws.services.s3.internal.ServiceUtils 

運行

val df = sqlContext.read.foramat("com.databricks.spark.redshift") 
.option("url", "jdbc:redshift://AWS_SERVER:5439/warehouse?user=USER&password=PWD") 
.option("dbtable", "fact_time") 
.option("tempdir", "s3n://bucket/path") 
.load() 

df.show() 
+0

我在想你的問題。解決方案是將你的依賴關係放在s3上,在集羣啓動時複製它們,在你的集羣上安裝,然後運行你的應用程序。 – eliasah

回答

2

當我幫助過的spark-redshift issues page調試這個問題。最終turned out問題是由於在com.amazonaws.services.s3.internal.ServiceUtils類的靜態初始化過程中導致ClassNotFoundExceptions的傳遞依賴性導致的,導致此處報告錯誤。解決的辦法是將這些缺失的依賴項添加到IntelliJ項目中。