Bird
Raised Fist0
Hadoopdata~5 mins

Compression codecs (Snappy, LZO, Gzip) in Hadoop

Choose your learning style10 modes available
Introduction

Compression codecs make data smaller so it uses less space and moves faster. This helps when working with big data in Hadoop.

When you want to save disk space by storing data in a smaller size.
When you need to speed up data transfer between Hadoop nodes.
When you want to reduce the time to read and write large files.
When you want to balance between compression speed and compression ratio.
When you want to choose a codec that works well with your data type and processing needs.
Syntax
Hadoop
hadoop jar your-job.jar -D mapreduce.output.fileoutputformat.compress=true \
  -D mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec \
  -D mapreduce.output.fileoutputformat.compress.type=BLOCK \
  input_path output_path

You set compression codecs in Hadoop job configuration using codec class names.

Common codecs are Snappy, LZO, and Gzip, each with different speed and compression levels.

Examples
This sets the codec to Snappy, which is fast and good for real-time processing.
Hadoop
mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec
This sets the codec to LZO, which is fast and compresses well but needs extra setup.
Hadoop
mapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzoCodec
This sets the codec to Gzip, which compresses very well but is slower.
Hadoop
mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec
Sample Program

This Python example writes a text file compressed with Gzip codec to Hadoop HDFS, then reads it back and prints the content.

Hadoop
from pydoop import hdfs

# Write a text file compressed with Gzip in Hadoop HDFS
file_path = '/user/test/sample.txt.gz'
text = 'Hello Hadoop compression codecs!\n' * 5

with hdfs.open(file_path, 'wt', codec='gzip') as f:
    f.write(text)

# Read back the file
with hdfs.open(file_path, 'rt', codec='gzip') as f:
    content = f.read()

print(content)
OutputSuccess
Important Notes

Snappy is fast but compresses less than Gzip.

LZO requires installing native libraries on all Hadoop nodes.

Gzip compresses best but uses more CPU and is slower.

Summary

Compression codecs reduce data size to save space and speed up Hadoop jobs.

Snappy, LZO, and Gzip are popular codecs with different speed and compression trade-offs.

Choose the codec based on your need for speed, compression ratio, and cluster setup.

Practice

(1/5)
1. Which compression codec is known for the fastest compression and decompression speed in Hadoop?
easy
A. LZO
B. Gzip
C. Snappy
D. Bzip2

Solution

  1. Step 1: Understand codec speed characteristics

    Snappy is designed for speed, offering fast compression and decompression.
  2. Step 2: Compare with other codecs

    Gzip compresses better but slower; LZO is fast but usually slower than Snappy; Bzip2 is slowest.
  3. Final Answer:

    Snappy -> Option C
  4. Quick Check:

    Fastest codec = Snappy [OK]
Hint: Snappy is fastest codec for speed, not best compression [OK]
Common Mistakes:
  • Confusing Gzip as fastest due to better compression
  • Thinking LZO is faster than Snappy
  • Assuming Bzip2 is fast
2. Which of the following is the correct way to enable Snappy compression in a Hadoop job configuration XML?
easy
A. mapreduce.output.fileoutputformat.compress.codecorg.apache.hadoop.io.compress.GzipCodec
B. mapreduce.output.fileoutputformat.compress.codecorg.apache.hadoop.io.compress.SnappyCodec
C. mapreduce.output.fileoutputformat.compress.codecorg.apache.hadoop.io.compress.Lz4Codec
D. mapreduce.output.fileoutputformat.compress.codecorg.apache.hadoop.io.compress.Bzip2Codec

Solution

  1. Step 1: Identify the property for compression codec

    The property key is 'mapreduce.output.fileoutputformat.compress.codec' to set codec class.
  2. Step 2: Match the codec class for Snappy

    Snappy codec class is 'org.apache.hadoop.io.compress.SnappyCodec'.
  3. Final Answer:

    Property with SnappyCodec class -> Option B
  4. Quick Check:

    Snappy codec class = org.apache.hadoop.io.compress.SnappyCodec [OK]
Hint: Snappy codec class ends with SnappyCodec [OK]
Common Mistakes:
  • Using GzipCodec or other codec classes by mistake
  • Misspelling the property name
  • Confusing Lz4Codec with LZO
3. Given the following Hadoop job configuration snippet, what compression codec will be used?
conf.set("mapreduce.output.fileoutputformat.compress", "true");
conf.set("mapreduce.output.fileoutputformat.compress.codec", "org.apache.hadoop.io.compress.GzipCodec");
medium
A. Snappy
B. LZO
C. No compression
D. Gzip

Solution

  1. Step 1: Check if compression is enabled

    Property 'mapreduce.output.fileoutputformat.compress' is set to 'true', so compression is enabled.
  2. Step 2: Identify the codec class used

    Codec class is 'org.apache.hadoop.io.compress.GzipCodec', which means Gzip compression is used.
  3. Final Answer:

    Gzip -> Option D
  4. Quick Check:

    Compression enabled with Gzip codec [OK]
Hint: Check compress property true + codec class name [OK]
Common Mistakes:
  • Ignoring the compress flag and assuming no compression
  • Confusing codec class with Snappy or LZO
  • Assuming default codec if not checked
4. You configured LZO compression in your Hadoop job, but the job fails with a codec not found error. What is the most likely cause?
medium
A. LZO native libraries are not installed or not in the library path
B. The job configuration property name is misspelled
C. Snappy codec is enabled instead of LZO
D. Gzip compression is incompatible with Hadoop

Solution

  1. Step 1: Understand LZO codec requirements

    LZO requires native libraries installed on all cluster nodes to work properly.
  2. Step 2: Analyze error cause

    Codec not found error usually means native LZO libraries are missing or not accessible in the library path.
  3. Final Answer:

    LZO native libraries missing or not in path -> Option A
  4. Quick Check:

    LZO needs native libs installed [OK]
Hint: LZO needs native libs installed on cluster nodes [OK]
Common Mistakes:
  • Assuming misspelled property causes codec not found
  • Confusing Snappy and LZO codec errors
  • Thinking Gzip is incompatible with Hadoop
5. You want to compress large Hadoop output files with the best compression ratio but can tolerate slower speed. Which codec should you choose and why?
hard
A. Gzip, because it offers the best compression ratio despite slower speed
B. LZO, because it balances speed and compression
C. Snappy, because it is fastest and good compression
D. No compression, to avoid overhead

Solution

  1. Step 1: Identify compression needs

    Best compression ratio means smallest file size, speed is less important.
  2. Step 2: Compare codecs by compression ratio and speed

    Gzip compresses better but slower; Snappy is fastest but less compression; LZO is in between.
  3. Step 3: Choose codec matching needs

    Gzip fits best for high compression ratio with slower speed tolerance.
  4. Final Answer:

    Gzip, best compression ratio with slower speed -> Option A
  5. Quick Check:

    Best compression ratio = Gzip [OK]
Hint: Best compression ratio usually means Gzip codec [OK]
Common Mistakes:
  • Choosing Snappy for best compression ratio
  • Thinking LZO compresses better than Gzip
  • Avoiding compression despite need to save space
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard