HBase
 sql >> Base de données >  >> NoSQL >> HBase

6 meilleures techniques d'optimisation des tâches MapReduce

Le réglage des performances vous aidera à optimiser votre Hadoop performance. Dans ce blog, nous allons discuter de toutes ces techniques d'optimisation des tâches MapReduce.

Dans ce didacticiel MapReduce, nous vous fournirons 6 conseils importants pour l'optimisation des tâches MapReduce, tels que la configuration appropriée de votre cluster, l'utilisation de la compression LZO, le réglage approprié du nombre de tâches MapReduce, etc.

Conseils pour l'optimisation des tâches MapReduce

Vous trouverez ci-dessous quelques techniques d'optimisation des tâches MapReduce qui vous aideraient à optimiser les performances des tâches MapReduce.

1. Configuration correcte de votre cluster

  • Avec -noatime l'option Dfs et le stockage MapReduce sont montés. Cela désactivera le temps d'accès. Améliore ainsi les performances d'E/S.
  • Essayez d'éviter le RAID sur les machines TaskTracker et datanode. Cela réduit généralement les performances.
  • Assurez-vous d'avoir configuré mapred.local.dir et dfs.data.dir pour pointer vers un répertoire sur chacun de vos disques. Cela permet de s'assurer que toute votre capacité d'E/S est utilisée.
  • Vous devez surveiller le graphique de l'utilisation du swap et de l'utilisation du réseau avec le logiciel. Si vous voyez que le swap est utilisé, vous devez réduire la quantité de RAM allouée à chaque tâche dans mapred.child.java.opts .
  • Assurez-vous d'avoir une surveillance intelligente de l'état de santé de vos disques durs. Il s'agit de l'une des pratiques importantes pour le réglage des performances de MapReduce.

2. Utilisation de la compression LZO

Pour les données intermédiaires, c'est toujours une bonne idée. Chaque tâche Hadoop générant une quantité non négligeable de sortie de carte bénéficiera de la compression de données intermédiaire avec LZO.

Bien que LZO ajoute un peu de surcharge au processeur, il permet de gagner du temps en réduisant la quantité d'E/S disque pendant le shuffle.

Définir mapred.compress.map.output sur true pour activer la compression LZO

3. Réglage correct du nombre de tâches MapReduce

  • Dans le travail MapReduce, si chaque tâche prend 30 à 40 secondes ou plus, cela réduira le nombre de tâches. Le mappeur  ou réducteur  Le processus implique les choses suivantes :premièrement, vous devez démarrer la JVM (JVM chargée dans la mémoire). Ensuite, vous devez initialiser JVM. Et après le traitement (mapper/reducer), vous devez désinitialiser JVM. Et ces tâches JVM sont très coûteuses. Supposons un cas dans lequel le mappeur exécute une tâche uniquement pendant 20 à 30 secondes. Pour cela, nous devons démarrer/initialiser/arrêter la JVM. Cela peut prendre un temps considérable. Il est donc strictement recommandé d'exécuter la tâche pendant au moins 1 minute.
  • Si une tâche contient plus de 1 To d'entrée. Ensuite, vous devriez envisager d'augmenter la taille de bloc de l'ensemble de données d'entrée à 256 Mo ou même 512 Mo. Ainsi, le nombre de tâches sera plus petit. Vous pouvez modifier la taille du bloc en utilisant la commande Hadoop distcp –Hdfs.block.size=$[256*1024*1024] /path/to/inputdata /path/to/inputdata-with-largeblocks
  • Comme nous le savons, chaque tâche s'exécute pendant au moins 30 à 40 secondes. Vous devez augmenter le nombre de tâches de mappeur à un multiple du nombre d'emplacements de mappeur dans le cluster.
  • N'exécutez pas trop de tâches de réduction, pour la plupart des tâches. Le nombre de tâches de réduction égal ou légèrement inférieur au nombre d'emplacements de réduction dans le cluster.

4. Combinateur entre Mapper et Reducer

Si l'algorithme implique le calcul d'agrégats de toute sorte, nous devons utiliser un  Combiner. Combiner effectue une agrégation avant que les données n'atteignent le réducteur.

Les exécutions du framework Hadoop MapReduce se combinent intelligemment pour réduire la quantité de données à écrire sur le disque. Et ces données doivent être transférées entre les étapes de calcul Map et Reduce.

5. Utilisation du type inscriptible le plus approprié et le plus compact pour les données

Les utilisateurs de Big Data utilisent inutilement le type Text inscriptible pour passer de Hadoop Streaming à Java MapReduce. Le texte peut être pratique. Il est inefficace de convertir des données numériques vers et à partir de chaînes UTF8. Et peut en fait représenter une part importante du temps CPU.

6. Réutilisation des écritures

De nombreux utilisateurs de MapReduce commettent une erreur très courante qui consiste à allouer un nouvel objet Writable pour chaque sortie d'un mappeur/réducteur. Supposons, par exemple, l'implémentation du mappeur de nombre de mots comme suit :

public void map(...) {
...
for (String word: words) {
output.collect(new Text(word), new IntWritable(1));
}

Cette implémentation entraîne l'allocation de milliers d'objets à courte durée de vie. Bien que le ramasse-miettes Java fasse un travail raisonnable pour gérer cela, il est plus efficace d'écrire :

class MyMapper ... {
Text wordText = new Text();
IntWritable one = new IntWritable(1);
public void map(...) {
... for (String word: words)
{
wordText.set(word);
output.collect(word, one); }
}
}

Conclusion

Par conséquent, il existe diverses techniques d'optimisation de travail MapReduce qui vous aident à optimiser le travail MapReduce. Comme l'utilisation d'un combinateur entre le mappeur et le réducteur, par l'utilisation de la compression LZO, le réglage approprié du nombre de tâches MapReduce, la réutilisation de l'écriture.

Si vous trouvez une autre technique pour l'optimisation des tâches MapReduce, faites-le nous savoir dans la section des commentaires ci-dessous.