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);
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
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.
"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");
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é.