2012-03-15 9 views
6

Jestem bardzo zdezorientowany z używania Avro z redukcją mapy i nie mogę znaleźć dobrych tutoriali do naśladowania.Zadanie mapreduce z wprowadzeniem zwykłego tekstu i wyjściem avro

Wygląda na to, że klasy takie jak AvroJob i AvroMapper są nastawione na problemy, gdy zarówno dane wejściowe, jak i wyjściowe są plikami danych Avro. A co powiesz, gdy wprowadzisz tylko zwykły tekst?

Konkretnie:

Moja odwzorowujący trwa LongWritable klucze i wartości tekstowe jako wejście. Emituje klucze tekstowe i wartości MyAvroRecord.

Mój reduktor pobiera jako klucze tekstowe i Iterator MyAvroRecords i emituje klucze tekstowe i wartości MyAvroRecord.

Jak uzyskać OutputFormat, który zapisałby te klucze tekstowe i wartości MyAvroRecord do pliku?

Cheers, Dave

Odpowiedz

6

Ok, więc pomyślałem to.

Zamiast narzędzia odwzorowującego, które generuje klucze tekstowe i wartości MyAvroRecord, potrzebowałem takiego, który wygenerowałby klucze AvroKey i wartości AvroValue. To było w stanie przekazać wyniki bezpośrednio do AvroReducera i mogłem użyć AvroJob.setOutputSchema() do obsługi wyjścia (nie musiałem w ogóle implementować OutputFormat).

+0

Hi Dave, staram się robić czegoś w przeciwieństwo. Moje wejście to tekst, a wyjście to Generic Record. Próbuję skonfigurować schemat Avro Input dla AvroJob, a następnie ustawić schemat wyjściowy jako schemat Generic Record. Ale nie wiem, jak zawrzeć schemat wejściowy, aby AvroJob mógł zrozumieć, że jest to zwykły tekst. Czy powinienem używać tylko setInputSchema() jako nic? –

0

Innym sposobem podejścia może być: wyjście programu odwzorowującego nie musi być AvroKey i AvroValue. Mogą to być ogólne typy danych wyjściowych, które stanowią dane wejściowe do reduktora. W reduktorze możemy wykonać konwersję Avro. Ustawiając typ Outputformat na Avro.

pozdrowienia, Sujoy

Powiązane problemy