2010-12-27 6 views
3

J'ai écrit un simple code de clustering k-means pour Hadoop (deux programmes distincts - mapper et réducteur). Le code fonctionne sur un petit jeu de données de 2 points sur ma boîte locale. Il est écrit en Python et je prévois d'utiliser l'API Streaming.Iterative MapReduce

Je voudrais des suggestions sur la meilleure façon d'exécuter ce programme sur Hadoop. Après chaque cycle de mappeur et de réducteur, de nouveaux centres sont générés. Ces centres sont entrés pour la prochaine itération. D'après ce que je peux voir, chaque itération de mapreduce devra être un travail séparé de mapreduce. Et il me semble que je vais devoir écrire un autre script (python/bash) pour extraire les nouveaux centres de HDFS après chaque phase de réduction, et le renvoyer au mappeur.

Une autre manière plus facile, moins désordonnée? Si le cluster arrive à utiliser un ordonnanceur équitable, il faudra très longtemps avant que ce calcul se termine?

Répondre

0

Se sent drôle de répondre à ma propre question. J'ai utilisé PIG 0.9 (pas encore publié, mais disponible dans le coffre). En cela, il existe un support pour la modularité et le contrôle de flux en permettant d'intégrer des instructions PIG dans des langages de script tels que Python. Donc, j'ai écrit un script python principal qui avait une boucle, et à l'intérieur qui appelait mes Scripts PIG. Les scripts PIG inturn ont fait des appels aux UDF. Donc, a dû écrire trois programmes différents. Mais ça a bien marché.

Vous pouvez vérifier l'exemple ici - http://www.mail-archive.com/[email protected]/msg00672.html

Pour mémoire, mes UDFs ont également été écrit en Python, en utilisant cette nouvelle fonctionnalité qui permet d'écrire dans UDFs langages de script.

0

Voici quelques façons de le faire: github.com/bwhite/hadoop_vision/tree/master/kmeans~~V~~singular~~2nd

Vérifiez également ceci dehors (a le soutien d'oozie): http://bwhite.github.com/hadoopy/

1

Vous n'avez pas besoin d'écrire un autre travail. Vous pouvez placer le même travail dans une boucle (boucle while) et continuer à modifier les paramètres du travail, de sorte que lorsque le mappeur et le réducteur terminent leur traitement, le contrôle commence par créer une nouvelle configuration, puis vous avez automatiquement un fichier d'entrée qui est la sortie de la phase précédente.