Różnica między świnią a ulem? Dlaczego oba? [Zamknięte]

256

Moje pochodzenie - 4 tygodnie w świecie Hadoop. Trochę zanurzał się w Hive, Pig i Hadoop, używając Cladodera Hadoop VM. Przeczytałem artykuł Google na temat Map-Reduce i GFS ( link PDF ).

Rozumiem, że-

  • Język świni Pig Latin jest odejściem od (odpowiada to, co myślą programiści) języka SQL podobnym do deklaratywnego stylu programowania, a język zapytań Hive bardzo przypomina SQL.

  • Świnia siedzi na wierzchu Hadoopa i w zasadzie może również siedzieć na Driadzie. Mogę się mylić, ale Hive jest ściśle związany z Hadoop.

  • Zarówno Pig Latin, jak i Hive kompilują się do mapowania i zmniejszania zadań.

Moje pytanie - jaki jest cel posiadania obu, gdy jeden (powiedzmy Świnia) mógłby służyć temu celowi. Czy tylko dlatego, że Świnia jest ewangelizowana przez Yahoo! i Hive przez Facebook?

Arnkrishn
źródło
24
Hive jest dla danych strukturalnych. Świnia służy do danych nieustrukturyzowanych.
Dead Programmer,

Odpowiedzi:

151

Sprawdź ten post od Alana Gatesa, architekta Pig'a w Yahoo !, który porównuje, kiedy użyłby SQLa jak Hive zamiast Pig. Przedstawia bardzo przekonujący argument na temat przydatności języka proceduralnego, takiego jak Pig (vs. deklaratywny SQL) i jego użyteczności dla projektantów przepływu danych.

Jakob Homan
źródło
Alan pisze także artykuł na temat Hive, jak udostępniono poniżej w j03m. Dobre rzeczy od niego!
Dolan Antenucci
14
Hive jest dla danych strukturalnych. Świnia służy do danych nieustrukturyzowanych.
Dead Programmer,
7
Jestem zmieszany. Czy miałeś na myśli „[...] przydatność języka proceduralnego , takiego jak Świnia”? Ponieważ artykuł wielokrotnie twierdzi, że „Pig Latin is Procedural”.
Matt Fenwick
4
Nie jestem pewien, czy to tymczasowe, ale wydaje się, że artykuł zniknął. Czy możesz zaktualizować link (nie mogłem go znaleźć za pomocą szybkiego wyszukiwania)?
Peter Klipfel
1
Wpis
57

Hive został zaprojektowany, aby odwołać się do społeczności znającej SQL. Jego filozofią było to, że nie potrzebujemy kolejnego języka skryptowego. Hive obsługuje mapowanie i redukowanie skryptów transformacji w języku wybranym przez użytkownika (który może być osadzony w klauzulach SQL). Jest szeroko stosowany na Facebooku przez analityków znających się na SQL, a także przez programistów zajmujących się eksploracją danych w Pythonie. Wysiłki na rzecz zgodności SQL w Pig zostały porzucone AFAIK - więc różnica między tymi dwoma projektami jest bardzo wyraźna.

Obsługa składni SQL oznacza również, że możliwa jest integracja z istniejącymi narzędziami BI, takimi jak Microstrategy. Hive ma sterownik ODBC / JDBC (który jest w toku), który powinien pozwolić na to w najbliższej przyszłości. Zaczyna także dodawać obsługę indeksów, która powinna umożliwić obsługę zapytań drążenia w dół w typowych środowiskach.

Wreszcie - nie ma to bezpośredniego związku z pytaniem - Hive to platforma do wykonywania zapytań analitycznych. Podczas gdy jego dominującym zastosowaniem jest przeszukiwanie plików płaskich, nie ma powodu, dla którego nie może przesyłać zapytań do innych sklepów. Obecnie Hive może być używany do przeszukiwania danych przechowywanych w Hbase (który jest magazynem klucz-wartość, takim jak te znajdujące się w większości większości RDBMS), a projekt HadoopDB użył Hive do zapytania o federacyjną warstwę RDBMS.

Joydeep Sen Sarma
źródło
37

Uważam, że jest to najbardziej pomocne (choć ma roczek ) - http://yahoohadoop.tumblr.com/post/98256601751/pig-and-hive-at-yahoo

Mówi w szczególności o Pig vs Hive oraz o tym, kiedy i gdzie są zatrudnieni w Yahoo. Uważam to za bardzo wnikliwe. Kilka interesujących notatek:

Przy przyrostowych zmianach / aktualizacjach zestawów danych:

Zamiast tego połączenie z nowymi danymi przyrostowymi i wykorzystanie wyników wraz z wynikami z poprzedniego pełnego łączenia jest poprawnym podejściem. Zajmie to tylko kilka minut. Standardowe operacje na bazie danych mogą być realizowane w ten sposób przyrostowo w Pig Latin, dzięki czemu Pig jest dobrym narzędziem w tym przypadku użycia.

W przypadku korzystania z innych narzędzi za pośrednictwem przesyłania strumieniowego:

Integracja Pig ze strumieniowaniem ułatwia także naukowcom pobranie skryptu Perl lub Python, który już debugowali na małym zestawie danych i uruchomienie go na ogromnym zestawie danych.

Podczas korzystania z Hive do hurtowni danych:

W obu przypadkach model relacyjny i SQL są najlepiej dopasowane. Rzeczywiście, hurtownia danych była jednym z głównych przypadków użycia SQL przez większą część swojej historii. Ma odpowiednie konstrukcje do obsługi typów zapytań i narzędzi, z których chcą korzystać analitycy. I jest już używany zarówno przez narzędzia, jak i użytkowników w terenie.

Podprojekt Hadoop Hive zapewnia interfejs SQL i model relacyjny dla Hadoop. Zespół Hive rozpoczął prace nad integracją z narzędziami BI za pośrednictwem interfejsów takich jak ODBC.

j03m
źródło
1
+1 świetnie, aby zobaczyć porównanie Yahoo, który jest z tego, co rozumiem, oryginalnego twórcy Pig, a przynajmniej bardzo dużego zwolennika. Edycja: z powyższego Jakob widzę, że autor (Alan Gates) jest Pig Architect w Yahoo - tak wielki udział :)
Dolan Antenucci
3
Link jest martwy. Myślę, że poprawny adres URL w tym momencie to: https://developer.yahoo.com/blogs/hadoop/pig-hive-yahoo-464.html .
agarie
1
Zaktualizowany link powyżej
j03m
Nie znaleziono już 2 udostępnionych powyżej linków.
Keshav Pradeep Ramanath
28

Zobacz porównanie Pig Vs Hive w skorupce orzecha z artykułu „dezyre”

Hive jest lepszy niż PIG w: partycjach, serwerze, interfejsie internetowym i obsłudze JDBC / ODBC.

Niektóre różnice:

  1. Hive jest najlepsza dla danych strukturalnych i PIG jest najlepsze dla naczep danych strukturalnych

  2. Hive służy do raportowania i PIG dla programowania

  3. Hive jest używany jako deklaratywnej SQL & PIG jako języka proceduralnego

  4. Hive obsługuje partycje i PIG nie

  5. Hive może rozpocząć opcjonalnego się serwera zapobiegliwości w oparciu i PIG nie może

  6. Hive wcześniej definiuje tabele ( schemat ) + przechowuje informacje o schemacie w bazie danych, a PIG nie ma dedykowanych metadanych bazy danych

  7. Hive nie obsługuje Avro, ale PIG obsługuje. EDYCJA: Hive obsługuje Avro, określ serde jako org.apache.hadoop.hive.serde2.avro

  8. Pig obsługuje również dodatkową funkcję COGROUP do wykonywania połączeń zewnętrznych, ale gałęzi nie. Ale zarówno Hive, jak i PIG mogą łączyć się, porządkować i sortować dynamicznie.

Ravindra babu
źródło
17

Uważam, że prawdziwą odpowiedzią na twoje pytanie jest to, że były to / były niezależne projekty i nie było centralnie koordynowanego celu. Wcześnie znajdowały się w różnych przestrzeniach i wraz z rozwojem obu projektów nakładały się na siebie.

Parafrazując z książki Hadoop O'Reilly:

Pig: język i środowisko przepływu danych do eksploracji bardzo dużych zbiorów danych.

Hive: rozproszona hurtownia danych

SOL__
źródło
22
Hive to nic innego jak RDBMS. Przetwarza pliki płaskie podobnie jak Pig. Oboje w zasadzie robią to samo. Spójrz na optymalizatory, których używają podczas kompilacji zadania, ponieważ jest to największa prawdziwa różnica.
Steve Severance
12

Podobne wyniki można uzyskać dzięki zapytaniom świni / ula. Główna różnica polega na podejściu do rozumienia / pisania / tworzenia zapytań.

Pig ma tendencję do tworzenia przepływu danych: małe kroki, w których przy każdym przetwarzaniu
Hive daje język podobny do SQL do obsługi danych, więc transformacja z RDBMS jest znacznie łatwiejsza (Pig może być łatwiejszy dla kogoś, kto wcześniej nie miał doświadczenia z SQL)

Warto również zauważyć, że dla Hive możesz mieć przyjemny interfejs do pracy z tymi danymi (wosk pszczeli dla HUE lub interfejs sieciowy Hive), a także daje przerzuty do informacji o twoich danych (schemacie itp.), Co jest przydatne jako centralna informacja o twoich danych.

Używam zarówno Hive, jak i Pig, do różnych zapytań (używam tego, w którym mogę pisać zapytania szybciej / łatwiej, robię to w ten sposób głównie zapytania ad hoc) - mogą używać tych samych danych jako danych wejściowych. Ale obecnie większość pracy wykonuję za pomocą wosku pszczelego.

wlk
źródło
12

Pig umożliwia ładowanie danych i kodu użytkownika w dowolnym punkcie rurociągu. Może to być szczególnie ważne, jeśli dane są danymi przesyłanymi strumieniowo, na przykład danymi z satelitów lub instrumentów.

Hive, który jest oparty na RDBMS, musi najpierw zaimportować (lub załadować) dane, a następnie nad nimi pracować. Więc jeśli korzystałeś z Hive do przesyłania strumieniowego danych, musiałbyś nadal wypełniać wiadra (lub pliki) i używać gałęzi na każdym wypełnionym wiadrze, a jednocześnie używać innych wiader do przechowywania nowo przybyłych danych.

Świnia używa również leniwej oceny. Umożliwia większą łatwość programowania i można go używać do analizowania danych na różne sposoby z większą swobodą niż w języku podobnym do SQL, takim jak Hive. Więc jeśli naprawdę chciałeś analizować macierze lub wzorce w niektórych nieuporządkowanych danych, które posiadałeś i chciałeś wykonać na nich interesujące obliczenia, w Pig możesz przejść spory dystans, podczas gdy w Hive potrzebujesz czegoś innego do zabawy z wynikami.

Świnia jest szybsza w imporcie danych, ale wolniejsza w wykonywaniu niż przyjazny język RDBMS, taki jak Hive.

Świnia jest dobrze przystosowana do równoległości, więc może mieć przewagę w systemach, w których zestawy danych są ogromne, tj. W systemach, w których bardziej zależy Ci na przepustowości twoich wyników niż na opóźnieniu (czas na uzyskanie konkretnej bazy danych wyników).

Swarb
źródło
10

Hive Vs Pig-

Hive jest jak interfejs SQL, który pozwala doświadczonym użytkownikom SQL lub innym narzędziom, takim jak Tableu / Microstrategy / dowolne inne narzędzie lub język, który ma interfejs SQL.

PIG jest bardziej podobny do potoku ETL .. z komendami krok po kroku, takimi jak deklarowanie zmiennych, zapętlanie, iterowanie, instrukcje warunkowe itp.

Wolę pisać skrypty Pig niż ula QL, gdy chcę pisać skomplikowaną logikę krok po kroku. Kiedy czuję się komfortowo, pisząc jedną sql do pobierania danych, chcę użyć Hive. dla gałęzi musisz zdefiniować tabelę przed zapytaniem (tak jak w RDBMS)

Oba są różne, ale pod jednym dachem, oba robią to samo, konwertują na programy zmniejszające mapę. Społeczność Open Source Apache dodaje coraz więcej funkcji do obu tam projektów

Ashwin Aravind
źródło
7
  1. Pig-Latin to styl przepływu danych, bardziej odpowiedni dla inżyniera oprogramowania. Podczas gdy SQL jest bardziej odpowiedni dla analityków, którzy są przyzwyczajeni do SQL. W przypadku złożonego zadania w ulu należy ręcznie utworzyć tymczasową tabelę do przechowywania danych pośrednich, ale nie jest to konieczne dla świni.

  2. Pig-Latin nadaje się do skomplikowanej struktury danych (jak mały wykres). W świni istnieje struktura danych o nazwie DataBag, która jest kolekcją Tuple. Czasami trzeba obliczyć metryki, które obejmują wiele krotek (istnieje ukryty link między krotkami, w tym przypadku nazwałbym to grafem). W takim przypadku bardzo łatwo jest napisać UDF, aby obliczyć metryki obejmujące wiele krotek. Oczywiście można to zrobić w ulu, ale nie jest to tak wygodne jak u świni.

  3. Moim zdaniem pisanie UDF na świni jest łatwiejsze niż w Hive.

  4. Pig nie obsługuje metadanych (lub jest opcjonalny, w przyszłości może zintegrować hcatalog). Hive ma metadane tabel przechowywane w bazie danych.

  5. Możesz debugować skrypt świni w lokalnym środowisku, ale trudno byłoby to zrobić ula. Powodem jest punkt 3. Musisz skonfigurować metadane gałęzi w lokalnym środowisku, co jest bardzo czasochłonne.

zjffdu
źródło
4

Z linku: http://www.aptibook.com/discuss-technical?uid=tech-hive4&question=What-kind-of-datawarehouse-application-is-suitable-for-Hive ?

Hive nie jest pełną bazą danych. Ograniczenia projektowe i ograniczenia Hadoop i HDFS nakładają ograniczenia na możliwości Hive.

Hive jest najbardziej odpowiedni dla aplikacji hurtowni danych, gdzie

1) Analizowane są względnie statyczne dane,

2) Szybkie czasy reakcji nie są wymagane, i

3) Gdy dane nie zmieniają się gwałtownie.

Hive nie zapewnia kluczowych funkcji wymaganych do OLTP, przetwarzania transakcji online. Jest bliżej bycia narzędziem OLAP, Online Analytic Processing. Dlatego Hive najlepiej nadaje się do aplikacji hurtowni danych, w których duży zestaw danych jest utrzymywany i wydobywany w celu uzyskania wglądu, raportów itp.

Margon
źródło
4

Mówiąc prościej, Pig jest platformą wysokiego poziomu do tworzenia programów MapReduce używanych z Hadoop, za pomocą skryptów świni przetworzymy dużą ilość danych do pożądanego formatu.

Po uzyskaniu przetworzonych danych te przetworzone dane są przechowywane w HDFS do późniejszego przetworzenia w celu uzyskania pożądanych rezultatów.

Oprócz przechowywanych przetworzonych danych zastosujemy polecenia HIVE SQL, aby uzyskać pożądane wyniki, wewnętrznie te polecenia ula sql uruchamiają programy MAP Reduce.

użytkownik3167459
źródło
nie jest to naprawdę znaczący dodatek do bazy wiedzy. spróbuj dodać więcej informacji
agconti
4

W skrócie:

1) Świnia jest relacyjną algebrą nad hadoopem

2) Hive to SQL over hadoop (jeden poziom powyżej Pig)

exAres
źródło
Porównanie algebry jest interesujące
Ravindra babu
3

Co HIVE może zrobić, co nie jest możliwe w PIG?

Partycjonowanie można wykonać za pomocą HIVE, ale nie w PIG, jest to sposób na ominięcie wyjścia.

Co PIG może zrobić, co nie jest możliwe w HIVE?

Odwoływanie się do pozycji - nawet jeśli nie masz nazw pól, możemy odwoływać się za pomocą pozycji takiej jak 0 $ - dla pierwszego pola, 1 $ dla drugiego i tak dalej.

Kolejną zasadniczą różnicą jest to, że PIG nie potrzebuje schematu do zapisywania wartości, ale HIVE potrzebuje schematu.

Możesz połączyć się z dowolną aplikacją zewnętrzną do HIVE za pomocą JDBC i innych, ale nie z PIG.

Uwaga: Oba działają na systemie HDFS (rozproszony system plików hadoop), a instrukcje są konwertowane na programy Map Reduce.

221B
źródło
3

Kiedy używamy Hadoopw tym sensie, oznacza to, że próbujemy ogromnego przetwarzania danych . Ostatecznym celem przetwarzania danych byłoby wygenerowanie z niego treści / raportów.

Więc wewnętrznie składa się z 2 głównych działań:

1) Ładowanie przetwarzania danych

2) Wygeneruj treść i wykorzystaj ją do raportowania / etc ..

Ładowanie / Przetwarzanie danych -> Świnia byłaby w tym pomocna.

Pomaga to jako ETL (możemy wykonywać operacje etl przy użyciu skryptów świni.).

Po przetworzeniu wyniku możemy użyć gałęzi do wygenerowania raportów na podstawie przetworzonego wyniku.

Hive: Zbudowany na wierzchu hdfs do obróbki magazynowej.

Możemy łatwo generować raporty adhoc za pomocą gałęzi z przetworzonych treści generowanych ze świń.

shyamshyre
źródło
1

Świnia je wszystko! Oznacza to, że może zużywać nieustrukturyzowane dane.

Ula wymaga schematu.

rbanikaz
źródło
1

Ogólnie rzecz biorąc, świnia jest przydatna do obciążeń typu ETL. Na przykład zestaw transformacji, które musisz wykonywać na danych każdego dnia.

Hive świeci, gdy trzeba uruchamiać zapytania adhoc lub po prostu chcesz eksplorować dane. Czasami może działać jako interfejs do warstwy wizualizacji (Tableau / Qlikview).

Oba są niezbędne i służą innym celom.

Krishna Kalyan
źródło