2013-08-29 10 views
18

wiem, że istnieją podobne pytania do tego, takie jak:Wyjaśnienie przypadków użycia dla Hadoop kontra RabbitMQ + Seler

ale pytam to ponieważ szukam szczególnego wyróżnienia popartego kilkoma przykładami przypadków użycia, proszę.

Tak, jestem użytkownikiem pyton, który chce, aby programy, które obaj/obie:

  1. są zbyt duże, aby
  2. zbyt długo

zrobić na jednym komputerze i przetwarzać je na wielu komputerach. Jestem zaznajomiony z pakietem wieloprocesowym (single-machine) w pythonie i teraz piszę kod stylu mapreduce. Wiem, że moja funkcja, na przykład, jest łatwa do zrównoleglenia.

W pytając moich zwykłych inteligentnych CS porady-dawców, mam sformułować moje pytanie jako:

„Chcę podjąć zadania, podzielić ją na pęczek podzadań, które są wykonywane jednocześnie na kilka maszyn, następnie wyniki te mają być agregowane i rozpatrywane zgodnie z inną funkcją, która może być redukcją, lub może być instrukcją do seryjnego dodawania do bazy danych, na przykład. "

Zgodnie z tym rozpadem mojego przypadku użycia, myślę, że równie dobrze mógłbym użyć Hadoop lub zestawu pracowników Selera + brokera RabbitMQ. Jednak, kiedy pytam mędrców, którzy udzielają porad, reagują na mnie tak, jakbym był całkowicie szalony, aby spojrzeć na Hadoop i Seler jako porównywalne rozwiązania. Czytałem sporo o Hadoopie, a także o Celery - myślę, że mam całkiem dobre pojęcie o tym, co robią - to, czego nie rozumiem, to:

  1. Dlaczego oni uważane za tak oddzielne, tak różne?
  2. Biorąc pod uwagę, że wydają się one odbierane jako całkowicie różne technologie - w jaki sposób? Jakie są przypadki użycia, które odróżniają jeden od drugiego lub są lepsze dla jednego niż drugiego?
  3. Jakie problemy można rozwiązać za pomocą obydwu i na jakie obszary byłoby szczególnie głupie, gdyby jeden lub drugi został użyty?
  4. Czy są możliwe lepsze, prostsze sposoby uzyskania wieloprocesorowej funkcji Pool.map() na wielu komputerach? Wyobraźmy sobie, że mój problem nie jest ograniczony przez pamięć masową, ale przez procesor i pamięć RAM wymaganą do obliczeń, więc nie ma problemu z posiadaniem zbyt małej przestrzeni do przechowywania wyników zwróconych przez pracowników. (tzn. robię coś w rodzaju symulacji, gdzie muszę generować wiele rzeczy na mniejszych maszynach obsianych wartością z bazy danych, ale są one zmniejszane, zanim powrócą do maszyny źródłowej/bazy danych.)

Rozumiem, że Hadoop to duży standard danych, ale Seler również wygląda na dobrze obsługiwany; Doceniam to, że to nie java (pyton do strumieniowania API musi używać dla hadoopów wydawał mi się niewygodny), więc byłbym skłonny użyć opcji Seler.

Odpowiedz

20
  1. one są takie same w obu że może rozwiązania, które opisać problem (mapa-zmniejszenie).Różnią się tym, że Hadoop jest całkowicie zbudowany, aby rozwiązać tylko ten przypadek, a Celey/RabbitMQ jest zbudowany w celu ułatwienia wykonywania zadań na różnych węzłach za pomocą przekazywania wiadomości. Seler obsługuje również różne zastosowania.

  2. Hadoop rozwiązuje problem polegający na zmniejszeniu liczby map poprzez posiadanie dużego i specjalnego systemu plików, z którego odwzorowuje dane, wysyła je do grupy węzłów map i redukuje do tego systemu plików. Ma to tę zaletę, że naprawdę szybko to robi. Wadą jest to, że działa tylko na danych wprowadzanych tekstowo, Python nie jest tak naprawdę obsługiwany i że jeśli nie możesz zrobić (nieznacznie) różnych zastosowań. Selery to program do wykonywania zadań oparty na komunikatach. W nim definiujesz zadania i grupujesz je w przepływie pracy (który może być przepływem pracy map-reduce). Jego zaletą jest to, że jest oparty na pythonie, że można łączyć zadania razem w niestandardowym przepływie pracy. Wadą jest poleganie na pojedynczym brokerze/backend wyniku i jego czas konfiguracji.

  3. Więc jeśli masz kilka plików logicznych Gb i nie chcesz pisać w Javie i masz trochę wolnych serwerów, które są używane wyłącznie do uruchamiania Hadoop, użyj tego. Jeśli chcesz mieć elastyczność w uruchamianiu zadań z przepływem zadań, użyj Seler. Lub .....

  4. Tak! Jest nowy projekt jednej z firm, które pomogły stworzyć protokół przesyłania komunikatów AMQP, który jest używany przez RabbitMQ (i inne). Nazywa się to ZeroMQ i przenosi rozproszone wysyłanie wiadomości/wykonanie na wyższy poziom, dziwnie obniżając poziom w porównaniu do Selera. Definiuje gniazda, które można łączyć ze sobą na różne sposoby w celu utworzenia łączy komunikacyjnych między węzłami. Wszystko, co chcesz zrobić z tymi wiadomościami, należy do Ciebie. Chociaż może to brzmieć "co jest dobre w cienkim opakowaniu wokół gniazda", to faktycznie znajduje się na odpowiednim poziomie abstrakcji. W tej chwili w naszej firmie analizujemy wszystkie wiadomości związane z selerem i przebudowujemy je za pomocą ZeroMQ. Stwierdziliśmy, że Seler jest po prostu zbyt zdeterminowany, w jaki sposób należy wykonywać zadania i że konfiguracja/konfiguracja w ogóle jest uciążliwa. Również pośrednik w środku, który musi obsługiwać cały ruch, stał się wąskim gardłem.

skrócie:

  • Policz wystąpienia „na” w książce z jako mniej programowania, jak to możliwe i dużo czasu setup/config: Hadoop
  • Tworzenie zadań atomowych i móc niech współpracują z niewielkim programowaniem i wieloma ustawieniami/konfiguracją: Celery
  • Masz pełną kontrolę nad tym, co zrobić z wiadomościami i jak je programować prawie bez czasu konfiguracji/konfiguracji: ZeroMQ
  • Mam ból bez konfiguracji/konfiguracji: Gniazda
+0

Prowadzę śledztwo w tej sprawie i uważam, że masz rację, a to było bardzo pomocne. ZeroMQ jest do tej pory niesamowity. Jest to dziwne porowate miejsce pomiędzy rozproszonym przetwarzaniem a właściwym routingiem wiadomości, programowaniem sieci. Nadal próbuję to rozwiązać. – Mittenchops

+0

Uwielbiam ZeroMQ. Dzięki! – Mittenchops

+1

@Mittenchops Cieszę się, że cię wygrałem. Przejście początkowej przeszkody zajmuje trochę czasu, ale warto. – RickyA