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?
la source
Réponses:
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.
la source
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é.
la source
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:
Sur l'utilisation d'autres outils via le streaming:
Sur l'utilisation de Hive pour l'entreposage de données:
la source
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:
Hive est le meilleur pour les données structurées et PIG est le meilleur pour les données semi-structurées
Hive est utilisé pour les rapports et PIG pour la programmation
Hive est utilisé comme SQL déclaratif et PIG comme langage procédural
Hive prend en charge les partitions et PIG ne fonctionne pas
Hive peut démarrer un serveur d'épargne en option et PIG ne peut pas
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
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
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.
la source
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:
la source
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.
la source
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).
la source
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.
la source
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 que choisir, vous devez voir cette page Web.
la source
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.
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.
À mon avis, écrire UDF dans Pig est beaucoup plus facile que dans Hive.
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.
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.
la source
J'ai trouvé ci-dessous un lien utile pour explorer comment et quand utiliser HIVE et PIG.
http://www.hadoopwizard.com/when-to-use-pig-latin-versus-hive-sql/
la source
Voici quelques liens supplémentaires pour utiliser Pig ou Hive.
http://aws.amazon.com/elasticmapreduce/faqs/#hive-8
http://www.larsgeorge.com/2009/10/hive-vs-pig.html
la source
À 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.
la source
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.
la source
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)
la source
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.
la source
Lorsque nous utilisons
Hadoop
dans 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.
la source
Pig mange n'importe quoi! Cela signifie qu'il peut consommer des données non structurées.
Hive nécessite un schéma.
la source
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.
la source