gpt4 book ai didi

java - 覆盖 AWS EMR 主节点上的默认 aws-sdk jar

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:12:37 25 4
gpt4 key购买 nike

我在 EMR 主节点上运行我的应用程序时遇到了问题。需要访问一些1.11版本新增的AWS SDK方法。所有必需的依赖项都捆绑到一个 fat jar 中,应用程序在我的开发箱上按预期工作。

但是,如果应用程序在 EMR 主节点上执行,则在调用方法时会失败并出现 NoSuchMethodError 异常,在 AWS SDK ver 1.11+ 中添加,例如

java.lang.NoSuchMethodError:
com.amazonaws.services.sqs.model.SendMessageRequest.withMessageDeduplicationId(Ljava/lang/String;)Lcom/amazonaws/services/sqs/model/SendMessageRequest;

我追踪到传递给 JVM 实例的类路径参数,由 spark-submit 启动:

-cp /usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf/:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/usr/lib/spark/conf/:/usr/lib/spark/jars/*:/etc/hadoop/conf/

特别是,它加载/usr/share/aws/aws-java-sdk/aws-java-sdk-sqs-1.10.75.1.jar,而不是使用我的 fat jar 中的版本 1.11.77。

有没有办法强制 Spark 使用我需要的 AWS SDK 版本?

最佳答案

以下是我在尝试解决此问题时学到的知识。

默认类路径参数是使用 /etc/spark/conf/spark-defaults.conf 中的 spark.driver.extraClassPath 设置构建的。 spark.driver.extraClassPath 包含对旧版本 AWS SDK 的引用,它位于 /usr/share/aws/aws-java-sdk/*

为了使用较新版本的 AWS API,我将 jar 上传到我在主目录中创建的目录,并在 --driver-class-path spark-submit< 中指定它 参数:

--driver-class-path '/home/hadoop/aws/*'

关于java - 覆盖 AWS EMR 主节点上的默认 aws-sdk jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41685941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com