web-dev-qa-db-fra.com

Hadoop, comment compresser la sortie du mappeur mais pas la sortie du réducteur

J'ai un map-Reduce Java programme dans lequel j'essaie de compresser uniquement la sortie du mappeur mais pas la sortie du réducteur. J'ai pensé que cela serait possible en définissant les propriétés suivantes dans l'instance de configuration comme Cependant, lorsque j'exécute mon travail, la sortie générée par le réducteur est toujours compressée car le fichier généré est: part-r-00000.gz. Quelqu'un a-t-il réussi à compresser les données du mappeur mais pas le réducteur? Est-ce même possible?

// Compression de la sortie du mappeur

conf.setBoolean("mapred.output.compress", true);
conf.set("mapred.output.compression.type", CompressionType.BLOCK.toString());
conf.setClass("mapred.output.compression.codec", GzipCodec.class, CompressionCodec.class);
25
Marcin

Avec MR2, nous devons maintenant définir

conf.set("mapreduce.map.output.compress", true)
conf.set("mapreduce.output.fileoutputformat.compress", false)

Pour plus de détails, consultez: http://hadoop.Apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

21
fengyun

mapred.compress.map.output: Est la compression des données entre le mappeur et le réducteur. Si vous utilisez un codec accrocheur, cela augmentera très probablement la vitesse de lecture-écriture et réduira la surcharge du réseau. Ne vous inquiétez pas de cracher ici. Ces fichiers ne sont pas stockés dans hdfs. Ce sont des fichiers temporaires qui existent uniquement pour le travail de réduction de carte.

mapred.map.output.compression.codec: j'utiliserais snappy

mapred.output.compress: Cet indicateur booléen définira si le travail de mappage/réduction complet produira des données compressées. Je définirais toujours cela également. Des vitesses de lecture/écriture plus rapides et moins d'espace disque utilisé.

mapred.output.compression.type: J'utilise le bloc. Cela rendra la compression séparable même pour tous les formats de compression (gzip, snappy et bzip2) assurez-vous simplement que vous utilisez un format de fichier séparable comme séquence, RCFile ou Avro.

mapred.output.compression.codec: il s'agit du codec de compression pour le travail de mappage/réduction. J'utilise principalement l'un des trois: Snappy (compression r/w la plus rapide 2x-3x), gzip (compression normale r rapide w 5x-8x), bzip2 (compression lente r/w 8x-12x)

Souvenez-vous également lorsque la compression est sortie en sortie, qu'en raison du fractionnement, la compression diffère en fonction de votre ordre de tri. Plus les données proches sont réunies, meilleure est la compression.

54
ted.malaska

"compression de sortie" compressera votre sortie finale. Pour compresser uniquement les sorties de carte, utilisez quelque chose comme ceci:

  conf.set("mapred.compress.map.output", "true")
  conf.set("mapred.output.compression.type", "BLOCK"); 
  conf.set("mapred.map.output.compression.codec", "org.Apache.hadoop.io.compress.GzipCodec"); 
12
vpk
  1. Vous devez définir "mapred.compress.map.output" sur true.
  2. En option, vous pouvez choisir votre codec de compression en définissant "mapred.map.output.compression.codec". REMARQUE 1: la compression de sortie améliorée ne doit jamais être BLOC. Voir le JIRA suivant pour plus de détails: https://issues.Apache.org/jira/browse/HADOOP-1194 NOTE2: GZIP et BZ2 sont gourmands en CPU. Si vous avez un réseau lent et que GZIP ou BZ2 donne un meilleur taux de compression, cela peut justifier la dépense de cycles CPU. Sinon, considérez le codec LZO ou Snappy.
    REMARQUE 3: si vous souhaitez utiliser la compression de sortie de la carte, envisagez d'installer le codec natif qui est appelé via JNI et vous offre de meilleures performances.
2
root1982

Si vous utilisez la distribution de MapR pour Hadoop, vous pouvez profiter des avantages de la compression sans tout le dossier avec les codecs.

MapR compresse nativement au niveau du système de fichiers afin que l'application n'ait pas besoin de connaître ou de prendre soin. La compression peut être activée ou désactivée au niveau du répertoire afin que vous puissiez compresser les entrées, mais pas les sorties ou tout ce que vous voulez. Généralement, la compression est si rapide (elle utilise un algorithme similaire à Snappy par défaut) que la plupart des applications voient une amélioration des performances lors de l'utilisation de la compression native. Si vos fichiers sont déjà compressés, cela est détecté très rapidement et la compression est automatiquement désactivée, vous ne voyez donc pas non plus de pénalité.

1
Ted Dunning