Question

Je souhaite partager des données statiques importantes en mémoire (index RAM lucene) pour mes tâches cartographiques dans Hadoop?Existe-t-il un moyen pour plusieurs tâches de mappage / réduction de partager la même JVM?

Était-ce utile?

La solution

Les jobs peuvent permettre la réutilisation des JVM de tâches en spécifiant la configuration de travail mapred.job.reuse.jvm.num.tasks.Si la valeur est 1 (valeur par défaut), les JVM ne sont pas réutilisés (c'est-à-dire 1 tâche par JVM).S'il est égal à -1, il n'y a pas de limite au nombre de tâches qu'une machine virtuelle Java peut exécuter (du même travail).On peut également spécifier une valeur supérieure à 1 en utilisant l'API.

Autres conseils

Dans $HADOOP_HOME/conf/mapred-site.xml, ajoutez la propriété suivante

<property>
    <name>mapred.job.reuse.jvm.num.tasks</name>
    <value>#</value>
</property>

Le # peut être défini sur un nombre pour spécifier combien de fois la JVM doit être réutilisée (la valeur par défaut est 1), ou défini sur -1 sans limite de quantité de réutilisation.

Plug sans vergogne

Je passe en revue l'utilisation d'objets statiques avec la réutilisation de JVM pour accomplir ce que vous décrivez ici: http://chasebradford.wordpress.com / 2011/02/05 / cache-distribué-objets-statiques-et-configuration-rapide /

Une autre option, bien que plus compliquée, consiste à utiliser un cache distribué avec un fichier mappé en mémoire en lecture seule.De cette façon, vous pouvez également partager la ressource entre les processus JVM.

À ma connaissance, il n'existe pas de moyen simple pour plusieurs tâches cartographiques (Hadoop) de partager des structures de données statiques.

Il s'agit en fait d'un problème connu du modèle actuel de réduction de carte. La raison pour laquelle l'implémentation actuelle ne partage pas les données statiques entre les tâches cartographiques est que Hadoop est conçu pour être hautement fiable. En conséquence, si une tâche échoue, elle ne plantera que sa propre JVM. Cela n'aura aucun impact sur l'exécution d'autres JVM.

Je travaille actuellement sur un prototype capable de répartir le travail d'une seule JVM sur plusieurs cœurs (essentiellement, vous n'avez besoin que d'une seule JVM pour utiliser plusieurs cœurs). De cette façon, vous pouvez réduire la duplication des structures de données en mémoire sans coûter l'utilisation du processeur. La prochaine étape pour moi est de développer une version de Hadoop qui peut exécuter plusieurs tâches de carte dans une JVM, ce qui est exactement ce que vous demandez.

Il y a un article intéressant ici https://issues.apache.org/jira/browse/MAPREDUCE-2123

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top