2013-01-25 10 views
13

Mamy wiele danych dotyczących interakcji użytkowników z różnych stron internetowych przechowywanych w Cassandra, takich jak pliki cookie, odwiedzane strony, reklamy wyświetlane, klikane reklamy itp., Które chcielibyśmy wykonywać raportowanie. Nasz aktualny schemat Cassandra obsługuje podstawowe raporty i zapytania. Jednakże chcielibyśmy również tworzyć duże zapytania, które zazwyczaj obejmują łączenia w dużych rodzinach kolumn (zawierających miliony wierszy).Analityka i wydobywanie danych z Cassandra

Jakie podejście najlepiej nadaje się do tego? Jedną z możliwości jest wyodrębnienie danych do relacyjnej bazy danych, takiej jak mySQL, i eksploracja danych w tym miejscu. Alternatywą może być próba użycia hadoopu z ulem lub świnią do uruchomienia mapy, aby ograniczyć zapytania w tym celu? Muszę przyznać, że mam zerowe doświadczenie z tym ostatnim.

Ktoś ma doświadczenie w różnicach wydajności w jednym z nich w stosunku do drugiego? Czy uruchomisz mapę, zmniejszając zapytania w żywej instancji produkcyjnej Cassandra lub w kopii zapasowej, aby zapobiec wpływowi obciążenia na wydajność zapisu?

Odpowiedz

8

Ujawnienie: Jestem inżynierem w DataStax.

Oprócz sugestii Charlesa, możesz zajrzeć do DataStax Enterprise (DSE), która oferuje przyjemną integrację Cassandry z Hadoop, Hive, Pig i Mahout.

Jak wspomniał Charles, nie chcesz uruchamiać analityki bezpośrednio w stosunku do węzłów Cassandra, które obsługują Twoje potrzeby aplikacji w czasie rzeczywistym, ponieważ mogą mieć znaczny wpływ na wydajność. Aby tego uniknąć, DSE pozwala na poświęcenie części swojego klastra wyłącznie analizom za pomocą wielu wirtualnych "centrów danych" (w sensie NetworkToplogyStrategy tego terminu). Zapytania wykonywane w ramach zadania Hadoop będą oddziaływać tylko na te węzły, zasadniczo pozostawiając nienaruszone normalne węzły Cassandra. Ponadto można skalować każdą część klastra w górę lub w dół oddzielnie w zależności od potrzeb związanych z wydajnością.

Istnieje kilka zalet podejścia DSE. Po pierwsze nie trzeba wykonywać żadnych ETL przed przetwarzaniem danych; Normalne mechanizmy replikacji Cassandry zapewniają aktualność węzłów poświęconych analitykom. Po drugie, nie potrzebujesz zewnętrznego klastra Hadoop. DSE zawiera zamiennik dla HDFS o nazwie CFS (CassandraFS), więc wszystkie dane źródłowe, wyniki pośrednie i końcowe wyniki z zadania Hadoop mogą być przechowywane w klastrze Cassandra.

+0

Cześć Tyler, dziękuję bardzo! Masz bardzo interesującą perspektywę! Czy możesz wskazać mi jakąś dokumentację opisującą zdolność DSE do poświęcenia części klastra Cassandry na analitykę? –

+0

Mam problem ze znalezieniem jednej strony, która je podsumowuje, ale przeczytaj o [NetworkTopologyStrategy] (http://www.datastax.com/docs/1.1/cluster_architecture/replication#networktopologystrategy) (jeśli go nie znasz). Dane CFS mają tylko repliki w analityce "DC", a dane Cassandra mają repliki w obu. Normalne węzły Cassandra mogą pisać w LOCAL_QUORUM, a węzły analityczne mogą odczytywać w LOCAL_QUORUM, więc żaden DC nie będzie miał znaczącego wpływu na wydajność drugiego. Może to być również przydatne: http://www.datastax.com/docs/1.1/cluster_architecture/about_client_requests –

+0

Dzięki Tylerowi udało mi się przeczytać na ten temat i rozwiązuje to wiele z naszych problemów. Na pewno spróbujemy zastosować to podejście. –

13

Z mojego doświadczenia Cassandra jest lepiej przystosowana do procesów, w których potrzebny jest dostęp w czasie rzeczywistym do danych, szybkie losowe odczyty i ogólnie obsługują duże obciążenie ruchem. Jednakże, jeśli zaczniesz wykonywać skomplikowane analizy, dostępność twojego klastra Cassandra prawdopodobnie znacznie ucierpi. Ogólnie rzecz biorąc z tego, co widziałem, w najlepszym interesie leży pozostawienie samego klastra Cassandra, w przeciwnym razie dostępność zaczyna cierpieć.

Wygląda na to, że potrzebujesz platformy analitycznej i zdecydowanie zaleciłabym wyeksportowanie Twoich danych raportowania z Cassandra do użycia w systemie hurtowni danych offline.

Jeśli możesz sobie na to pozwolić, posiadanie prawdziwego magazynu danych pozwoliłoby ci na wykonywanie złożonych zapytań ze złożonymi łączeniami na tabelach wielokrotnych. Te systemy danych hurtowni są szeroko stosowane do raportowania, tutaj jest lista tego, co jest moim zdaniem kluczowi gracze:

  • Netezza
  • Aster/Teradata
  • Vertica

Niedawna Ten, który zyskuje dużo impetu, jest Amazon Redshift, ale obecnie jest w wersji beta, ale jeśli możesz go zdobyć, możesz spróbować, ponieważ wygląda na solidną platformę analityczną, której cena jest o wiele bardziej atrakcyjna niż powyższe. rozwiązania.

Alternatywne rozwiązania, takie jak używanie Hadoop MapReduce/Hive/Pig są również interesujące, ale prawdopodobnie nie zastępują technologii Hadoop. Polecam Hive, jeśli masz tło SQL, ponieważ bardzo łatwo będzie zrozumieć, co robisz i możesz łatwo skalować. W rzeczywistości istnieją już biblioteki zintegrowane z Hadoop, takie jak Apache Mahout, które pozwalają na eksplorację danych w klastrze Hadoop, powinieneś zdecydowanie spróbować i sprawdzić, czy pasuje on do twoich potrzeb.

Aby dać ci pomysł, podejście, które dotychczas stosowałem, działa dobrze, wstępnie agreguje wyniki w Hive, a następnie generuje raporty w hurtowni danych, takiej jak Netezza, w celu obliczenia złożonych połączeń .

+1

Dziękuję bardzo za twoje wnikliwe komentarze. Znalazłem inny artykuł [tutaj.] (Https://www.quantivo.com/blog/top-5-reasons-not-use-hadoop-analytics). Myśli tam są echem w kategoriach użycia ula/maczugi. Wierzę, że używanie agregatu/ula/świni do wstępnego agregowania danych, a następnie zrzucenie do relacyjnej hurtowni danych w celu analizy, to właściwa droga. –