2016-06-14 2 views
0

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> 

하지만이 도움이되지 않았다.

제안 사항?

답변

0

jar를 lib workflow.xml 옆의 lib 폴더 또는 sharelib에 복사 했습니까?

Hadoop 배포판에서 사용중인 Jackson 버전을 확인하고 해당 버전의 Jackson을 모든 곳에서 사용하십시오. 또한 다른 잭슨 항아리가 클래스 패스에 없다는 것을 확인할 가치가 있습니다. 이 하둡이 메서드를 호출을 시도하는 것 같습니다 예외에서 :

이 방법은 잭슨 version 2.3에 도입 된 com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering, 그래서 아마 더 이전 버전의 Jackson이 어딘가에 있습니다.

+0

예, 항아리는'/ lib'입니다. Oozie는 제대로 일을 시작할 수 있습니다. 문제는 AmazonDynamoDBClient에 액세스 할 때 발생합니다. 내부적으로'requirePropertyOrdering' 메소드를 호출하는 jackson 라이브러리를 사용하고 있습니다. hadoop 배포판의 jackson 버전을 사용하면 도움이 될지 알고 싶습니다. – Nik

+0

실제로, 확실히, 나는 잭슨 병을'/ lib'에 복사했습니다. 아직도 도움이되지 않았습니다. '/ lib'의 항아리와 같은 모양은 매퍼 노드와 감속기 노드의 classpath에 처음으로 놓이지 않습니다. – Nik

+1

확인되었습니다. hadoop 배포판에서 사용되는 버전으로'pom'에서 jackson 버전을 변경했습니다. – Nik