EMR 마스터 노드에서 내 응용 프로그램을 실행하는 데 문제가 있습니다. 버전 1.11에 추가 된 일부 AWS SDK 메소드에 액세스해야합니다. 필요한 모든 의존성은 뚱뚱한 항아리에 번들로 묶여 응용 프로그램은 내 devbox에서 예상대로 작동합니다.AWS EMR 마스터 노드의 기본 aws-sdk jar 무시
그러나 앱이 EMR 마스터 노드에서 실행되면 메서드를 호출 할 때 NoSuchMethodError 예외로 실패하고 AWS SDK 버전 1.11 이상에 추가됩니다 (예 :
java.lang.NoSuchMethodError:
com.amazonaws.services.sqs.model.SendMessageRequest.withMessageDeduplicationId(Ljava/lang/String;)Lcom/amazonaws/services/sqs/model/SendMessageRequest;
내가 시작 JVM 인스턴스에 전달 된 클래스 경로 매개 변수에 아래로 추적 스파크 제출 특히
-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-자바 SDK를로드 /aws-java-sdk-sqs-1.10.75.1.jar 내 뚱뚱보 병에서 ver 1.11.77을 사용하는 대신.
Spark에서 내가 필요로하는 AWS SDK 버전을 강제로 사용할 수있는 방법이 있습니까?
그것은'당신의 제공 항아리가 클래스 경로 PARAMS를 오버라이드 (override) 할 수 있도록해야한다 true로 설정 spark.executor.userClassPathFirst' 것 같습니다. html –
@DaveMaple : spark-submit 명령 줄에 --conf spark.driver.userClassPathFirst = true를 추가하려고했습니다. 내 응용 프로그램은 스레드 "main"에 예외가 거의 즉시 존재합니다. java.lang.RuntimeException : java.lang.RuntimeException : class org.apache.hadoop.security.JniBasedUnixGroupsMappingWithFallback이 아닌 org.apache.hadoop.security.GroupMappingServiceProvider. 나에게 버전 충돌이있는 것 같습니다. –
. 네. 나는 우리가 단지 aws sdk에 대해서만 선택적이어야한다고 생각한다. 이것을 생각할 것이다. –