2013-04-05 4 views
2

AvroKeyOutput을 출력 형식으로 사용하는 감속기가 있습니다. 기본적으로 MapReduce는 모든 키를 단일 출력 파일에 씁니다. 각 키 값에 대해 별도의 출력 파일에 쓰고 싶습니다. Avro는 AvroMultipleOutputs 메서드를 제공하지만 예제는 슬림합니다. Apache AvroMultipleOutputs에서 제공하는 것은 작업을 정의 할 때 다양한 출력을 미리 구성하는 방법을 보여줍니다. 예는 보여줍니다

JOB :
AvroMultipleOutputs.addNamedOutput(job, "avro1", AvroOutputFormat.class, schema);
AvroMultipleOutputs.addNamedOutput(job, "avro2", AvroOutputFormat.class, null);

감속기 : 내가 필요가 얼마나 많은 파일 모르는
amos = new AvroMultipleOutputs(conf);
amos.getCollector("avro1", reporter).collect(datum);
amos.getCollector("avro2", "A", reporter).collect(datum);
amos.getCollector("avro3", "B", reporter).collect(datum);
AvroMultipleOutputs를 사용하여 여러 출력 파일 만들기

그러나 또는 그들의 이름이 무엇인지, 그것은 내 감속기에서 나오는 키 값. 동적 파일 이름 지정을 수용하기 위해이를 어떻게 수정할 수 있습니까?

답변

1

이 상황에서 사용할 수있는 전략 :

  • 은지도 만 일을 (영 작업을 감소)
  • 이 키 값을 사용하는 map() 중 하나라는 다중 출력 구성
  • 을 사용 기본 출력 경로는 AvroMultipleOutputs.write(String namedOutput, Object key, Object value, String baseOutputPath)
+0

감사합니다.이 방법은 훨씬 간단합니다. 나는 그것을 과소 평가했다. – RedRobin2202

+1

지도 전용 작업없이이를 수행 할 수있는 방법이 있습니까? – technocrat

+0

예. 나는 당신이 여전히 Map-Reduce로 이것을하고 싶다고 가정하고 있습니다, 그렇죠? 그룹화 전략을 고려해야하며 각 (r) 감속기에서 (n) 키를 얻는다 고 가정하면 최대 r x n 개의 출력 파일을 얻을 수 있습니다. 다시 말하지만 하나의 이름을 사용하고 baseOutputPath 값에 키의 문자열 값을 사용하십시오. – ohhorob

관련 문제