hadoop - tutorial - which of the following tools is designed to move data to and from a relational database?




Différence entre le porc et la ruche? Pourquoi les deux? (13)

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

Je comprends que-

  • Le langage de Pig Le Latin de Pig est un changement de (s'adapte à la façon dont les programmeurs pensent) SQL comme style déclaratif de programmation et le langage de requête de Hive ressemble étroitement à SQL.

  • Le cochon se trouve sur le dessus de Hadoop et peut en principe aussi s'asseoir sur Dryad. Je peux me tromper, mais Hive est étroitement liée à Hadoop.

  • Les commandes Pig Latin et Hive sont compilées pour Map et Reduce jobs.

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


  1. Pig-latin est le style de flux de données, est plus approprié pour l'ingénieur logiciel. Alors que sql est plus adapté à la personne d'analyse qui s'habitue à sql. Pour la tâche complexe, pour la ruche, vous devez manuellement créer une table temporaire pour stocker les données intermédiaires, mais ce n'est pas nécessaire pour le porc.

  2. Pig-latin est adapté à la structure de données compliquée (comme le petit graphique). Il y a une structure de données dans le cochon appelé 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 peut être fait dans une ruche, mais ce n'est pas aussi pratique que dans un cochon.

  3. Ecrire UDF en cochon est beaucoup plus facile que dans Hive à mon avis.

  4. Pig n'a pas de support de métadonnées, (ou c'est facultatif, dans le futur il peut 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 cochon 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.


Découvrez cet post de 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.


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 cochon nous traiterons la grande quantité de données dans le format désiré.

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

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


Hive Vs Pig-

Hive est en tant qu'interface SQL qui permet aux utilisateurs avisés SQL ou d'autres outils comme Tableu / Microstrategy / tout autre outil ou langue qui a une interface sql ..

PIG ressemble plus à un pipeline ETL..avec des commandes pas à pas comme la déclaration de variables, la boucle, l'itération, les instructions conditionnelles, etc.

Je préfère écrire des scripts Pig sur QL Hive quand je veux écrire une logique complexe étape par étape. Lorsque je suis à l'aise d'écrire un seul sql pour tirer les données que je veux, j'utilise Hive. pour la ruche, vous aurez besoin de définir la table avant d'interroger (comme vous le faites dans le SGBDR)

Le but de tous les deux sont différents, mais sous le capot, les deux font la même chose, convertir en carte réduire les programmes.Aussi la communauté open source Apache est d'ajouter de plus en plus de fonctionnalités à la fois là projets



Je crois que la vraie réponse à votre question est que ce sont / étaient des projets indépendants et qu'il n'y avait pas d'objectif centralisé coordonné. Ils se trouvaient dans des espaces différents dès le début et se sont chevauchés avec le temps au fur et à 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é


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

Hive nécessite un schéma.


Le porc est utile pour les charges de travail de type ETL en général. Par exemple, un ensemble de transformations que vous devez faire à vos données tous les jours.

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

Les deux sont essentiels et servent un but différent.


Lorsque nous utilisons Hadoop dans le sens où cela signifie que nous essayons de traiter d'énormes quantités de données, l'objectif final du traitement des données serait de générer du contenu / des rapports à partir de celui-ci.

Donc il se compose en interne de 2 activités principales 1) Chargement du traitement des données 2) Générer du contenu et l'utiliser pour le reporting / etc ..

Chargement / Data Procesing -> Pig serait utile. Cela aide comme un ETL (Nous pouvons effectuer des opérations etl en utilisant des scripts cochon.) Une fois que le résultat est 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 d'entrepôt. Nous pouvons facilement générer des rapports ad hoc en utilisant la ruche à partir du contenu traité généré à partir de porc.


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

Hive, qui est basé sur RDBMS, a besoin que les données soient d'abord importées (ou chargées) et après cela il peut être travaillé. Donc, si vous utilisiez Hive sur des données en continu, vous deviez continuer à remplir des compartiments (ou des fichiers) et utiliser la ruche sur chaque compartiment rempli , tout en utilisant d'autres compartiments pour conserver les données nouvellement arrivées.

Le porc utilise également l'é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 SQL comme Hive. Donc, si vous vouliez vraiment analyser des matrices ou des modèles dans des 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 d'autre chose pour jouer avec les résultats.

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

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



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

Le porc a tendance à créer un flux de données: de petites étapes dans lesquelles vous effectuez un traitement
Hive vous donne un langage de type SQL pour fonctionner sur vos données, donc la transformation à partir de SGBDR est beaucoup plus facile (Le cochon peut être plus facile pour quelqu'un qui n'avait pas d'expérience avec SQL)

Il est également intéressant de noter que pour Hive vous pouvez utiliser une interface sympa pour travailler avec ces données (Beeswax for HUE, ou interface web Hive), et il vous donne également des métastores pour des informations sur vos données (schéma, etc) qui sont utiles comme 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 pour la plupart des requêtes ad hoc) - elles peuvent utiliser les mêmes données en entrée. Mais actuellement je fais beaucoup de mon travail à travers Beeswax.


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:

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

Sur l'utilisation d'autres outils en streaming:

L'intégration de pig au streaming permet également aux chercheurs de prendre 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 meilleurs. En effet, l'entreposage de données a été l'un des principaux cas d'utilisation de SQL à travers une grande partie de son histoire. Il a les bonnes constructions pour supporter les types de requêtes et d'outils que les analystes veulent 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 de BI via des interfaces telles que ODBC.





apache-pig