Oozie를 통해 hadoop 작업을 실행하려고합니다. 작업이 AWS의 DynamoDB에 데이터를 업로드합니다. 따라서 AmazonDynamoDBClient
을 사용합니다. 나는 감속기에 다음과 같은 예외를 얻을 : Oozie의 YARN 클래스 경로 편집
2016-06-14 10:30:52,997 FATAL [main] org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z
at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:458)
at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:379)
at com.amazonaws.util.json.Jackson.<clinit>(Jackson.java:32)
at com.amazonaws.internal.config.InternalConfig.loadfrom(InternalConfig.java:233)
at com.amazonaws.internal.config.InternalConfig.load(InternalConfig.java:251)
at com.amazonaws.internal.config.InternalConfig$Factory.<clinit>(InternalConfig.java:308)
at com.amazonaws.util.VersionInfoUtils.userAgent(VersionInfoUtils.java:139)
at com.amazonaws.util.VersionInfoUtils.initializeUserAgent(VersionInfoUtils.java:134)
at com.amazonaws.util.VersionInfoUtils.getUserAgent(VersionInfoUtils.java:95)
at com.amazonaws.ClientConfiguration.<clinit>(ClientConfiguration.java:42)
at com.amazonaws.PredefinedClientConfigurations.dynamoDefault(PredefinedClientConfigurations.java:38)
at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.<init>(AmazonDynamoDBClient.java:292)
at com.mypackage.UploadDataToDynamoDBMR$DataUploaderReducer.setup(UploadDataToDynamoDBMR.java:396)
at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:168)
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:627)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:389)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
나는 모든 종속성을 패키지 지방 항아리를 사용 Oozie의
lib
디렉토리에 항아리를 복사.
필자는 pom의 dependency management를 사용하여 2.4x (AWS Dynamodb SDK에서 사용)의 fasterxml jackson 종속성을 고정했습니다. 그러나, 실행이 감속기에서 발생하면, 어떻게 든 fastxml jackson의 다른 버전이 classpath에서 처음 나타난다 (또는 그렇게 믿는다).
나는 또한 dynamodb 및 aws sdks에서 jackson 종속성을 제외했습니다.
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-dynamodb</artifactId>
<version>1.10.11</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-core</artifactId>
<version>1.10.11</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
내 항아리가 맵퍼 및 리듀서의 클래스 패스에서 첫 번째 항아리인지 어떻게 확인할 수 있습니까? 나는 this page에 제안을 시도하고 작업의 구성 XML에 다음 속성을 추가 :
<property>
<name>oozie.launcher.mapreduce.user.classpath.first</name>
<value>true</value>
</property>
하지만이 도움이되지 않았다.
제안 사항?
예, 항아리는'/ lib'입니다. Oozie는 제대로 일을 시작할 수 있습니다. 문제는 AmazonDynamoDBClient에 액세스 할 때 발생합니다. 내부적으로'requirePropertyOrdering' 메소드를 호출하는 jackson 라이브러리를 사용하고 있습니다. hadoop 배포판의 jackson 버전을 사용하면 도움이 될지 알고 싶습니다. – Nik
실제로, 확실히, 나는 잭슨 병을'/ lib'에 복사했습니다. 아직도 도움이되지 않았습니다. '/ lib'의 항아리와 같은 모양은 매퍼 노드와 감속기 노드의 classpath에 처음으로 놓이지 않습니다. – Nik
확인되었습니다. hadoop 배포판에서 사용되는 버전으로'pom'에서 jackson 버전을 변경했습니다. – Nik