2010-07-19 21 views
5

Dans Hadoop, vous pouvez utiliser le mécanisme de tri secondaire pour trier les valeurs avant qu'elles ne soient envoyées au réducteur. La façon dont cela est fait dans Hadoop est que vous ajoutez la valeur à trier par à la clé, puis que vous avez des méthodes de comparaison de groupes et de clés personnalisées qui se connectent au système de tri. Par conséquent, vous aurez besoin d'une clé composée essentiellement de la clé réelle et de la valeur à trier. Pour que cela fonctionne assez vite, j'ai besoin d'un moyen de créer une clé composite qui soit aussi facile à décomposer dans les parties séparées nécessaires pour les méthodes de comparaison de groupe et de clé.Quelle classe de clé convient au tri secondaire?

Quelle est la manière la plus intelligente de le faire. Existe-t-il une classe Hadoop "prête à l'emploi" qui peut m'aider dans cette tâche ou dois-je créer une classe de clé séparée pour chaque étape de réduction de la carte?

Comment faire cela si la clé est en fait un composite composé de plusieurs parties (également nécessaire en raison du partitionneur)?

Que recommandez-vous?

P.S. Je voulais ajouter le tag "secondary-sort" mais je n'ai pas encore assez de rep pour le faire.

+1

là vous allez (j'ai ajouté l'étiquette) :-) –

+0

Merci d'ajouter l'étiquette :) –

+0

N'a pas tout à fait obtenir votre question, pourriez-vous ajouter un court exemple? – Sudarshan

Répondre

0

Vous devez changer les clés de façon repartitionnées et regroupées, et thisbasicakly signifie que vous mettez plus de 1 type de données dans les clés, tout redéfinissant la méthode de comparaison pour le partitionnement et le regroupement ....

-Vous pouvez sérialiser/désérialiser vos clés et gérer les données d'entrée en tant qu'objets ou haricots si vous voulez un code robuste fortement typé pour le tri secondaire ...

-pour des scénarios plus simples, il suffit de mettre un signe "#" entre les valeurs!

Il y a un grand article de haut niveau sur ce ici:

http://pkghosh.wordpress.com/2011/04/13/map-reduce-secondary-sort-does-it-all/

1

je courais dans cette situation tout le temps et se fatiguer d'écrire des classes clés personnalisées composites. J'ai écrit une classe Tuple générique qui est une liste d'objets et peut agir comme une clé composite. La liste peut contenir un nombre arbitraire d'objets de type enveloppe Java primitive. Il implémente WritableComparable. La source peut être consultée ici

https://github.com/pranab/chombo/blob/master/src/main/java/org/chombo/util/Tuple.java

0

J'ai eu une situation dans laquelle je devais trier les données sur deux colonnes, l'une est de type chaîne et un autre type entier. J'ai écrit mon WritableComparable personnalisé, et dans la méthode compareTo j'ai écrit ma logique. C'est en fait un meilleur moyen de mon point de vue, car nous pouvons personnaliser notre logique de tri.