일부 MapR 프로그램을 작성 중입니다. 보통 로컬 머신의 Apache hadoop에서 코드화되고 테스트되며 및 패키지 된 jar (종속성 포함)가 Cloudera CDH4 (v4.4.1)를 실행하는 클러스터에 업로드됩니다. 두 경우 모두 패키지를 만들기 위해 다른 pom.xml 파일이 있습니다.Cloudera CDH4는 Avro와 어떻게 작동합니까?
이제 Apache Avro를 사용하여 데이터를 직렬화하고 현재 안정적인 버전 1.7.5가 사용되었습니다. 로컬 모드에서, 나는 브로 - mapred의 pom.xml 의존성을
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro-mapred</artifactId>
<version>1.7.5</version>
</dependency>
을 가지고 있고 그것은 아파치 하둡에 잘 작동합니다. CDH4 doc에 의해 제안 클러스터 모드에서
는 pom.xml 파일 종속성에 대한 분류 태그가 추가됩니다 :
<classifier>hadoop1</classifier>
그러나 어느 hadoop1 또는 hadoop2와
이 오류가 발생합니다. hadoop1 태그 : hadoop2 태그Error running child : java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.TaskAttemptContext, but class was expected
at org.apache.avro.mapreduce.AvroKeyOutputFormat.getRecordWriter(AvroKeyOutputFormat.java:87)
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:597)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:444)
at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
at org.apache.hadoop.mapred.Child.main(Child.java:262)
, 내가 MapR1의 새로운 맵리 듀스 인터페이스를 사용하여 프로그래밍하고
Error running child : java.lang.NoSuchMethodError: org.apache.avro.generic.GenericData.createDatumWriter(Lorg/apache/avro/Schema;)Lorg/apache/avro/io/DatumWriter;
at org.apache.avro.mapreduce.AvroKeyRecordWriter.<init>(AvroKeyRecordWriter.java:53)
at org.apache.avro.mapreduce.AvroKeyOutputFormat$RecordWriterFactory.create(AvroKeyOutputFormat.java:78)
at org.apache.avro.mapreduce.AvroKeyOutputFormat.getRecordWriter(AvroKeyOutputFormat.java:104)
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:597)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:444)
at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
at org.apache.hadoop.mapred.Child.main(Child.java:262)
. 나는 또한 설치된 avro 버전과의 충돌을 추측하고 우리 클러스터 관리자 에 더 연락합니다. 아이디어가 있습니까?
야민
안녕 션, 아직 해결되지 않았습니다. 나는 실제로 새로운 mapreduce API를 사용하여 MR1에 대해 컴파일하고 있으며, 우리의 CDH 4.4.1도 MR1로 구성되어 있습니다. 클러스터에 avro가 성공적으로 실행되지 않은 다른 프로그램이 있습니다. avro는 기본적으로 CDH 관리자와 함께 제공되지 않으므로 이후에는 수동으로 설치됩니다. 어쩌면 내가이 설치 진행에 대한 몇 가지 문제 해결이 필요합니다. – caesar0301
그것은 문제가 Avro처럼 보입니다. Avro는 도서관이기 때문에 Cloudera Manager에는 그 자체로 장소가 없습니다. Hadoop의 일부이므로 CDH의 일부입니다. 방금 Avro 1.7.5라고 말한 것을 깨달았습니다. 1.7.4에서 1.7.5로 업데이트 할 때 어떤 문제가 생겼다는 것을 기억합니다. 그러나이 문제는 생각지 않습니다. 버전이 CDH/Hadoop과 일치하도록 조언 드리겠습니다. 직접적으로 1.7.4라고 생각합니다. 이 오류는 Avro가 Hadoop 1 용으로 제작되었지만 Hadoop 2를 만나고 있음을 보여줍니다. –
avro를 시도하여 최신 버전을 사용하기 시작했습니다. 나는 ur 통보를 시도하고이 2 개의 버전에 성냥을 제공 할 것이다. – caesar0301