2014-07-18 1 views
2

J'ai un grand nombre de divisions d'entrée (environ 50.000) créées par de petits fichiers que je veux traiter avec Hadoop. J'ai, cependant, seulement 256 conteneurs disponibles pour le traiter.JVM Réutiliser MapReduce 2.0 YARN

Le travail lui-même utilise beaucoup de CPU mais peu de mémoire.

J'utilise Hadoop 2.3 et a été jeter un oeil dans la fonction de réutilisation JVM de MapReduce 1.0

J'ai aussi lu sur les tâches uber, mais il n'a pas l'air d'la même chose - ou j'avais un autre comprendre à partir de la réutilisation JVM. Comme j'ai beaucoup de petits fichiers (et que je génère un inputSplit par fichier), je voulais créer une seule machine JVM par conteneur et exécuter autant de tâches Map séquentielles que possible par JVM déjà allouée. Cela réduirait le temps système alloué par la JVM.

Je suppose que pour chaque division d'entrée un nouveau mappeur serait alloué et donc une nouvelle JVM, ai-je raison?

Comment puis-je faire une telle chose dans YARN? Oh, je sais aussi que je peux utiliser la compression pour augmenter la taille de l'inputSplit, mais pour cette application exacte, ce n'est pas viable.

Cordialement, Marco Lotz

Répondre

4

Oui. Dans le fil, les tâches sont exécutées dans une machine virtuelle Java dédiée. Contrairement à mapreduce 1, il ne prend pas en charge la réutilisation JVM.

Dans mapreduce 1, cependant, la propriété permettant de contrôler la réutilisation de la tâche JVM est mapred.job.reuse.jvm.num.tasks. Il spécifie le nombre maximal de tâches à exécuter pour un travail donné pour chaque machine virtuelle Java lancée. Par défaut, il s'agit de 1. This answer devrait vous donner une meilleure idée sur la réutilisation JVM dans 1.

Questions connexes