2

我正在嘗試運行訪問dynamodb的spark任務,並且實例化dynamoDb客戶端的舊方式已被棄用,現在建議使用客戶端構建器。在EMR中運行spark任務時發生IllegalAccessError

好了,這在當地工作正常,但是當我部署到EMR我得到這個錯誤:

Exception in thread "main" java.lang.IllegalAccessError: tried to access class com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientConfigurationFactory from class com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsyncClientBuilder

我的代碼導致該是:

val dynamoDbClient = AmazonDynamoDBAsyncClientBuilder 
    .standard() 
    .withRegion(Regions.US_EAST_1) 
    .build() 

我build.sbt包含:

libraryDependencies += "com.amazonaws" % "aws-java-sdk" % "1.11.114" 

和我的火花提交命令如下:

spark-submit --conf spark.eventLog.enabled=false --packages com.typesafe.play:play-json_2.11:2.5.9,com.github.traviscrawford:spark-dynamodb:0.0.6,com.amazonaws:aws-java-sdk:1.11.114 --master yarn --deploy-mode cluster --class Main application.jar

有沒有人有任何想法?我能忽略一些基本的東西嗎

更新

我注意到,EMR正在運行的OpenJDK 1.8和我的本地系統上運行Oracle的Java 1.8。我改變了EMR集羣以匹配我正在運行的java,但仍然沒有改變。

回答

1

我沒有一個完美的答案在這裏,但我正在與一個類似的問題與一個胖的jar構建Spark驅動程序運行EMR。所以我放棄了我最近的巡演。

  1. 嘗試使用選項-v運行spark-submit並查看有關類路徑等的日誌。正如我所看到的,EMR也加載了aws-java-sdk。它不清楚我的哪個版本的aws-java-sdk EMR正在運行? EMR版本4.7.0規定「將AWS SDK for Java升級到1.10.75」(http://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-whatsnew.html)。
  2. 然後添加另一個參數--conf spark.driver.userClassPathFirst=true 以加載驅動程序指定的aws-java-sdk版本。

不幸的是,最後一步提高紗線的錯誤:Unable to load YARN support ...(上一些討論:https://community.cloudera.com/t5/Advanced-Analytics-Apache-Spark/spark-submit-fails-after-setting-userClassPathFirst-to-true/td-p/46778

從AWS-Java的SDK的github回購一些討論:https://github.com/aws/aws-sdk-java/issues/1094

結論:對於現在使用aws-java-sdk版本1.10.75

+0

有趣的是,我會給它一個鏡頭並報告回來。至於「無法加載YARN支持...」必須嘗試在客戶端模式下運行才能看到它是否工作? –

相關問題