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?
źródło
Odpowiedzi:
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.
źródło
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.
źródło
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:
W przypadku korzystania z innych narzędzi za pośrednictwem przesyłania strumieniowego:
Podczas korzystania z Hive do hurtowni danych:
źródło
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:
Hive jest najlepsza dla danych strukturalnych i PIG jest najlepsze dla naczep danych strukturalnych
Hive służy do raportowania i PIG dla programowania
Hive jest używany jako deklaratywnej SQL & PIG jako języka proceduralnego
Hive obsługuje partycje i PIG nie
Hive może rozpocząć opcjonalnego się serwera zapobiegliwości w oparciu i PIG nie może
Hive wcześniej definiuje tabele ( schemat ) + przechowuje informacje o schemacie w bazie danych, a PIG nie ma dedykowanych metadanych bazy danych
Hive nie obsługuje Avro, ale PIG obsługuje. EDYCJA: Hive obsługuje Avro, określ serde jako org.apache.hadoop.hive.serde2.avro
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.
źródło
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:
źródło
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.
źródło
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).
źródło
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
źródło
Przeczytaj różnicę między PIG a HIVE w tym linku.
http://www.aptibook.com/Articles/Pig-and-hive-advantages-disadvantages-features
Wszystkie aspekty są podane. Jeśli masz wątpliwości co do wyboru, musisz zobaczyć tę stronę internetową.
źródło
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.
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.
Moim zdaniem pisanie UDF na świni jest łatwiejsze niż w Hive.
Pig nie obsługuje metadanych (lub jest opcjonalny, w przyszłości może zintegrować hcatalog). Hive ma metadane tabel przechowywane w bazie danych.
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.
źródło
Znalazłem poniżej przydatny link, aby dowiedzieć się, jak i kiedy używać HIVE i PIG.
http://www.hadoopwizard.com/when-to-use-pig-latin-versus-hive-sql/
źródło
Oto kilka dodatkowych linków do korzystania z Pig lub Hive.
http://aws.amazon.com/elasticmapreduce/faqs/#hive-8
http://www.larsgeorge.com/2009/10/hive-vs-pig.html
źródło
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.
źródło
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.
źródło
W skrócie:
1) Świnia jest relacyjną algebrą nad hadoopem
2) Hive to SQL over hadoop (jeden poziom powyżej Pig)
źródło
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.
źródło
Kiedy używamy
Hadoop
w 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ń.
źródło
Świnia je wszystko! Oznacza to, że może zużywać nieustrukturyzowane dane.
Ula wymaga schematu.
źródło
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.
źródło