2012-06-16 13 views
12

Czy w Hadoop MapReduce można mieć wiele wejść z wieloma różnymi mapami? Każda klasa mapperów działa na innym zestawie wejść, ale wszystkie one emitują pary klucz-wartość zużywane przez ten sam reduktor. Zauważ, że nie mówię tutaj o łańcuchowaniu mapperów, mówię o równoległym uruchamianiu różnych twórców map, a nie sekwencyjnie.Czy w Hadoop MapReduce można mieć wiele wejść z wieloma różnymi mapami?

Odpowiedz

13

Nazywa się to złączeniem.

Chcesz użyć mapperów i reduktorów w pakietach. * (Starszych, ale wciąż obsługiwanych). Nowsze pakiety (mapreduce. *) Dopuszczają tylko jedno wejście mapera. Z mapred pakietów, należy użyć klasy MultipleInputs zdefiniowanie sprzężenia:

MultipleInputs.addInputPath(jobConf, 
        new Path(countsSource),  
        SequenceFileInputFormat.class, 
        CountMapper.class); 
MultipleInputs.addInputPath(jobConf, 
        new Path(dictionarySource), 
        SomeOtherInputFormat.class, 
        TranslateMapper.class); 

jobConf.setJarByClass(ReportJob.class); 
jobConf.setReducerClass(WriteTextReducer.class); 

jobConf.setMapOutputKeyClass(Text.class); 
jobConf.setMapOutputValueClass(WordInfo.class); 

jobConf.setOutputKeyClass(Text.class); 
jobConf.setOutputValueClass(Text.class); 
+5

Nowsze apis ('mapreduce' not' mapred') mają' MultipleInputs': http://hadoop.apache.org/common/docs/r1.0.3/api/org/apache/hadoop/mapreduce/lib /input/MultipleInputs.html –

+0

@Donald Miner: Absolutnie w porządku. –

+0

@DonaldMiner Niektóre wersje, ale wydaje się, że co najmniej 0.20.x nie, np. zwróć uwagę na brak opcji MultipleInputs tutaj: http://hadoop.apache.org/docs/r0.20.205.0/api/org/apache/hadoop/mapreduce/lib/input/ – kabuko

2

będę odpowiedzieć na pytanie z pytaniem, 2 odpowiedzi, i anty-zalecenia.

Pytanie brzmi: jakie korzyści można zaobserwować w równoległym uruchomieniu heterogenicznych zadań mapowych, a nie w seryjnym uruchomieniu, dostarczając jednorodne wyniki, które można odpowiednio przetasować? Czy chodzi o to, aby uniknąć dwukrotnego przechodzenia przez te same rekordy, raz z mapą tożsamości?

Pierwszą odpowiedzią jest zaplanowanie jednoczesnego wykonywania zadań tylko odwzorowujących, z których każda ma połowę swojej floty (lub jakikolwiek stosunek najlepiej odpowiada rozmiarowi danych wejściowych), wysyłając jednolite wyniki, a następnie zadanie redukujące, które wykonuje połączenie.

Drugą odpowiedzią jest stworzenie niestandardowego InputFormat, który jest w stanie rozpoznać i przekształcić oba smaki heterogenicznego wejścia. Jest to wyjątkowo brzydkie, ale pozwoli ci uniknąć niepotrzebnej mapy tożsamości pierwszej sugestii.

anty-zalecenie jest nie używać nieaktualnych API Hadoop z odpowiedzią Chrisa. Hadoop jest bardzo młody, ale API stabilizują się wokół "nowego" smaku. W końcu dojdziesz do wersji lock-in.

+0

Powód uruchomienia wielu maperów polega na tym, że możesz zaimplementuj operację spłaszczania podaną w dokumencie FlumeJava. Dane wyjściowe różnych twórców map mogą brać udział w tej samej operacji losowej. – tibbe

Powiązane problemy