web-dev-qa-db-fra.com

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

Mon parcours - 4 semaines dans le monde Hadoop. Un peu trempé dans Hive, Pig et Hadoop en utilisant la machine virtuelle Hadoop de Cloudera. J'ai lu le document de Google sur Map-Reduce et GFS ( lien PDF ).

Je comprends que-

  • Langage de Pig Pig Latin est un changement de langage SQL (comme le pensent les programmeurs) comme le style de programmation déclaratif et le langage de requête de Hive ressemble beaucoup à SQL.

  • Le porc est assis sur Hadoop et peut en principe aussi reposer sur Dryad. Je me trompe peut-être, mais Hive est étroitement associé à Hadoop.

  • Les commandes Pig Latin et Hive sont toutes deux compilées pour mapper et réduire les travaux.

Ma question - Quel est l’objectif d’avoir les deux quand on (par exemple Pig) pourrait servir à cela? Est-ce juste parce que Pig est évangélisé par Yahoo! et Hive by Facebook?

253
Arnkrishn

Découvrez ceci post de Alan Gates, architecte Pig chez Yahoo !, qui compare le moment où utiliserait un code SQL comme Hive plutôt que Pig. Il présente des arguments très convaincants quant à l'utilité d'un langage procédural tel que Pig (versus SQL déclaratif) et de son utilité pour les concepteurs de flux de données.

150
Jakob Homan

Hive a été conçu pour attirer une communauté à l'aise avec SQL. Sa philosophie était que nous n’avions pas besoin d’un autre langage de script. Hive prend en charge les scripts de transformation et de mappage dans le langage de votre choix (qui peut être incorporé dans des clauses SQL). Il est largement utilisé sur Facebook par des analystes maîtrisant le langage SQL ainsi que par les programmeurs de données travaillant en Python. Les efforts de compatibilité SQL dans Pig ont été abandonnés d’AAVAIK - 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 d'intégrer des outils de BI existants tels que Microstrategy. Hive a un pilote ODBC/JDBC (un travail en cours) qui devrait permettre que cela se produise dans un avenir proche. Il commence également à prendre en charge les index, ce qui devrait permettre la prise en charge des requêtes d’exploration courantes dans ces environnements.

Enfin - ceci n'est pas pertinent pour la question directement - Hive est un cadre permettant de réaliser des requêtes analytiques. Bien que son utilisation principale soit d'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 des données stockées dans Hbase (qui est un magasin de valeurs-clés similaire à celles trouvées dans les entrailles de la plupart des SGBDR), et le projet HadoopDB a utilisé Hive pour interroger un niveau de SGBDR fédéré.

56
Joydeep Sen Sarma

J'ai trouvé cela le plus utile (bien que ce soit 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:

La meilleure approche consiste à combiner les nouvelles données incrémentielles et à utiliser les résultats avec ceux de la jointure complète précédente. 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émentale dans Pig Latin, faisant de Pig un bon outil pour ce cas d'utilisation.

Utilisation d'autres outils via le streaming:

L'intégration de Pig avec la diffusion en continu permet également aux chercheurs de prendre facilement un script Perl ou Python déjà débogué sur un petit ensemble de données et de l'exécuter sur un énorme ensemble de données.

Utilisation de Hive pour l’entreposage de données:

Dans les deux cas, le modèle relationnel et SQL sont la meilleure solution. 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 possède les structures appropriées 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é à s’intégrer aux outils de BI via des interfaces telles que ODBC.

37
j03m

Jetez un coup d'oeil à Pig Vs Hive Comparaison dans un écro à partir d'un article "dezyre"

Hive est meilleur que PIG dans: Partitions, Server, Web interface et support JDBC/ODBC.

Quelques différences:

  1. Ruche est préférable pour données structurées & COCHON est le meilleur pour données semi-structurées

  2. Hive est utilisé pour signaler & COCHON pour programmation

  3. Hive est utilisé comme SQL déclaratif & COCHON en tant que langage procédural

  4. Hive prend en charge partitions & COCHON ne fait pas

  5. Hive peut démarrer un optionnel serveur basé sur l'épargne & COCHON ne peut pas

  6. Hive définit des tables à l'avance (schéma) + stocke les informations de schéma dans une base de données & PIG n'a pas de métadonnées dédiées à la base de données

  7. Hive ne supporte pas Avro mais COCHON Est-ce que. 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é supplémentaire COGROUP permettant de réaliser des jointures externes, mais pas Hive. Mais les deux Hive & PIG peuvent rejoindre, commander et trier dynamiquement.

28
Ravindra babu

Je pense que la vraie réponse à votre question est qu’il s’agissait de projets indépendants et qu’il n’y avait pas d’objectif coordonné au niveau central. Ils se trouvaient très tôt dans différents espaces et se chevauchent avec le temps, à mesure que les deux projets se développent.

Paraphrasé du livre de Hadoop O'Reilly:

Pig: langage et environnement de flux de données permettant d'explorer de très grands ensembles de données.

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

17
G__

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

Pig a tendance à créer un flux de données: de petites étapes dans lesquelles vous effectuez un traitement.
Hive vous donne un langage semblable à SQL pour exploiter vos données. La transformation à partir de SGBDR est donc beaucoup plus facile (Pig peut être plus facile pour une personne n'ayant jamais utilisé SQL auparavant).

Il est également intéressant de noter que pour Hive, vous pouvez utiliser une interface conviviale avec ces données (Beeswax pour HUE ou interface Web Hive), ainsi qu’un métastore d’informations sur vos données (schéma, etc.), qui est utile informations centrales sur vos données.

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

12
wlk

Pig permet de charger des données et du code utilisateur à n’importe quel point du pipeline. Cela peut être particulièrement important si les données sont des données en continu, par exemple des données de satellites ou d’instruments.

Hive, basé sur le SGBDR, nécessite que les données soient d'abord importées (ou chargées), après quoi elles peuvent être traitées. Ainsi, si vous utilisiez Hive pour la diffusion en continu de données, vous deviez conserver des seaux de remplissage (ou des fichiers) et utiliser Hive sur chaque compartiment rempli, tout en utilisant d'autres compartiments pour conserver les nouvelles données.

Le porc utilise également l'évaluation paresseuse. Il permet une plus grande facilité de programmation et permet d’analyser les données de différentes manières avec plus de liberté que dans un langage semblable à SQL tel que 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, avec Pig, vous pouvez aller assez loin, alors qu'avec Hive, vous avez besoin de quelque chose d'autre 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 pour le SGBDR, tel que Hive.

Pig est bien adapté à la parallélisation et a donc éventuellement un Edge pour les systèmes où les jeux 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 le temps de latence (le temps nécessaire pour obtenir un datum particulier).

12
swarb

Hive Vs Pig-

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

PIG ressemble plus à un pipeline ETL..avec des commandes pas à pas telles que la déclaration de variables, la mise en boucle, les itérations, les instructions conditionnelles, etc.

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

Les objectifs des deux sont différents, 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 à ses deux projets.

9
Ashwin Aravind

Lisez la différence entre PIG et Hive dans ce lien.

http://www.aptibook.com/Articles/Pig-and-Hive-advantages-disadvantages-features

Tous les aspects sont donnés. Si vous êtes dans la confusion, choisissez cette page Web.

8
Jegan
  1. Pig-latin est un style de flux de données, est plus approprié pour un ingénieur en logiciel. Alors que SQL est plus approprié pour la personne d'analyse qui s'habitue à SQL. Pour les tâches complexes, pour Hive, vous devez créer manuellement une table temporaire pour stocker des données intermédiaires, mais ce n'est pas nécessaire pour pig.

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

  3. Écrire UDF chez Porc est beaucoup plus facile que dans Hive à mon avis.

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

  5. Vous pouvez déboguer un script pig dans l'environnement local, mais Hive aurait du mal à le faire. La raison en est le point 3. Vous devez configurer les métadonnées Hive dans votre environnement local, ce qui prend beaucoup de temps.

7
zjffdu

J'ai trouvé ci-dessous un lien utile pour explorer comment et quand utiliser Hive and PIG.

http://www.hadoopwizard.com/when-to-use-pig-latin-versus-Hive-sql/

5
Raj

Voici quelques liens supplémentaires sur l'utilisation de Pig ou de Hive.

http://aws.Amazon.com/elasticmapreduce/faqs/#Hive-8

http://www.larsgeorge.com/2009/10/Hive-vs-pig.html

4
Praveen Sripati

En termes plus simples, Pig est une plate-forme de haut niveau pour la création de programmes MapReduce utilisés avec Hadoop. À l'aide de scripts pig, nous allons traiter la grande quantité de données au 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 Hive SQL pour obtenir les résultats souhaités. En interne, ces commandes Hive sql exécutent les programmes MAP Reduce.

4
user3167459

A 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 les limites de conception de Hadoop et HDFS imposent des limites à ce que Hive peut faire.

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

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

2) les 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 cruciales requises pour OLTP, le traitement des transactions en ligne. Il s’agit plus d’un outil OLAP, traitement analytique en ligne. Hive convient donc parfaitement aux applications d'entrepôt de données, où un grand ensemble de données est géré et exploité pour des informations, des rapports, etc.

4
Margon

Qu'est-ce que Hive peut faire ce qui n'est pas possible chez PIG?

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

Qu'est-ce que PIG peut faire, ce qui n'est pas possible dans HIVE?

Référencement positionnel - Même lorsque vous n'avez pas de noms de champs, nous pouvons référencer 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 depuis n'importe quelle application externe à Hive à l'aide de JDBC et d'autres, mais pas avec PIG.

Remarque: les deux s'exécutent sur le système HDFS (système de fichiers distribué hadoop) et les instructions sont converties en programmes Map Reduce.

3
221B

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

Donc, il comprend en interne 2 activités principales:

1) Chargement des données

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

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

Cela aide en tant que ETL (Nous pouvons effectuer des opérations etl à l’aide de scripts pig.).

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

Hive: Il est construit au dessus de hdfs pour le traitement de l’entrepôt.

Nous pouvons générer facilement des rapports ad hoc en utilisant Hive à partir du contenu traité généré par pig.

3
shyamshyre

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 sur hadoop (un niveau au dessus de Pig)

3
Sangram

Pig est utile pour le type de charge de travail ETL en général. Par exemple, un ensemble de transformations que vous devez faire à vos données chaque jour.

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

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

1
Krishna Kalyan

Le porc mange n'importe quoi! Ce qui signifie qu'il peut consommer des données non structurées.

Ruche nécessite un schéma.

1
rbanikaz