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?
hadoop
hive
apache-pig
Arnkrishn
quelle
quelle
Antworten:
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.
quelle
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.
quelle
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:
Bei Verwendung anderer Tools per Streaming:
So verwenden Sie Hive für Data Warehousing:
quelle
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:
Hive eignet sich am besten für strukturierte Daten und PIG eignet sich am besten für halbstrukturierte Daten
Hive wird für die Berichterstellung und PIG für die Programmierung verwendet
Hive wird als deklaratives SQL & PIG als prozedurale Sprache verwendet
Hive unterstützt Partitionen und PIG nicht
Hive kann einen optionalen Thrift-basierten Server starten und PIG nicht
Hive definiert Tabellen im Voraus ( Schema ) + speichert Schemainformationen in einer Datenbank und PIG verfügt nicht über dedizierte Metadaten der Datenbank
Hive unterstützt Avro nicht , PIG jedoch. BEARBEITEN: Hive unterstützt Avro. Geben Sie die Serde als org.apache.hadoop.hive.serde2.avro an
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 .
quelle
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:
quelle
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.
quelle
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).
quelle
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
quelle
Lesen Sie den Unterschied zwischen PIG und HIVE in diesem Link.
http://www.aptibook.com/Articles/Pig-and-hive-advantages-disadvantages-features
Alle Aspekte sind gegeben. Wenn Sie sich nicht sicher sind, welche Sie wählen sollen, müssen Sie diese Webseite sehen.
quelle
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.
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.
UDF in Schweinen zu schreiben ist meiner Meinung nach viel einfacher als in Hive.
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.
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.
quelle
Ich fand unten einen nützlichen Link, um herauszufinden, wie und wann man HIVE und PIG verwendet.
http://www.hadoopwizard.com/when-to-use-pig-latin-versus-hive-sql/
quelle
Hier sind einige zusätzliche Links zur Verwendung von Pig oder Hive.
http://aws.amazon.com/elasticmapreduce/faqs/#hive-8
http://www.larsgeorge.com/2009/10/hive-vs-pig.html
quelle
Ü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.
quelle
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.
quelle
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)
quelle
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.
quelle
Wenn wir
Hadoop
in 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.
quelle
Schwein frisst alles! Dies bedeutet, dass unstrukturierte Daten verbraucht werden können.
Hive erfordert ein Schema.
quelle
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.
quelle