Unterschied zwischen Schwein und Bienenstock? Warum beides? [geschlossen]


256

Mein Hintergrund - 4 Wochen alt in der Hadoop-Welt. Mit Clouderas Hadoop VM ein bisschen in Hive, Pig und Hadoop versucht. Lesen Sie Googles Artikel zu Map-Reduce und GFS ( PDF-Link ).

Ich verstehe das-

  • Pig's Sprache Pig Latin ist eine Abkehr von SQL (wie es Programmierer denken) wie ein deklarativer Programmierstil, und Hives Abfragesprache ähnelt stark SQL.

  • Schwein sitzt auf Hadoop und kann im Prinzip auch auf Dryade sitzen. Ich könnte mich irren, aber Hive ist eng mit Hadoop verbunden.

  • Sowohl Pig Latin- als auch Hive-Befehle werden kompiliert, um Jobs zuzuordnen und zu reduzieren.

Meine Frage - Was ist das Ziel, beides zu haben, wenn man (sagen wir Schwein) den Zweck erfüllen könnte? Ist es nur, weil Pig von Yahoo! und Hive von Facebook?


24
Hive ist für strukturierte Daten. Schwein ist für unstrukturierte Daten.
Toter Programmierer

Antworten:


151

Schauen Sie sich diesen Beitrag von Alan Gates, Pig-Architekt bei Yahoo! an, der vergleicht, wann ein SQL wie Hive anstelle von Pig verwendet wird. Er macht einen sehr überzeugenden Fall hinsichtlich der Nützlichkeit einer prozeduralen Sprache wie Pig (im Vergleich zu deklarativem SQL) und ihrer Nützlichkeit für Datenflussdesigner.


Alan schreibt auch einen Artikel über Hive, der unten als j03m geteilt wird. Gutes Zeug von ihm!
Dolan Antenucci

14
Hive ist für strukturierte Daten. Schwein ist für unstrukturierte Daten.
Toter Programmierer

7
Ich bin verwirrt. Wollten Sie sagen "[...] Nützlichkeit einer prozeduralen Sprache wie Pig"? Weil der Artikel wiederholt behauptet, dass "Pig Latin is Procedural" ist.
Matt Fenwick

4
Ich bin nicht sicher, ob es vorübergehend ist, aber der Artikel scheint weg zu sein. Können Sie den Link aktualisieren (ich konnte ihn mit einer Schnellsuche nicht finden)?
Peter Klipfel

1
Alan Gates Post ist hier .. bitte gehen Sie es durch .. developer.yahoo.com/blogs/hadoop/…
Mr.Chowdary

57

Hive wurde entwickelt, um eine Community anzusprechen, die mit SQL vertraut ist. Seine Philosophie war, dass wir keine weitere Skriptsprache brauchen. Hive unterstützt das Zuordnen und Reduzieren von Transformationsskripten in der Sprache des Benutzers (die in SQL-Klauseln eingebettet werden kann). Es wird in Facebook häufig von Analysten verwendet, die mit SQL vertraut sind, sowie von Data Minern, die in Python programmieren. Die SQL-Kompatibilitätsbemühungen in Pig wurden von AFAIK aufgegeben - daher ist der Unterschied zwischen den beiden Projekten sehr deutlich.

Die Unterstützung der SQL-Syntax bedeutet auch, dass eine Integration in vorhandene BI-Tools wie Microstrategy möglich ist. Hive verfügt über einen ODBC / JDBC-Treiber (der noch in Arbeit ist), der dies in naher Zukunft ermöglichen soll. Es wird auch damit begonnen, Unterstützung für Indizes hinzuzufügen, die Unterstützung für Drilldown-Abfragen ermöglichen sollten, die in solchen Umgebungen häufig vorkommen.

Schließlich - dies ist für die Frage nicht direkt relevant - ist Hive ein Framework für die Durchführung analytischer Abfragen. Während es hauptsächlich zum Abfragen von Flatfiles verwendet wird, gibt es keinen Grund, warum es keine anderen Geschäfte abfragen kann. Derzeit kann Hive zum Abfragen von Daten verwendet werden, die in Hbase gespeichert sind (einem Schlüsselwertspeicher, wie er in den Eingeweiden der meisten RDBMS enthalten ist), und das HadoopDB-Projekt hat Hive zum Abfragen einer Verbund-RDBMS-Schicht verwendet.


37

Ich fand das am hilfreichsten (obwohl es ein Jahr alt ist) - http://yahoohadoop.tumblr.com/post/98256601751/pig-and-hive-at-yahoo

Es geht speziell um Pig vs Hive und wann und wo sie bei Yahoo beschäftigt sind. Ich fand das sehr aufschlussreich. Einige interessante Hinweise:

Bei inkrementellen Änderungen / Aktualisierungen von Datensätzen:

Stattdessen ist es der richtige Ansatz, sich mit den neuen inkrementellen Daten zu verbinden und die Ergebnisse zusammen mit den Ergebnissen des vorherigen vollständigen Joins zu verwenden. Dies dauert nur wenige Minuten. Standarddatenbankoperationen können auf diese inkrementelle Weise in Pig Latin implementiert werden, was Pig zu einem guten Werkzeug für diesen Anwendungsfall macht.

Bei Verwendung anderer Tools per Streaming:

Die Integration von Pig in Streaming erleichtert es Forschern außerdem, ein Perl- oder Python-Skript, das sie bereits für einen kleinen Datensatz getestet haben, für einen großen Datensatz auszuführen.

So verwenden Sie Hive für Data Warehousing:

In beiden Fällen passen das relationale Modell und SQL am besten zusammen. In der Tat war Data Warehousing während eines Großteils seiner Geschichte einer der wichtigsten Anwendungsfälle für SQL. Es verfügt über die richtigen Konstrukte, um die Arten von Abfragen und Tools zu unterstützen, die Analysten verwenden möchten. Und es wird bereits sowohl von den Tools als auch von den Benutzern vor Ort verwendet.

Das Hadoop-Teilprojekt Hive bietet eine SQL-Schnittstelle und ein relationales Modell für Hadoop. Das Hive-Team hat mit der Integration in BI-Tools über Schnittstellen wie ODBC begonnen.


1
+1 toll, einen Vergleich von Yahoo zu sehen, der nach meinem Verständnis der ursprüngliche Schöpfer von Pig oder zumindest ein sehr großer Befürworter ist. Edit: von Jakob oben, ich sehe, dass der Autor (Alan Gates) der Pig Architect bei Yahoo ist - so toll teilen :)
Dolan Antenucci

3
Der Link ist tot. Ich denke, die richtige URL lautet derzeit: https://developer.yahoo.com/blogs/hadoop/pig-hive-yahoo-464.html .
Agarie

1
Aktualisierter Link wie oben
j03m


Die 2 oben genannten Links wurden nicht mehr gefunden.
Keshav Pradeep Ramanath

28

Schauen Sie sich Pig Vs Hive Comparison in einer Nussschale aus einem "Dezyre" -Artikel an

Hive ist besser als PIG in: Partitionen, Server, Webschnittstelle und JDBC / ODBC-Unterstützung.

Einige Unterschiede:

  1. Hive eignet sich am besten für strukturierte Daten und PIG eignet sich am besten für halbstrukturierte Daten

  2. Hive wird für die Berichterstellung und PIG für die Programmierung verwendet

  3. Hive wird als deklaratives SQL & PIG als prozedurale Sprache verwendet

  4. Hive unterstützt Partitionen und PIG nicht

  5. Hive kann einen optionalen Thrift-basierten Server starten und PIG nicht

  6. Hive definiert Tabellen im Voraus ( Schema ) + speichert Schemainformationen in einer Datenbank und PIG verfügt nicht über dedizierte Metadaten der Datenbank

  7. Hive unterstützt Avro nicht , PIG jedoch. BEARBEITEN: Hive unterstützt Avro. Geben Sie die Serde als org.apache.hadoop.hive.serde2.avro an

  8. Pig unterstützt auch die zusätzliche COGROUP- Funktion für die Durchführung äußerer Verknüpfungen , Hive jedoch nicht. Aber sowohl Hive als auch PIG können dynamisch beitreten, bestellen und sortieren .


17

Ich glaube, die eigentliche Antwort auf Ihre Frage ist, dass es sich um unabhängige Projekte handelt und es kein zentral koordiniertes Ziel gab. Sie befanden sich schon früh an verschiedenen Orten und haben sich mit der Zeit überschnitten, da beide Projekte erweitert wurden.

Umschrieben aus dem Hadoop O'Reilly-Buch:

Pig: Eine Datenflusssprache und -umgebung zum Erkunden sehr großer Datenmengen.

Hive: ein verteiltes Data Warehouse


22
Hive ist nichts anderes als ein RDBMS. Es verarbeitet Flatfiles genau wie Pig. Beide machen im Grunde das Gleiche. Schauen Sie sich die Optimierer an, die sie beim Kompilieren des Jobs verwenden, da dies der größte echte Unterschied ist.
Steve Severance

12

Sie können ähnliche Ergebnisse mit Schweine- / Bienenstockabfragen erzielen. Der Hauptunterschied liegt in der Herangehensweise an das Verstehen / Schreiben / Erstellen von Abfragen.

Pig neigt dazu, einen Datenfluss zu erzeugen: kleine Schritte, in denen Sie in jedem Fall eine Verarbeitung durchführen.
Hive bietet Ihnen eine SQL-ähnliche Sprache für die Bearbeitung Ihrer Daten, sodass die Transformation von RDBMS viel einfacher ist (Pig kann für jemanden einfacher sein, der noch keine Erfahrung hat mit SQL)

Es ist auch erwähnenswert, dass Sie für Hive eine nette Schnittstelle haben, um mit diesen Daten zu arbeiten (Bienenwachs für HUE oder Hive-Weboberfläche), und es gibt Ihnen auch Metastore für Informationen über Ihre Daten (Schema usw.), die als nützlich sind zentrale Informationen zu Ihren Daten.

Ich verwende sowohl Hive als auch Pig für verschiedene Abfragen (ich verwende diese, bei der ich Abfragen schneller / einfacher schreiben kann, meistens auf diese Weise, meistens Ad-hoc-Abfragen) - sie können dieselben Daten als Eingabe verwenden. Aber momentan mache ich einen Großteil meiner Arbeit mit Bienenwachs.


12

Mit Pig können Daten und Benutzercode an jedem Punkt der Pipeline geladen werden. Dies kann besonders wichtig sein, wenn es sich bei den Daten um Streaming-Daten handelt, beispielsweise um Daten von Satelliten oder Instrumenten.

Hive, das auf RDBMS basiert, benötigt die Daten, die zuerst importiert (oder geladen) werden müssen, und danach können sie bearbeitet werden. Wenn Sie also Hive für das Streaming von Daten verwenden, müssen Sie weiterhin Eimer (oder Dateien) füllen und Hive für jeden gefüllten Eimer verwenden, während Sie andere Eimer verwenden, um die neu ankommenden Daten weiter zu speichern.

Schwein verwendet auch faule Bewertung. Es ermöglicht eine einfachere Programmierung und man kann damit Daten auf verschiedene Arten mit mehr Freiheit analysieren als in einer SQL-ähnlichen Sprache wie Hive. Wenn Sie also wirklich Matrizen oder Muster in unstrukturierten Daten analysieren und interessante Berechnungen an ihnen durchführen möchten, können Sie mit Pig ein gutes Stück weit gehen, während Sie mit Hive etwas anderes benötigen, um mit den Ergebnissen zu spielen.

Pig ist beim Datenimport schneller, aber bei der tatsächlichen Ausführung langsamer als eine RDBMS-freundliche Sprache wie Hive.

Pig eignet sich gut für die Parallelisierung und hat daher möglicherweise einen Vorteil für Systeme, bei denen die Datensätze sehr groß sind, dh bei Systemen, bei denen Sie sich mehr um den Durchsatz Ihrer Ergebnisse als um die Latenz kümmern (die Zeit, um ein bestimmtes Ergebnisdatum zu erhalten).


10

Hive Vs Pig-

Hive ist eine SQL-Schnittstelle, die SQL-versierte Benutzer oder andere Tools wie Tableu / Microstrategy / jedes andere Tool oder jede andere Sprache mit SQL-Schnittstelle ermöglicht.

PIG ähnelt eher einer ETL-Pipeline. Mit schrittweisen Befehlen wie Deklarieren von Variablen, Schleifen, Iterieren, bedingten Anweisungen usw.

Ich schreibe lieber Pig-Skripte als Hive-QL, wenn ich komplexe Schritt-für-Schritt-Logik schreiben möchte. Wenn ich gerne eine einzelne SQL zum Abrufen der gewünschten Daten schreibe, verwende ich Hive. Für Hive müssen Sie vor dem Abfragen eine Tabelle definieren (wie in RDBMS).

Der Zweck von beiden ist unterschiedlich, aber unter der Haube machen beide dasselbe, konvertieren in Kartenreduzierungsprogramme. Auch die Apache Open Source Community fügt beiden Projekten immer mehr Funktionen hinzu



7
  1. Schweinelatein ist ein Datenflussstil, der eher für Softwareentwickler geeignet ist. Während SQL eher für Analytics-Personen geeignet ist, die sich an SQL gewöhnen. Für komplexe Aufgaben müssen Sie für Bienenstöcke manuell eine temporäre Tabelle zum Speichern von Zwischendaten erstellen, für Schweine ist dies jedoch nicht erforderlich.

  2. Schweinelatein ist für komplizierte Datenstrukturen geeignet (wie kleine Grafiken). Es gibt eine Datenstruktur in pig namens DataBag, eine Sammlung von Tupel. Manchmal müssen Sie Metriken berechnen, die mehrere Tupel umfassen (es gibt eine versteckte Verbindung zwischen Tupeln, in diesem Fall würde ich es Grafik nennen). In diesem Fall ist es sehr einfach, eine UDF zu schreiben, um die Metriken zu berechnen, die mehrere Tupel umfassen. Natürlich könnte es im Bienenstock gemacht werden, aber es ist nicht so bequem wie beim Schwein.

  3. UDF in Schweinen zu schreiben ist meiner Meinung nach viel einfacher als in Hive.

  4. Pig unterstützt keine Metadaten (oder ist optional, in Zukunft wird möglicherweise hcatalog integriert). In Hive sind die Metadaten der Tabellen in der Datenbank gespeichert.

  5. Sie können Pig Script in einer lokalen Umgebung debuggen, aber es wäre für Hive schwierig, dies zu tun. Der Grund ist Punkt 3. Sie müssen Hive-Metadaten in Ihrer lokalen Umgebung einrichten, was sehr zeitaufwändig ist.




4

Über den Link: http://www.aptibook.com/discuss-technical?uid=tech-hive4&question=Was-kind-of-datawarehouse-application-is-suitable-for-Hive ?

Hive ist keine vollständige Datenbank. Die Designeinschränkungen und -beschränkungen von Hadoop und HDFS schränken die Möglichkeiten von Hive ein.

Hive eignet sich am besten für Data Warehouse-Anwendungen, bei denen

1) Relativ statische Daten werden analysiert,

2) Schnelle Reaktionszeiten sind nicht erforderlich, und

3) Wenn sich die Daten nicht schnell ändern.

Hive bietet keine entscheidenden Funktionen für OLTP, Online Transaction Processing. Es ist näher dran, ein OLAP-Tool zu sein, Online Analytic Processing. Daher eignet sich Hive am besten für Data Warehouse-Anwendungen, bei denen ein großer Datensatz verwaltet und nach Erkenntnissen, Berichten usw. durchsucht wird.


4

In einfacheren Worten, Pig ist eine Plattform auf hoher Ebene zum Erstellen von MapReduce-Programmen, die mit Hadoop verwendet werden. Mithilfe von Pig-Skripten verarbeiten wir die große Datenmenge in das gewünschte Format.

Sobald die verarbeiteten Daten erhalten wurden, werden diese verarbeiteten Daten zur späteren Verarbeitung in HDFS gespeichert, um die gewünschten Ergebnisse zu erhalten.

Zusätzlich zu den gespeicherten verarbeiteten Daten wenden wir HIVE-SQL-Befehle an, um die gewünschten Ergebnisse zu erzielen. Intern führen diese Hive-SQL-Befehle MAP-Reduce-Programme aus.


Dies ist keine wirklich sinnvolle Ergänzung der Wissensbasis. Versuchen Sie, weitere Informationen hinzuzufügen
Agconti

4

Um einen sehr guten Überblick über beide zu geben, kurz:

1) Schwein ist eine relationale Algebra über Hadoop

2) Hive ist ein SQL over Hadoop (eine Ebene über Pig)


Algebra Vergleich ist interessant
Ravindra Babu

3

Was kann HIVE, was bei PIG nicht möglich ist?

Die Partitionierung kann mit HIVE erfolgen, jedoch nicht mit PIG. Dies ist eine Möglichkeit, die Ausgabe zu umgehen.

Was kann PIG tun, was bei HIVE nicht möglich ist?

Positionsreferenzierung - Auch wenn Sie keine Feldnamen haben, können wir die Position wie $ 0 - für das erste Feld, $ 1 für das zweite usw. verwenden.

Ein weiterer grundlegender Unterschied ist, dass PIG kein Schema zum Schreiben der Werte benötigt, HIVE jedoch ein Schema.

Sie können von jeder externen Anwendung aus mit JDBC und anderen eine Verbindung zu HIVE herstellen, jedoch nicht mit PIG.

Hinweis: Beide werden auf HDFS (Hadoop Distributed File System) ausgeführt und die Anweisungen werden in Map Reduce-Programme konvertiert.


3

Wenn wir Hadoopin dem Sinne verwenden, bedeutet dies, dass wir versuchen, eine große Datenverarbeitung durchzuführen. Das Endziel der Datenverarbeitung wäre es, Inhalte / Berichte daraus zu generieren.

Es besteht also intern aus 2 Hauptaktivitäten:

1) Laden der Datenverarbeitung

2) Generieren Sie Inhalte und verwenden Sie sie für die Berichterstellung / etc ..

Laden / Datenverarbeitung -> Schwein wäre dabei hilfreich.

Dies hilft als ETL (Wir können etl-Operationen mit Pig-Skripten ausführen.).

Sobald das Ergebnis verarbeitet ist, können wir Hive verwenden, um die Berichte basierend auf dem verarbeiteten Ergebnis zu generieren.

Hive: Es basiert auf HDFS für die Lagerabwicklung.

Wir können Ad-hoc-Berichte einfach mit Hive aus dem verarbeiteten Inhalt erstellen, der vom Schwein generiert wird.


1

Schwein frisst alles! Dies bedeutet, dass unstrukturierte Daten verbraucht werden können.

Hive erfordert ein Schema.


1

Schwein ist im Allgemeinen für ETL-Workloads nützlich. Zum Beispiel eine Reihe von Transformationen, die Sie jeden Tag an Ihren Daten vornehmen müssen.

Hive leuchtet, wenn Sie Ad-hoc-Abfragen ausführen oder nur Daten untersuchen möchten. Es kann manchmal als Schnittstelle zu Ihrer Visualisierungsebene (Tableau / Qlikview) dienen.

Beide sind wesentlich und dienen unterschiedlichen Zwecken.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.