Quelle est la différence entre Apache Pig et Apache Hive?

Quelle est la différence exacte entre le porc et la ruche? J'ai découvert que les deux ont la même signification fonctionnelle parce qu'ils sont utilisés pour faire le même travail. La seule chose est l'implimentation qui est différente pour les deux. Alors, quand utiliser et quelle technologie? Y a-t-il une spécification pour les deux qui montre clairement la différence entre les deux en termes d'applicabilité et de performance?

18
demandé sur Sean Owen 2012-04-23 15:47:46

5 réponses

Apache Pig et Hive sont deux projets qui se superposent sur Hadoop, et fournissent un langage de niveau supérieur pour utiliser la bibliothèque MapReduce de Hadoop. Apache Pig fournit un langage de script pour décrire des opérations comme la lecture, le filtrage, la transformation, l'assemblage et l'écriture de données -- exactement les opérations pour lesquelles MapReduce a été conçu à l'origine. Plutôt que d'exprimer ces opérations en milliers de lignes de code Java qui utilise MapReduce directement, Pig permet aux utilisateurs de les exprimer dans un langage un peu comme un script bash ou perl. Pig est excellent pour le prototypage et le développement rapide des travaux basés sur MapReduce, par opposition au codage des travaux MapReduce en Java lui-même.

si Pig est "scripting for Hadoop", alors Hive est"requêtes SQL pour Hadoop". Apache Hive offre un langage encore plus spécifique et de niveau supérieur, pour interroger les données en exécutant des tâches Hadoop, plutôt que de scripter directement, étape par étape, l'opération de plusieurs tâches MapReduce sur Hadoop. Le langage est, par conception, extrêmement SQL-like. Hive est toujours conçu comme un outil pour les requêtes de longue durée orientées par lots sur des données massives; il n'est pas "en temps réel" en aucun sens. Hive est un excellent outil pour les analystes et les types de développement d'affaires qui sont habitués à des requêtes de type SQL et des systèmes D'Intelligence D'affaires; il leur permettra de tirer facilement parti de votre nouveau cluster Hadoop brillant pour effectuer des requêtes ad-hoc ou de générer des données de rapport à travers les données stockées dans les systèmes de stockage mentionnés ci-dessus.

37
répondu Sean Owen 2014-06-14 21:58:07

d'un point de vue purement technique, je trouve le PIG plus facile à écrire et à entretenir que les langages de type SQL. Il est procédural, donc vous appliquez un tas de relations à vos données un par un, et si quelque chose échoue, vous pouvez facilement déboguer aux étapes intermédiaires, et même avoir une commande appelée "illustrer" qui utilise un algorithme pour échantillonner certaines données correspondant à votre relation. Je dirais que pour les travaux avec une logique complexe, c'est certainement beaucoup plus pratique que la ruche, mais pour les choses simples le gain est probablement minime.

en ce qui concerne l'interfaçage, je trouve que le porc offre beaucoup de flexibilité par rapport à la ruche. Vous n'avez pas de notion de table dans PIG donc vous manipulez les fichiers directement, et vous pouvez définir loader pour le charger dans à peu près n'importe quel format très facilement avec loader UDFs, sans avoir à passer par l'étape de chargement de table avant de pouvoir faire vos transformations. Ils ont une belle fonctionnalité dans les versions récentes de PIG où vous pouvez utiliser dynamic invokers, i.e. utiliser à peu près tout Méthode Java directement dans votre script PIG, sans avoir à écrire un UDF.

pour la performance / optimisation, de ce que j'ai vu, vous pouvez contrôler directement dans le porc le type d'algorithme de jointure et de regroupement que vous voulez utiliser (je crois 3 ou 4 algorithmes différents pour chacun). Personnellement, je ne l'ai jamais utilisé, mais comme vous écrivez des algorithmes exigeants, il pourrait probablement être utile de pouvoir décider quoi faire au lieu de compter sur l'optimiseur comme c'est le cas dans Hive. Donc, je ne dirais pas que c' fonctionne nécessairement mieux que la ruche, mais dans les cas où l'optimiseur prend la mauvaise décision, vous avez la possibilité de choisir quel algorithme à utiliser et avoir plus de contrôle sur ce qui se passe.

une des choses les plus cool que j'ai faite dernièrement, c'était les scissions: vous pouvez diviser votre flux d'exécution et appliquer des relations différentes à chaque scission. Donc vous pouvez avoir un ensemble de données non-linéaire, le diviser basé sur un champ, et appliquer un traitement différent à chaque partie, et peut-être joindre les résultats ensemble à la fin, tous dans le même script. Je ne pense pas que tu puisses faire ça dans Hive, tu devrais écrire des requêtes différentes pour chaque cas, mais je me trompe peut-être.

une chose à noter également est que vous pouvez increment counters dans le porc. Actuellement, vous pouvez seulement le faire dans les UDFs de porc. Je ne pense pas que vous pouvez utiliser des pions dans la ruche.

et il y a quelques beaux projets qui vous permettent d'interfacer PIG avec Hive aussi bien (comme HCatalog), donc vous pouvez fondamentalement lire des données d'une table de hive, ou écrire des données à une table ruche (ou les deux) en changeant simplement votre chargeur dans le script. Supporte les cloisons dynamiques aussi bien.

7
répondu Charles Menguy 2012-04-23 16:05:59

Apache Pig est une plate-forme d'analyse de grands ensembles de données. Le langage de Pig, Pig Latin, est une simple algèbre de requête qui vous permet d'exprimer des transformations de données telles que la fusion d'ensembles de données, leur filtrage et l'application de fonctions à des enregistrements ou des groupes d'enregistrements. Les utilisateurs peuvent créer leurs propres fonctions pour faire le traitement spécial.

Pig Latin requêtes à exécuter dans un mode de distribution sur un cluster. Notre mise en œuvre actuelle compile les programmes Pig Latin en emplois Map-Reduce, et les exécute en utilisant Hadoop cluster.

https://cwiki.apache.org/confluence/display/PIG/Index%3bjsessionid=F92DF7021837B3DD048BF9529A434FDA

Hive est un système de stockage de données pour Hadoop qui facilite la synthèse facile de données, les requêtes ad-hoc, et l'analyse de grands ensembles de données stockées dans des systèmes de fichiers compatibles Hadoop. Hive fournit un mécanisme pour projeter la structure sur ces données et interroger les données en utilisant un langage de type SQL appelé HiveQL. Dans le même le temps ce langage permet aussi aux programmeurs traditionnels de map/reduce de brancher leurs mappers et réducteurs personnalisés quand il n'est pas pratique ou inefficace d'exprimer cette logique en HiveQL.

https://cwiki.apache.org/Hive/

3
répondu Infinity 2012-04-23 20:46:48

Quelle est la différence exacte entre le porc et la ruche? J'ai découvert que les deux ont la même signification fonctionnelle parce qu'ils sont utilisés pour faire le même travail.

regardez Porc Vs Ruche Comparaison coque de noixdezyre article

la Ruche au cours des scores porcPartitions, Server, Web interface & JDBC / ODBC support.

Certains différences:

  1. la Ruche est le meilleur pour Données structurées& porc est le meilleur pour données semi-structurées

  2. la Ruche utilisé pour déclaration& porcprogrammation

  3. la Ruche utilisé comme declarative SQL& porc utilisé comme langue de la procédure

  4. la Ruche partitions& porc ne pas

  5. la Ruche peut démarrer un aubaines en fonction de serveur& porc ne peut pas

  6. la Ruche définit les tables avant la main (schéma) + stocke les informations du schéma dans la base de données et porc n'a pas consacré de métadonnées de base de données

  7. la Ruche ne supporte pas Avro mais porc

  8. Porc supporte aussi des COGROUP fonctionnalité pour effectuer des jointures externes, mais la ruche ne le fait pas. Mais les deux Ruche & cochon joindre, commander & trier dynamiquement

alors quand utiliser et quelle technologie?

la différence ci-dessus clarifie votre requête.

HIVE : données Structurées, des requêtes de type SQL et utilisé pour fins de rapport