Jaka jest różnica między Apache Pig A Apache Hive?

Jaka jest dokładna różnica między świnią a ulem? Odkryłem, że oba mają takie samo znaczenie funkcjonalne, ponieważ są używane do wykonywania tej samej pracy. Jedyną rzeczą jest implimentacja, która jest inna dla obu. Kiedy więc korzystać i jakiej technologii? Czy istnieje jakaś specyfikacja dla obu, która wyraźnie pokazuje różnicę między obydwoma pod względem zastosowania i wydajności?

Author: Sean Owen, 2012-04-23

5 answers

Apache Pig i Hive to dwa projekty, które warstwy na Hadoop i zapewniają wyższy poziom języka do korzystania z biblioteki MapReduce Hadoop. Apache Pig dostarcza język skryptowy do opisywania operacji takich jak odczyt, filtrowanie, przekształcanie, łączenie i zapisywanie danych - dokładnie takich operacji, do których MapReduce został pierwotnie zaprojektowany. Zamiast wyrażać te operacje w tysiącach linii kodu Javy, które bezpośrednio używają MapReduce, Pig pozwala użytkownikom wyrażać je w języku podobnie jak skrypt bash czy perl. Pig jest doskonały do tworzenia prototypów i szybko rozwijających się zadań opartych na MapReduce, w przeciwieństwie do kodowania Zadań MapReduce w samej Javie.

Jeśli Pig jest "skryptem dla Hadoop" , to Hive jest "zapytaniami SQL dla Hadoop". Apache Hive oferuje jeszcze bardziej specyficzny i wyższy poziom języka, do odpytywania danych przez uruchamianie zadań Hadoop, zamiast bezpośrednio skryptowania krok po kroku działania kilku zadań MapReduce na Hadoop. Język jest z założenia niezwykle SQL-like. Hive jest nadal przeznaczony jako narzędzie do długotrwałych zapytań wsadowych nad ogromnymi danymi; nie jest w żadnym sensie "w czasie rzeczywistym". Hive to doskonałe narzędzie dla analityków i typów rozwoju biznesu, którzy są przyzwyczajeni do zapytań podobnych do SQL i systemów Business Intelligence; pozwoli im łatwo wykorzystać Twój nowy klaster Hadoop do wykonywania zapytań ad-hoc lub generowania danych raportów na danych przechowywanych w systemach pamięci masowej wymienionych powyżej.

 37
Author: Sean Owen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-14 21:58:07

Z czysto inżynieryjnego punktu widzenia uważam, że PIG jest łatwiejszy do napisania i utrzymania niż języki podobne do SQL. Jest to procedura, więc stosujesz kilka relacji do danych jeden po drugim, a jeśli coś się nie powiedzie, możesz łatwo debugować w pośrednich krokach, a nawet mieć polecenie o nazwie "zilustruj", które wykorzystuje algorytm do próbkowania niektórych danych pasujących do twojej relacji. Powiedziałbym, że dla zadań ze złożoną logiką jest to zdecydowanie wygodniejsze niż Hive, ale dla prostych rzeczy zysk jest prawdopodobnie Minimalne.

Jeśli chodzi o interfejsy, uważam, że świnia oferuje dużą elastyczność w porównaniu do ula. Nie masz pojęcia tabeli w PIG, więc manipulujesz plikami bezpośrednio, i możesz zdefiniować program loader, aby załadować go do praktycznie dowolnego formatu bardzo łatwo za pomocą programu Loader UDFs, bez konieczności przechodzenia przez etap ładowania tabeli przed dokonaniem przekształceń. Mają fajną funkcję w ostatnich wersjach PIG, gdzie można używać dynamicznych invokerów, tzn. używać praktycznie dowolnej Javy metoda bezpośrednio w skrypcie świni, bez konieczności pisania UDF.

Dla wydajności / optymalizacji, z tego, co widziałem, możesz bezpośrednio kontrolować w PIG rodzaj algorytmu łączenia i grupowania, którego chcesz użyć(wierzę, że 3 lub 4 różne algorytmy dla każdego). Ja osobiście nigdy z niego nie korzystałem, ale jak piszesz wymagające algorytmy to pewnie przydałoby się zdecydować co zrobić zamiast polegać na optymalizatorze jak to ma miejsce w Hive. Więc nie powiedziałbym tego koniecznie działa lepiej niż Hive, ale w przypadkach, gdy optymalizator podejmuje złą decyzję, masz możliwość wyboru algorytmu do użycia i mieć większą kontrolę nad tym, co się dzieje.

Jedną z fajnych rzeczy, które ostatnio zrobiłem, były splits: możesz podzielić swój przepływ wykonania i zastosować różne relacje do każdego podziału. Możesz więc mieć nieliniowy zbiór danych, podzielić go na podstawie pola i zastosować inne przetwarzanie do każdej części, a może połączyć wyniki razem, wszystko to w tym samym scenariusz. Myślę, że nie da się tego zrobić w ulu, musiałbyś pisać różne zapytania do każdej sprawy, ale mogę się mylić.

Należy również pamiętać, że można zwiększyć liczniki w świni. Obecnie można to zrobić tylko w UDFs świń. Nie sądzę, żeby można było używać liczników w ulu.

I jest kilka fajnych projektów, które pozwalają na połączenie świni z Hive, jak również (jak HCatalog), więc można w zasadzie odczytywać dane z tabeli hive, lub zapisać dane do tabeli hive (lub obu) przez wystarczy zmienić swój loader w skrypcie. Obsługuje również dynamiczne partycje.

 7
Author: Charles Menguy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-23 16:05:59

Apache Pig jest platformą do analizy dużych zbiorów danych. Język Pig, łacina Pig, jest prostą algebrą zapytań, która pozwala wyrażać przekształcenia danych, takie jak łączenie zestawów danych, filtrowanie ich i stosowanie funkcji do rekordów lub grup rekordów. Użytkownicy mogą tworzyć własne funkcje do przetwarzania specjalnego przeznaczenia.

Zapytania Pig Latin wykonywane są w sposób rozproszony na klastrze. Nasza obecna implementacja kompiluje programy do Map-Reduce jobs i wykonuje używają klastra Hadoop.

Https://cwiki.apache.org/confluence/display/PIG/Index%3bjsessionid=F92DF7021837B3DD048BF9529A434FDA

Hive jest systemem hurtowni danych dla Hadoop, który ułatwia łatwe sumowanie danych, zapytania ad-hoc i analizę dużych zbiorów danych przechowywanych w systemach plików kompatybilnych z Hadoop. Hive zapewnia mechanizm projekcji struktury na tych danych i zapytań danych za pomocą języka SQL podobny o nazwie HiveQL. W tym samym czasie język ten również pozwala tradycyjnym programistom map/reduce na podłączenie własnych maperów i reduktorów, gdy wyrażenie tej logiki w HiveQL jest niewygodne lub nieefektywne.

Https://cwiki.apache.org/Hive/

 3
Author: Infinity,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-23 20:46:48
Jaka jest dokładna różnica między świnią a ulem? Odkryłem, że oba mają takie samo znaczenie funkcjonalne, ponieważ są używane do wykonywania tej samej pracy.

Spójrz na Świnia Vs Ul porównanie w skorupa orzecha z dezyre Artykuł

Hive wyniki na PIG W partycjach, serwerze, interfejsie WWW i obsłudze JDBC/ODBC .

Niektóre różnice:

  1. Hive jest najlepszy dla dane strukturyzowane & Świnia jest najlepsza dla dane półstrukturalne

  2. Hive używany do Sprawozdawczość & Świnia dla programowanie

  3. Hive używany jako deklaratywny SQL & PIG używany jako język proceduralny

  4. Hive obsługuje partycje & Świnia nie

  5. Hive może uruchomić opcjonalny serwer oparty na thrift & PIG can ' t

  6. Hive definiuje tabele przed ręką (schemat) + przechowuje informacje o schemacie w bazie danych i PIG nie posiada dedykowanych metadanych bazy danych

  7. Hive nie obsługuje Avro, ale PIG robi

  8. Pig wspiera również dodatkowe COGROUP funkcja do wykonywania połączeń zewnętrznych, ale hive nie. Ale zarówno Ula i Świnia mogą Dołącz, Zamów i sortuj dynamicznie

Kiedy używać i jakiej technologii?

Powyższa różnica wyjaśnia Twoje zapytanie.

HIVE : Dane ustrukturyzowane, zapytania podobne do SQL i używane do celów raportowania]}

PIG: Dane Półstrukturalne, zaprogramować przepływ pracy obejmujący sekwencję działań dla Mapa Redukuj zadania.

Jeśli chodzi o wydajność zadania, zarówno HIVE, jak i PIG są powolne w porównaniu do tradycyjnego zadania Map Reduce. Reason: W końcu Skrypty Hive lub PIG muszą zostać przekonwertowane na serię zadań zmniejszania Map.

Spójrz na podobne pytanie SE:

Pig vs Hive vs Native Map

 3
Author: Ravindra babu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:25:34

Główną różnicą jest to, że PIG jest językiem przepływu danych, a Hive jest hurtownią danych. As PIG może być używany podobnie jak język proceduralny krok po kroku. Ale HIVE jest używany jako język deklaratywny. PIG może być używany do przesyłania strumieniowego online nieustrukturyzowanych danych. Ale HIVE może uzyskać dostęp tylko do danych strukturalnych i może również uzyskać dostęp do danych z baz danych RDBMS, takich jak SQL, NOSQL za pomocą sterowników JDBC i ODBC. Świnia może konwertować dane do formatu Avro, ale świnia nie może. Świnia nie potrafi tworzyć partycji ale ULA potrafi to. Jako HIVE jest top of PIG, dlatego HIVE może uzyskać dostęp do danych tylko po przetworzeniu przez PIG. To zależy kiedy musimy użyć PIG i HIVE jeśli pracujesz ustrukturyzowane, relacyjne dane to możemy użyć HIVE inaczej możemy użyć PIG. Przez PIG możemy komunikować się z narzędziami ETL, ale zajmuje to więcej czasu w porównaniu z hive. Ale jest to łatwe w PIG a HIVE, ponieważ w HIVE musimy stworzyć tabelę przed przetworzeniem danych.

 0
Author: Srikarsh Vardhanreddy Kolanu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-12 06:39:02