Différence entre porc et ruche? Pourquoi avoir les deux? [fermé]

256

Mon parcours - 4 semaines dans le monde Hadoop. Tenté un peu dans Hive, Pig et Hadoop en utilisant Hadoop VM de Cloudera. Avoir lu l'article de Google sur Map-Reduce et GFS ( lien PDF ).

Je comprends que-

  • Langage de Pig Pig Latin est un changement (adapté à la façon de penser des programmeurs) SQL comme le style déclaratif de programmation et le langage de requête de Hive ressemble étroitement à SQL.

  • Le porc se trouve au-dessus de Hadoop et peut en principe également s'asseoir au-dessus de Dryade. Je me trompe peut-être, mais Hive est étroitement lié à Hadoop.

  • Les commandes Pig Latin et Hive se compilent pour cartographier et réduire les travaux.

Ma question - Quel est le but d'avoir les deux quand un (disons Pig) pourrait servir le but. Est-ce juste parce que Pig est évangélisé par Yahoo! et Hive par Facebook?

Arnkrishn
la source
24
Hive est pour les données structurées. Pig est pour les données non structurées.
Programmeur mort

Réponses:

151

Consultez cet article d'Alan Gates, architecte Pig chez Yahoo !, qui compare quand utiliserait un SQL comme Hive plutôt que Pig. Il fait un cas très convaincant quant à l'utilité d'un langage procédural comme Pig (vs SQL déclaratif) et son utilité pour les concepteurs de flux de données.

Jakob Homan
la source
Alan fait également un article traitant spécifiquement de Hive, comme j03m partagé ci-dessous. De bonnes choses de sa part!
Dolan Antenucci
14
Hive est pour les données structurées. Pig est pour les données non structurées.
Programmeur mort
7
Je suis confus. Vouliez-vous dire «[...] l'utilité d'un langage procédural comme Pig»? Parce que l'article affirme à plusieurs reprises que "Pig Latin est procédural".
Matt Fenwick
4
Je ne sais pas si c'est temporaire, mais l'article semble avoir disparu. Pouvez-vous mettre à jour le lien (je ne l'ai pas trouvé avec une recherche rapide)?
Peter Klipfel
1
Le message d'Alan Gates est ici .. veuillez le parcourir .. developer.yahoo.com/blogs/hadoop/…
Mr.Chowdary
57

Hive a été conçu pour plaire à une communauté à l'aise avec SQL. Sa philosophie était que nous n'avons pas encore besoin d'un autre langage de script. Hive prend en charge la cartographie et la réduction des scripts de transformation dans la langue choisie par l'utilisateur (qui peut être intégrée dans des clauses SQL). Il est largement utilisé sur Facebook par les analystes à l'aise avec SQL ainsi que par les programmeurs de données en Python. Les efforts de compatibilité SQL dans Pig ont été abandonnés AFAIK - la différence entre les deux projets est donc très claire.

La prise en charge de la syntaxe SQL signifie également qu'il est possible de s'intégrer aux outils de BI existants tels que la microstratégie. Hive a un pilote ODBC / JDBC (c'est un travail en cours) qui devrait permettre que cela se produise dans un proche avenir. Il commence également à ajouter la prise en charge des index, ce qui devrait permettre la prise en charge des requêtes détaillées courantes dans de tels environnements.

Enfin - cela ne concerne pas directement la question - Hive est un cadre pour effectuer des requêtes analytiques. Bien que son utilisation dominante soit pour interroger des fichiers plats, il n'y a aucune raison pour laquelle il ne peut pas interroger d'autres magasins. Actuellement, Hive peut être utilisé pour interroger les données stockées dans Hbase (qui est un magasin de valeurs-clés comme celles trouvées dans les tripes de la plupart des SGBDR), et le projet HadoopDB a utilisé Hive pour interroger un niveau SGBDR fédéré.

Joydeep Sen Sarma
la source
37

J'ai trouvé cela le plus utile (cependant, cela fait un an) - http://yahoohadoop.tumblr.com/post/98256601751/pig-and-hive-at-yahoo

Il parle spécifiquement de Pig vs Hive et quand et où ils sont employés chez Yahoo. J'ai trouvé cela très perspicace. Quelques notes intéressantes:

Sur les modifications / mises à jour incrémentielles des ensembles de données:

Au lieu de cela, la jointure par rapport aux nouvelles données incrémentielles et l'utilisation des résultats avec les résultats de la jointure complète précédente est la bonne approche. Cela ne prendra que quelques minutes. Les opérations de base de données standard peuvent être implémentées de cette manière incrémentielle dans Pig Latin, faisant de Pig un bon outil pour ce cas d'utilisation.

Sur l'utilisation d'autres outils via le streaming:

L'intégration de Pig avec le streaming permet également aux chercheurs de prendre facilement un script Perl ou Python qu'ils ont déjà débogué sur un petit ensemble de données et de l'exécuter sur un énorme ensemble de données.

Sur l'utilisation de Hive pour l'entreposage de données:

Dans les deux cas, le modèle relationnel et SQL sont les mieux adaptés. En effet, l'entreposage de données a été l'un des principaux cas d'utilisation de SQL tout au long de son histoire. Il a les bonnes constructions pour prendre en charge les types de requêtes et d'outils que les analystes souhaitent utiliser. Et il est déjà utilisé par les outils et les utilisateurs sur le terrain.

Le sous-projet Hadoop Hive fournit une interface SQL et un modèle relationnel pour Hadoop. L'équipe Hive a commencé à travailler avec les outils BI via des interfaces telles que ODBC.

j03m
la source
1
+1 génial pour voir une comparaison de Yahoo, qui, d'après ce que je comprends, est le créateur original de Pig, ou du moins un très grand partisan. Edit: de Jakob ci-dessus, je vois que l'auteur (Alan Gates) est l'architecte Pig chez Yahoo - donc une grande part :)
Dolan Antenucci
3
Le lien est mort. Je pense que l'URL correcte en ce moment est: https://developer.yahoo.com/blogs/hadoop/pig-hive-yahoo-464.html .
agarie
1
Lien mis à jour par ci
j03m
Les 2 liens partagés ci-dessus ne sont plus trouvés.
Keshav Pradeep Ramanath
28

Jetez un oeil à Pig Vs Hive Comparaison dans une coquille de noix d'un article "dezyre"

Hive est meilleur que PIG dans: les partitions, le serveur, l'interface Web et le support JDBC / ODBC.

Quelques différences:

  1. Hive est le meilleur pour les données structurées et PIG est le meilleur pour les données semi-structurées

  2. Hive est utilisé pour les rapports et PIG pour la programmation

  3. Hive est utilisé comme SQL déclaratif et PIG comme langage procédural

  4. Hive prend en charge les partitions et PIG ne fonctionne pas

  5. Hive peut démarrer un serveur d'épargne en option et PIG ne peut pas

  6. Hive définit les tables au préalable ( schéma ) + stocke les informations de schéma dans une base de données et PIG n'a pas de métadonnées dédiées de base de données

  7. Hive ne prend pas en charge Avro mais PIG le fait. EDIT: Hive prend en charge Avro, spécifiez le serde comme org.apache.hadoop.hive.serde2.avro

  8. Pig prend également en charge la fonctionnalité COGROUP supplémentaire pour effectuer des jointures externes, mais pas la ruche. Mais Hive et PIG peuvent se joindre, ordonner et trier dynamiquement.

Ravindra babu
la source
17

Je pense que la vraie réponse à votre question est qu'il s'agit / étaient des projets indépendants et qu'il n'y avait pas d'objectif coordonné au niveau central. Ils étaient dans des espaces différents au début et ont grandi pour se chevaucher avec le temps à mesure que les deux projets se développent.

Paraphrasé du livre Hadoop O'Reilly:

Pig: un langage et un environnement de flux de données pour explorer de très grands ensembles de données.

Hive: un entrepôt de données distribué

G__
la source
22
Hive n'a rien à voir avec un SGBDR. Il traite les fichiers plats comme Pig. Ils font tous les deux la même chose. Regardez les optimiseurs qu'ils utilisent lors de la compilation du travail car c'est la plus grande différence réelle.
Steve Severance
12

Vous pouvez obtenir des résultats similaires avec des requêtes porc / ruche. La principale différence réside dans l'approche de compréhension / rédaction / création de requêtes.

Pig a tendance à créer un flux de données: petites étapes où, dans chacune, vous effectuez un traitement,
Hive vous donne un langage de type SQL pour opérer sur vos données, de sorte que la transformation à partir du SGBDR est beaucoup plus facile (Pig peut être plus facile pour quelqu'un qui n'avait pas d'expérience antérieure) avec SQL)

Il est également intéressant de noter que pour Hive, vous pouvez utiliser une interface agréable pour travailler avec ces données (cire d'abeille pour HUE ou interface Web Hive), et cela vous donne également une métastore pour des informations sur vos données (schéma, etc.) qui est utile en tant que des informations centrales sur vos données.

J'utilise à la fois Hive et Pig, pour différentes requêtes (j'utilise celle où je peux écrire des requêtes plus rapidement / plus facilement, je le fais de cette manière principalement des requêtes ad hoc) - ils peuvent utiliser les mêmes données en entrée. Mais actuellement, je fais une grande partie de mon travail grâce à la cire d'abeille.

wlk
la source
12

Pig permet de charger des données et du code utilisateur à tout moment dans le pipeline. Cela peut être particulièrement important si les données sont des données en streaming, par exemple des données de satellites ou d'instruments.

Hive, qui est basé sur le SGBDR, a besoin que les données soient d'abord importées (ou chargées) et ensuite qu'elles puissent être utilisées. Donc, si vous utilisiez Hive sur des données en streaming, vous devriez continuer à remplir des compartiments (ou fichiers) et utiliser la ruche sur chaque compartiment rempli , tout en utilisant d'autres compartiments pour continuer à stocker les données nouvellement arrivées.

Pig utilise également une évaluation paresseuse. Il permet une plus grande facilité de programmation et on peut l'utiliser pour analyser les données de différentes manières avec plus de liberté que dans un langage de type SQL comme Hive. Donc, si vous vouliez vraiment analyser des matrices ou des modèles dans certaines données non structurées que vous aviez, et que vous vouliez faire des calculs intéressants sur eux, avec Pig, vous pouvez faire une bonne distance, tandis qu'avec Hive, vous avez besoin d'autre chose pour jouer avec les résultats.

Pig est plus rapide dans l'importation de données mais plus lent dans l'exécution réelle qu'un langage convivial RDBMS comme Hive.

Pig est bien adapté à la parallélisation et a donc peut-être un avantage pour les systèmes où les ensembles de données sont énormes, c'est-à-dire dans les systèmes où vous êtes plus préoccupé par le débit de vos résultats que par la latence (le temps pour obtenir une donnée particulière de résultat).

avaler
la source
10

Hive Vs Pig-

Hive est une interface SQL qui permet aux utilisateurs avertis de SQL ou à d'autres outils comme Tableu / Microstrategy / tout autre outil ou langage ayant une interface SQL.

PIG ressemble plus à un pipeline ETL..avec des commandes étape par étape comme déclarer des variables, boucler, itérer, des instructions conditionnelles, etc.

Je préfère écrire des scripts Pig plutôt que HL QL lorsque je veux écrire une logique étape par étape complexe. Quand je suis à l'aise d'écrire un seul sql pour extraire les données, je veux utiliser Hive. pour la ruche, vous devrez définir la table avant d'interroger (comme vous le faites dans le SGBDR)

Le but des deux est différent mais sous le capot, les deux font la même chose, convertissent en programmes de réduction de carte. De plus, la communauté open source Apache ajoute de plus en plus de fonctionnalités aux deux projets.

Ashwin Aravind
la source
7
  1. Pig-latin est un style de flux de données, convient mieux aux ingénieurs logiciels. Alors que sql est plus adapté aux analystes qui sont habitués à sql. Pour les tâches complexes, pour la ruche, vous devez créer manuellement une table temporaire pour stocker les données intermédiaires, mais ce n'est pas nécessaire pour le porc.

  2. Pig-latin convient à une structure de données complexe (comme un petit graphique). Il y a une structure de données dans Pig appelée DataBag qui est une collection de Tuple. Parfois, vous devez calculer des métriques qui impliquent plusieurs tuples (il y a un lien caché entre les tuples, dans ce cas je l'appellerais graphique). Dans ce cas, il est très facile d'écrire un UDF pour calculer les métriques qui impliquent plusieurs tuples. Bien sûr, cela pourrait être fait dans la ruche, mais ce n'est pas aussi pratique que chez le porc.

  3. À mon avis, écrire UDF dans Pig est beaucoup plus facile que dans Hive.

  4. Pig ne prend pas en charge les métadonnées (ou il est facultatif, à l'avenir, il peut intégrer hcatalog). Hive a des métadonnées de tables stockées dans la base de données.

  5. Vous pouvez déboguer le script pig dans un environnement local, mais il serait difficile pour hive de le faire. La raison en est le point 3. Vous devez configurer des métadonnées de ruche dans votre environnement local, ce qui prend beaucoup de temps.

zjffdu
la source
4

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

Hive n'est pas une base de données complète. Les contraintes et limitations de conception de Hadoop et HDFS imposent des limites à ce que Hive peut faire.

Hive est le plus adapté aux applications d'entrepôt de données, où

1) Des données relativement statiques sont analysées,

2) Des temps de réponse rapides ne sont pas nécessaires, et

3) Lorsque les données ne changent pas rapidement.

Hive ne fournit pas les fonctionnalités essentielles requises pour OLTP, Online Transaction Processing. C'est plus près d'être un outil OLAP, le traitement analytique en ligne. Ainsi, Hive est le mieux adapté aux applications d'entrepôt de données, où un grand ensemble de données est maintenu et exploité pour des informations, des rapports, etc.

Margon
la source
4

En termes plus simples, Pig est une plate-forme de haut niveau pour créer des programmes MapReduce utilisés avec Hadoop, en utilisant des scripts pig, nous traiterons la grande quantité de données dans le format souhaité.

Une fois les données traitées obtenues, ces données traitées sont conservées dans HDFS pour un traitement ultérieur afin d'obtenir les résultats souhaités.

En plus des données traitées stockées, nous appliquerons les commandes SQL HIVE pour obtenir les résultats souhaités, en interne, cette commande sql sql exécute les programmes MAP Reduce.

user3167459
la source
ce n'est pas vraiment un ajout significatif à la base de connaissances. essayez d'ajouter plus d'informations
agconti
4

Pour donner un aperçu de très haut niveau des deux, en bref:

1) Pig est une algèbre relationnelle sur hadoop

2) Hive est un SQL over hadoop (un niveau au-dessus de Pig)

exAres
la source
La comparaison d'algèbre est intéressante
Ravindra babu
3

Que peut faire HIVE qui n'est pas possible en PIG?

Le partitionnement peut être fait en utilisant HIVE mais pas en PIG, c'est un moyen de contourner la sortie.

Que PIG peut faire ce qui n'est pas possible dans HIVE?

Référencement positionnel - Même lorsque vous n'avez pas de nom de champ, nous pouvons faire référence en utilisant la position comme $ 0 - pour le premier champ, $ 1 pour le second et ainsi de suite.

Et une autre différence fondamentale est que PIG n'a pas besoin d'un schéma pour écrire les valeurs mais HIVE a besoin d'un schéma.

Vous pouvez vous connecter à partir de n'importe quelle application externe à HIVE en utilisant JDBC et autres, mais pas avec PIG.

Remarque: Les deux exécutions au-dessus de HDFS (système de fichiers distribué hadoop) et les instructions sont converties en programmes Map Reduce.

221B
la source
3

Lorsque nous utilisons Hadoopdans le sens où cela signifie que nous essayons un traitement de données énorme Le but final du traitement de données serait de générer du contenu / des rapports à partir de celui-ci.

Il se compose donc en interne de 2 activités principales:

1) Chargement du traitement des données

2) Générez du contenu et utilisez-le pour le reporting / etc.

Chargement / traitement des données -> Pig serait utile.

Cela aide en tant qu'ETL (nous pouvons effectuer des opérations etl en utilisant des scripts pig.).

Une fois le résultat traité, nous pouvons utiliser hive pour générer les rapports basés sur le résultat traité.

Hive: Son construit au-dessus de hdfs pour le traitement en entrepôt.

Nous pouvons générer facilement des rapports ad hoc en utilisant ruche à partir du contenu traité généré à partir de porc.

shyamshyre
la source
1

Pig mange n'importe quoi! Cela signifie qu'il peut consommer des données non structurées.

Hive nécessite un schéma.

rbanikaz
la source
1

Pig est utile pour les types de charges de travail ETL en général. Par exemple, un ensemble de transformations que vous devez effectuer quotidiennement avec vos données.

Hive brille lorsque vous avez besoin d'exécuter des requêtes ad hoc ou que vous souhaitez simplement explorer les données. Il peut parfois servir d'interface avec votre couche de visualisation (Tableau / Qlikview).

Les deux sont essentiels et ont des objectifs différents.

Krishna Kalyan
la source