2013-09-30 2 views
2

일부 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 버전과의 충돌을 추측하고 우리 클러스터 관리자 에 더 연락합니다. 아이디어가 있습니까?

야민

답변

2

문제는 당신에 대해 실행하는 것보다 당신이 하둡의 매우 다른 버전에 대해 개발되어 거의 확실하다. CDH 4.4는 "MR1"과 "MR2"풍미가 있으며 새로운 "MR2"가 기본값입니다. 아마 당신은 Hadoop 1.x 배포판을 사용하고있을 것입니다. CDH 라이브러리를 컴파일 할 필요는 없지만 (여기서 가장 좋은 생각이다), 바로 여기 있다면 Hadoop 2.x를 컴파일 할 필요가있다.

"hadoop1"을 지정하지 않아도된다는 것을 제외하면 Avro는 괜찮습니다.

MR1을 실제로 사용하려면 CD1 4.4에서 실제로 MR1 클러스터를 설정해야합니다. 이것은 'yarn'대신 'mapreduce'서비스에 설치되고 이름에 "...- mr1 -..."이 포함 된 Maven 아티팩트를 사용한다는 의미입니다.

+0

안녕 션, 아직 해결되지 않았습니다. 나는 실제로 새로운 mapreduce API를 사용하여 MR1에 대해 컴파일하고 있으며, 우리의 CDH 4.4.1도 MR1로 구성되어 있습니다. 클러스터에 avro가 성공적으로 실행되지 않은 다른 프로그램이 있습니다. avro는 기본적으로 CDH 관리자와 함께 제공되지 않으므로 이후에는 수동으로 설치됩니다. 어쩌면 내가이 설치 진행에 대한 몇 가지 문제 해결이 필요합니다. – caesar0301

+0

그것은 문제가 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를 만나고 있음을 보여줍니다. –

+0

avro를 시도하여 최신 버전을 사용하기 시작했습니다. 나는 ur 통보를 시도하고이 2 개의 버전에 성냥을 제공 할 것이다. – caesar0301

0

이것은 버전의 신뢰성입니다. CDH 지원 Avro 버전은 현재 1.7.3입니다. 버전 변경으로 해결 된 1.7.5에서도 동일한 문제가 발생했습니다. CDH 워드 프로세서에서

: http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/latest/CDH4-Installation-Guide/CDH4-Installation-Guide.html#../CDH4-Installation-Guide/cdh4ig_topic_26_5.html

+0

CDH 4.4에는 Avro 1.7.4가 제공됩니다. 1.7.3은 아마 또한 작동 할 것입니다. –

2
  ` <dependency> 
     <groupId>org.apache.avro</groupId> 
     <artifactId>avro-mapred</artifactId> 
     <version>${avro.version}</version> 
     <classifier>hadoop2</classifier> 
    </dependency>` 

이 마법을했다! 자사가 hadoop2와 문제 및 hadoop1

는 참조 - https://issues.apache.org/jira/browse/AVRO-1170

위는

` org.apache.avro 브로 - mapred $ 클라우 데라

및 MapR 아마존 위해이었다 {브로 .version}

  <avro.version>1.7.6</avro.version> 
<hadoop.version> 1.0.3-mapr-2.1.3.1</hadoop.version>` 

이것들이 ... 해피 코딩 :)