我正在尝试运行访问dynamodb的spark作业,并且不推荐使用旧的实例化dynamoDb客户端的方法,现在建议使用客户端构建器。
嗯,这在本地工作正常,但是当我部署到EMR时,我收到了这个错误:
线程“main”中的异常java.lang.IllegalAccessError:尝试从类com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsyncClientBuilder访问类com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientConfigurationFactory
导致此问题的代码是:
libraryDependencies += "com.amazonaws" % "aws-java-sdk" % "1.11.114"
我的build.sbt包含:
function destroyer(arr) {
// Remove all the value;
return arr;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
和我的spark-submit命令如下所示:
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,但仍然没有变化。
答案 0 :(得分:1)
我在这里没有完美的答案,但我正在努力解决类似的问题,在EMR上运行胖胖的jar构建Spark驱动程序。所以我放弃了我最近的巡演。
-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)。 --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 repos的一些讨论:https://github.com/aws/aws-sdk-java/issues/1094
结论:现在使用aws-java-sdk版本1.10.75的apis