2013-04-01 12 views
13

Zarządzam niewielkim zespołem programistów i w dowolnym momencie mamy kilka uruchomionych (jednorazowych) projektów danych, które można uznać za "Embarrassingly parallel" - na ogół wymagają one uruchomienia jednego skrypt na pojedynczym komputerze przez kilka dni, klasycznym przykładem byłoby przetwarzanie kilku tysięcy plików PDF, aby wyodrębnić kluczowy tekst i umieścić go w pliku CSV w celu późniejszego wstawienia do bazy danych.Używanie Hadoop do przetwarzania równoległego zamiast Big Data

Wykonujemy teraz wystarczająco dużo zadań tego typu, że zacząłem badać rozwój prostego systemu kolejki zadań za pomocą RabbitMQ z kilkoma zapasowymi serwerami (z myślą o wykorzystaniu Amazon SQS/S3/EC2 dla projektów wymagających większego skalowania)

W poszukiwaniu przykładów inni robią to trzymam napotykając klasyczny przykład Hadoop New York Times:

The New York Times stosowanego 100 instancji EC2 Amazon i aplikacji Hadoop przetwarzać 4 TB surowy image Dane TIFF (przechowywane w S3) na 11 milionów gotowych plików PDF w ciągu 24 godzin przy kosztach obliczeniowych około 240 USD (bez uwzględnienia przepustowość)

Co brzmi idealnie? Zbadałem więc Hadoop i Map/Reduce.

Ale nie mogę się domyślić, jak to zrobili? Albo dlaczego to zrobili?

Konwersja plików TIFF w formacie PDF nie jest z pewnością problemem Map/Reduce? Czy prosta kolejka zadań nie byłaby lepsza?

Innym klasycznym przykładem Hadoop jest "wordcount" z Yahoo Hadoop Tutorial, który idealnie pasuje do Map/Reduce, i widzę, dlaczego jest on tak potężnym narzędziem dla Big Data.

Nie rozumiem, w jaki sposób te "żenująco równoległe" zadania są wprowadzane do schematu mapowania/zmniejszania?

TL; DR

To bardzo koncepcyjny pytanie, w zasadzie chcę wiedzieć, jak bym dopasować zadania do „przetwarzania kilka tysięcy plików PDF wyodrębnić jakąś kluczową tekst i umieść w pliku CSV” w a Map/Reduce pattern?

Jeśli znasz przykłady, które byłyby idealne, nie proszę o napisanie tego za mnie.

(Uwagi: Mamy kod do przetwarzania plików PDF, nie pytam o to - to tylko przykład, może to być dowolne zadanie.) Pytam o umieszczenie takich procesów w Hadoop Map/Reduce wzór - gdy nie ma wyraźnych elementów "Map" lub "Zmniejsz" do zadania.)

Pozdrawiam!

+1

... Każdy węzeł przetwarza pliki PDF i wyprowadza cokolwiek. Nie wiem, jak warto używać Hadoop, ponieważ jest to dość proste, aby po prostu wyrzucać wiadomości - prawdopodobnie tylko wtedy, gdy masz już działające klastry. Hadoop może być używany do dość arbitralnych zadań, ale to nie znaczy, że * powinien * być. –

+0

Będę dodawać do odpowiedzi, które powiedział Hadoop ma przetwarzania równoległego i przełączania awaryjnego. Tak jak wiele istniejących kolejek zadań (takich jak rabbitmq), gdy używasz ich jako pull/worker. Każda praca nie powiedzie się ponownie ponownie, dopóki jeden pracownik nie potwierdzi, że broker to zrobił. Tylko równoległe przetwarzanie i JobTracker nie mogą być jedynymi przyczynami korzystania z Hadoop. Instalowanie, konfigurowanie i utrzymywanie klastrów Hadoop jest naprawdę czasochłonne. Nie wspominając już o tym, że potrzebujesz specjalistów. Sprawdź, czy to, co chcesz, może pasować do systemów rozproszonych, najpierw używając Kolejki zadań, a następnie rozważ Hadoop. – Maziyar

Odpowiedz

5

Twoje myślenie jest słuszne.

Powyższe przykłady, o których Pan wspomniał, wykorzystywały tylko część rozwiązania, które oferuje hadoop. Zdecydowanie użyli zdolności przetwarzania równoległego hadoopu i rozproszonego systemu plików. Nie jest konieczne, aby zawsze trzeba było zmniejszyć krok. Nie może występować żadna współzależność danych między uruchomionymi równoległymi procesami. w takim przypadku wyeliminujesz krok redukcji.

Myślę, że twój problem również będzie pasował do domeny rozwiązania hadoop.

Masz ogromny danych - ogromną liczbę plików PDF i długi bieg pracę

można przetwarzać te pliki równolegle poprzez umieszczenie plików na HDFS i prowadzenie pracy MapReduce. Twój czas przetwarzania teoretycznie poprawia się o liczbę węzłów, które masz w swoim klastrze. Jeśli nie widzisz potrzeby agregowania zestawów danych, które są tworzone przez poszczególne wątki, nie musisz używać kroku zmniejszania, musisz również zaprojektować krok zmniejszania.

Chodzi o to, że jeśli nie potrzebujesz kroku zmniejszania, po prostu wykorzystujesz zdolność równoległą komputerów stacjonarnych i jesteś przygotowany do wykonywania zadań na niezbyt drogim sprzęcie.

+2

Zrobiłem o wiele więcej badań i "Map Only" było kluczem (pomijając krok redukujący) - Więcej szczegółów tutaj dla przyszłych czytelników: http://horicky.blogspot.co.uk/2010/08/designing-algorithmis-for- map-reduce.html – Snowpoch

+1

Również po przeczytaniu jeszcze więcej Hadoop odchodzi od bycia tylko "Map/Reduce" specyficzne - z "YARN" (część Hadoop 2) pozwolą ci na inne rzeczy, takie jak wykresy i zadania rozproszone (I wierzę, że mają przykład o nazwie "DistributedShell", który uruchamia to samo polecenie w każdym węźle Hadoop - Ale muszę jeszcze to przetestować) – Snowpoch

+1

@Rags Czy możemy uruchomić prosty program forloop na wielu węzłach równolegle, zmniejszając rozmiar problemu w każdym węźle używając Hadoop? – DeepSidhu1313

1

Muszę dodać jeszcze jedną rzecz: obsługa błędów i ponowienie próby. W środowisku rozproszonym awarie węzłów są dość powszechne. Regularnie prowadzę klaster EMR składający się z kilkuset węzłów w czasie przez 3 - 8 dni i dowiaduję się, że 3 lub 4 zawodzą w tym okresie. Hadoop JobTracker ładnie ponownie prześle nieudane zadania (do określonej liczby razy) w innym węźle.