내 모든 프로그램은 hadoop의 새로운 MR1 인터페이스 (org.apache.hadoop.mapreduce)로 작성하므로 avro의 새로운 org.apache.avro.mapreduce도 사용하고 싶습니다. 그러나 그것은 나를 위해 작동하지 않습니다.AVRO org.apache.avro.mapreduce 인터페이스로 프로그래밍하는 방법은 무엇입니까?
프로그램은 avro 데이터를 입력 받아 출력합니다. 내 프로그램의 주된 아이디어는 avro wrapped key/value에 대한 hadoop의 Mapper와 Reducer를 하위 클래스 화하는 것입니다.
AvroJob.setInputKeySchema(job, NetflowRecord.getClassSchema());
AvroJob.setOutputKeySchema(job, NetflowRecord.getClassSchema());
job.setMapperClass(MyAvroMap.class);
job.setReducerClass(MyAvroReduce.class);
job.setInputFormatClass(AvroKeyInputFormat.class);
job.setOutputFormatClass(AvroKeyOutputFormat.class);
job.setMapOutputKeyClass(AvroKey.class);
job.setMapOutputValueClass(AvroValue.class);
job.setOutputKeyClass(AvroKey.class);
job.setOutputValueClass(NullWritable.class);
MyAvroMap 및 MyAvroReduce 서브 클래스의 respectivly의 정의가 methioned NetflowRecord 내 아 브로 기록 클래스입니다
public static class MyAvroMap extends Mapper<AvroKey<NetflowRecord>, NullWritable,
AvroKey<CharSequence>, AvroValue<NetflowRecord>>{ ... }
public static class MyAvroReduce extends Reducer<AvroKey<CharSequence>, AvroValue<NetflowRecord>,
AvroKey<NetflowRecord>, NullWritable>{ ... }
같습니다 여기 내 직업 드라이버의 블록이다. 내가 하둡의와 브로의 소스 코드, 를 읽어 예외
java.lang.ClassCastException: class org.apache.avro.hadoop.io.AvroKey
을 실행있어 내가 예외가 지도 키 WritableComparable의 서브 클래스 확인 JobConf에 의해 발생 된 것을 발견,이 (hadoop1.2.1 같은, line759)
WritableComparator.get(getMapOutputKeyClass().asSubclass(WritableComparable.class));
그러나 브로는 AvroKey 및 AvroValue가 하둡 * 쓰기 가능한 인터페이스를 하위없이 단순한 래퍼 것을 보여준다.
테스트를 거치지 않고도 오래된 매핑 된 인터페이스를 사용할 수 있다고 생각합니다.하지만 원하는 것은 아닙니다. 순수 org.apache.avro.mapreduce 인터페이스를 사용하여 프로그래밍에 대한 예제 또는 설명을 제공 할 수 있습니까? 감사합니다
,
야민
하드 검색 후