2009-08-02 13 views
11

Chciałbym analizować ciągły strumień danych (dostęp za pośrednictwem protokołu HTTP) przy użyciu podejścia MapReduce, więc zajmuję się Apache Hadoop. Niestety wygląda na to, że Hadoop spodziewa się, że rozpocznie pracę z plikiem wejściowym o stałym rozmiarze, a nie będzie w stanie przekazywać nowych danych konsumentom, gdy nadejdzie. Czy tak jest rzeczywiście, czy też czegoś brakuje? Czy istnieje inne narzędzie MapReduce, które działa z odczytanymi danymi z otwartego gniazda? Skalowalność jest tutaj problemem, więc wolałbym, aby MapReducer poradził sobie z bałaganem.Dane transmisyjne i Hadoop? (nie Hadoop Streaming)

Grałem z Cascading i udało mi się uruchomić zadanie na statycznym pliku dostępnym przez HTTP, ale to właściwie nie rozwiązuje mojego problemu. Mogłabym użyć curl jako pośredniego kroku do zrzucenia danych gdzieś w systemie plików Hadoop i napisać watchdoga, żeby odpalił nową pracę za każdym razem, gdy nowa porcja danych jest gotowa, ale to jest brudny hack; musi być jakiś bardziej elegancki sposób na zrobienie tego. Jakieś pomysły?

Odpowiedz

10

Hack, który opisujesz jest mniej więcej standardowym sposobem robienia rzeczy - Hadoop jest zasadniczo systemem wsadowym (po pierwsze, jeśli nie ma końca danych, Reduktory nie mogą się nigdy uruchomić, muszą rozpocząć się po zakończeniu fazy mapy).

Obracanie dzienników; kiedy je obracasz, zrzuć je do HDFS. Wykonaj proces nadzorujący (prawdopodobnie rozproszony, skoordynowany za pomocą ZooKeeper), monitorujący zwałowiska i uruchamia nowe zadania przetwarzania. Będziesz chciał upewnić się, że zadania są uruchamiane na wejściach wystarczająco dużych, aby zagwarantować narzut.

Hbase to klon BigTable w ekosystemie maczuga, który może być dla Ciebie interesujący, ponieważ pozwala na ciągły strumień wstawek; nadal jednak będziesz musiał uruchamiać zapytania analityczne w trybie wsadowym.

2

Myślę, że powinieneś rzucić okiem na Esper CEP (http://esper.codehaus.org/).

+0

Nie znam się dobrze na tym polu, ale na pierwszy rzut oka podobała mi się także ActiveInsight (licencja CPAL - wymaga atrybucji). –

0

Twój przypadek użycia brzmi podobnie do pisania robota sieciowego przy użyciu Hadoop - strumień danych powraca (powoli) z gniazd otwartych w celu pobrania zdalnych stron za pośrednictwem protokołu HTTP.

Jeśli tak, to patrz Why fetching web pages doesn't map well to map-reduce. I możesz chcieć sprawdzić klasę FetcherBuffer w Bixo, która implementuje podejście gwintowane w reduktorze (poprzez kaskadowanie) w celu rozwiązania tego typu problemu.

6

Co z http://s4.io/. Jest przeznaczony do przetwarzania danych strumieniowych.

Aktualizacja

Nowy produkt rośnie: Storm - Rozproszone i odporny na uszkodzenia obliczeń w czasie rzeczywistym: Przetwarzanie strumienia, ciągłe obliczeń, rozprowadzane RPC, a

+1

Myślę, że jest to poprawny adres URL dla S4: http://incubator.apache.org/s4/ – Bklyn

1

Yahoo S4 http://s4.io/

ona stanowić realne przetwarzanie strumieniowe w czasie, jak na przykład zmniejszanie mapy

0

Jak wiadomo, głównymi problemami z Hadoopem do wykorzystania w eksploracji strumieniowej jest fakt, że po pierwsze używa on HFDS, który jest operacją dyskową i dyskową powodującą opóźnienie, które spowoduje brak danych w strumieniu. po drugie, jest to, że rurociąg nie jest równoległy. Map-reduce generalnie działa na partiach danych, a nie instancji, tak jak w przypadku danych strumieniowych.

Niedawno przeczytałem artykuł o M3, który rozwiązuje pierwszy problem, pozornie omijając HDFS i wykonując obliczenia w pamięci w bazie danych obiektów. A w drugim numerze używają przyrostowych uczniów, których już nie ma w partii. Warto to sprawdzić M3 : Stream Processing on Main-Memory MapReduce. Nie mogłem znaleźć kodu źródłowego ani interfejsu API tego M3 gdziekolwiek, jeśli ktoś go znalazł, proszę udostępnij link tutaj.

Również Hadoop Online jest również inny prototyp, który próbami rozwiązania tych samych problemów jak M3 robi: Hadoop Online

Jednak Apache Storm jest kluczem do rozwiązania problemu, jednak to nie wystarcza. Potrzebujesz odpowiedniej euqivalent map-redukuj, dlatego potrzebujesz biblioteki o nazwie SAMOA, która ma świetne algorytmy do nauki online, której nie ma.

1

Wiele opcji tutaj. Proponuję połączenie Kafka i Storm + (Hadoop lub NoSql) jako rozwiązanie. Już budujemy naszą platformę dużych zbiorów danych przy użyciu tych narzędzi opensource i działa ona bardzo dobrze.

0

Kilka szkieletów i produktów do przetwarzania strumienia dojrzałego jest dostępnych na rynku. Struktury Open Source to np. Apache Storm lub Apache Spark (które mogą działać zarówno na Hadoop). Możesz także użyć produktów takich jak IBM InfoSphere Streams lub TIBCO StreamBase.

Spójrz na ten artykuł InfoQ, który szczegółowo objaśnia przetwarzanie strumienia oraz wszystkie te frameworki i produkty: Real Time Stream Processing/Streaming Analytics in Combination with Hadoop. Poza tym artykuł wyjaśnia również, w jaki sposób jest to komplementarne do Hadoop. Nawiasem mówiąc: Wielu dostawców oprogramowania, takich jak Oracle czy TIBCO, nazywa to podejście do przetwarzania strumieniowego/przesyłania strumieniowego "szybkimi danymi" zamiast "dużymi danymi", ponieważ trzeba działać w czasie rzeczywistym zamiast przetwarzania wsadowego.

+0

Wystarczy, że dodasz więcej informacji: Zobacz mój post na blogu, aby uzyskać szczegółowe porównanie [kiedy użyć strumienia przetwarzania framweork vs. produkt] [1]. Podsumowując, możesz ** używać tych narzędzi do przetwarzania danych w ruchu **. Niemniej jednak możesz (lub musisz) nadal przechowywać je gdzieś. Dlatego te frameworki i produkty można również łączyć z Apache Hadoop (tylko do przechowywania lub do przetwarzania przez uruchomienie jednego z frameworków w Hadoop). Ponadto slajdy omawiają to bardziej szczegółowo. [1]: http://www.kai-waehner.de/blog/2015/10/25/comparison-of-stream-processing-frameworks-and-products/ –

0

Powinieneś wypróbować Apache Spark Streaming. Powinno działać dobrze dla twoich celów.