J'ai une compréhension de base de ce que sont les abstractions Pig, Hive. Mais je n'ai pas d'idée claire sur les scénarios qui nécessitent une réduction de Hive, Pig ou native map.
J'ai parcouru quelques articles qui soulignent essentiellement que Hive est pour le traitement structuré et Pig est pour le traitement non structuré. Quand faut-il réduire la carte native? Pouvez-vous signaler quelques scénarios qui ne peuvent pas être résolus en utilisant Pig ou Hive mais dans la carte native réduire?
La logique de branchement complexe qui a beaucoup de structures imbriquées si .. sinon .. est plus facile et plus rapide à implémenter dans MapReduce standard, pour le traitement de données structurées que vous pourriez utiliser Pangool , cela simplifie également des choses comme JOIN. MapReduce standard vous offre également un contrôle total pour minimiser le nombre de travaux MapReduce requis par votre flux de traitement de données, ce qui se traduit par des performances. Mais il faut plus de temps pour coder et introduire des changements.
Apache Pig est également bon pour les données structurées, mais son avantage est la possibilité de travailler avec des BAG de données (toutes les lignes qui sont regroupées sur une clé), il est plus simple d'implémenter des choses comme:
Hive est mieux adapté aux requêtes ad hoc, mais son principal avantage est qu'il dispose d'un moteur qui stocke et partitionne les données. Mais ses tableaux peuvent être lus à partir de Pig ou de MapReduce standard.
Encore une chose, Hive et Pig ne sont pas bien adaptés pour travailler avec des données hiérarchiques.
Réponse courte - Nous avons besoin de MapReduce lorsque nous avons besoin d'un contrôle de niveau très profond et fin sur la façon dont nous voulons traiter nos données. Parfois, il n'est pas très pratique d'exprimer exactement ce dont nous avons besoin en termes de requêtes Pig et Hive.
Il ne devrait pas être totalement impossible de faire ce que vous pouvez utiliser MapReduce, via Pig ou Hive. Avec le niveau de flexibilité fourni par Pig and Hive, vous pouvez en quelque sorte réussir à atteindre votre objectif, mais ce n'est peut-être pas si fluide. Vous pouvez écrire des FDU ou faire quelque chose et y parvenir.
Il n'y a pas de distinction claire en tant que telle entre l'utilisation de ces outils. Cela dépend totalement de votre cas d'utilisation particulier. En fonction de vos données et du type de traitement dont vous avez besoin pour décider quel outil correspond le mieux à vos besoins.
Modifier:
Il y a quelque temps, j'avais un cas d'utilisation dans lequel je devais collecter des données sismiques et exécuter des analyses dessus. Le format des fichiers contenant ces données était quelque peu étrange. Une partie des données était EBCDIC encodée, tandis que le reste des données était au format binaire. Il s'agissait essentiellement d'un fichier binaire plat sans délimiteurs comme\n ou quelque chose. J'ai eu du mal à trouver un moyen de traiter ces fichiers en utilisant Pig ou Hive. En conséquence, j'ai dû m'installer avec MR. Au début, cela a pris du temps, mais progressivement, il est devenu plus fluide car MR est vraiment Swift une fois que vous avez le modèle de base prêt avec vous.
Donc, comme je l'ai dit plus tôt, cela dépend essentiellement de votre cas d'utilisation. Par exemple, itérer sur chaque enregistrement de votre jeu de données est vraiment facile dans Pig (juste un foreach), mais que faire si vous avez besoin foreach n ?? Ainsi, lorsque vous avez besoin de "ce" niveau de contrôle sur la façon dont vous devez traiter vos données, la MR est plus appropriée.
Une autre situation peut se présenter lorsque vos données sont hiérarchiques plutôt que basées sur des lignes ou si vos données sont hautement non structurées.
Les problèmes de métapatrons impliquant le chaînage et la fusion des travaux sont plus faciles à résoudre en utilisant MR directement plutôt qu'en utilisant Pig/Hive.
Et parfois, il est très très pratique d'accomplir une tâche particulière en utilisant un outil xyz par rapport à le faire en utilisant Pig/Hive. À mon humble avis, MR s'avère également mieux dans de telles situations. Par exemple, si vous devez effectuer des analyses statistiques sur votre BigData, R utilisé avec le streaming Hadoop est probablement la meilleure option.
HTH
Mapreduce:
Strengths:
works both on structured and unstructured data.
good for writing complex business logic.
Weakness:
long development type
hard to achieve join functionality
Ruche:
Strengths:
less development time.
suitable for adhoc analysis.
easy for joins
Weakness :
not easy for complex business logic.
deals only structured data.
Cochon
Strengths :
Structured and unstructured data.
joins are easily written.
Weakness:
new language to learn.
converted into mapreduce.
Ruche
Avantages:
Sql comme les gars de la base de données adorent ça. Bon support pour les données structurées. Prend actuellement en charge le schéma de base de données et les vues comme la structure. Prend en charge plusieurs utilisateurs simultanés, des scénarios multi-sessions. Un soutien communautaire plus important. Hive, Hiver server, Hiver Server2, Impala, Centry déjà
Inconvénients: les performances se dégradent à mesure que les données grossissent, pas grand-chose à faire, des problèmes de mémoire sur le flux. ne peux pas faire grand chose avec. Les données hiérarchiques représentent un défi. Les données non structurées nécessitent un composant de type udf La combinaison de plusieurs techniques pourrait être un cauchemar pour les portions dynamiques avec UTDF en cas de big data, etc.
Pig: Avantages: Excellent langage de flux de données basé sur des scripts.
Les inconvénients:
Les données non structurées nécessitent un composant de type udf Pas un grand support communautaire
MapReudce: Avantages: Je ne suis pas d'accord avec "la fonctionnalité de jointure difficile à réaliser", si vous comprenez quel type de jointure vous souhaitez implémenter, vous pouvez l'implémenter avec quelques lignes de code. La plupart du temps, MR donne de meilleures performances. La prise en charge MR des données hiérarchiques est excellente, en particulier pour implémenter des structures arborescentes. Meilleur contrôle du partitionnement/indexation des données. Chaînage des tâches.
Inconvénients: besoin de bien connaître l'API pour obtenir de meilleures performances, etc. Code/débogage/maintenance
Scénarios où Hadoop Map Reduce est préféré à Hive ou PIG
Lorsque vous avez besoin d'un contrôle précis du programme du pilote
Chaque fois que le travail nécessite l'implémentation d'un partitionneur personnalisé
S'il existe déjà une bibliothèque prédéfinie de Java Mappeurs ou Réducteurs pour un travail
Avantages de Pig/Hive:
Jetez un oeil à ce post pour Pig Vs Hive comparaison.
Ici est la grande comparaison. Il spécifie tous les scénarios de cas d'utilisation.
Toutes les choses que nous pouvons faire en utilisant PIG et Hive peuvent être réalisées en utilisant MR (parfois cela prendra du temps cependant). PIG and Hive utilise MR/SPARK/TEZ en dessous. Donc, toutes les choses que MR peut faire peuvent ou non être possibles dans Hive et PIG.