From 18f9b77a321b225677ce23c503b41d21478fc4a7 Mon Sep 17 00:00:00 2001 From: Junping Du Date: Fri, 19 Feb 2016 14:21:25 -0800 Subject: [PATCH] Support additional compression levels for GzipCodec. Contributed by Ravi Mutyala. --- .../hadoop-common/CHANGES.txt | 3 ++ .../io/compress/zlib/ZlibCompressor.java | 42 ++++++++++++++++++- .../zlib/TestZlibCompressorDecompressor.java | 25 +++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index bf84d7a6445..e53c001eb9e 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -1737,6 +1737,9 @@ Release 2.7.3 - UNRELEASED HADOOP-12413. AccessControlList should avoid calling getGroupNames in isUserInList with empty groups. (Zhihai Xu via cnauroth) + HADOOP-12794. Support additional compression levels for GzipCodec. + (Ravi Mutyala via junping_du) + OPTIMIZATIONS HADOOP-12810. FileSystem#listLocatedStatus causes unnecessary RPC calls diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/zlib/ZlibCompressor.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/zlib/ZlibCompressor.java index b9550449f7f..24d98a53397 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/zlib/ZlibCompressor.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/zlib/ZlibCompressor.java @@ -67,7 +67,47 @@ public class ZlibCompressor implements Compressor { * Compression level for fastest compression. */ BEST_SPEED (1), - + + /** + * Compression level 2. + */ + TWO (2), + + + /** + * Compression level 3. + */ + THREE (3), + + + /** + * Compression level 4. + */ + FOUR (4), + + + /** + * Compression level 5. + */ + FIVE (5), + + + /** + * Compression level 6. + */ + SIX (6), + + /** + * Compression level 7. + */ + SEVEN (7), + + /** + * Compression level 8. + */ + EIGHT (8), + + /** * Compression level for best compression. */ diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/compress/zlib/TestZlibCompressorDecompressor.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/compress/zlib/TestZlibCompressorDecompressor.java index 6a4fc60253d..7e2ab241e19 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/compress/zlib/TestZlibCompressorDecompressor.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/compress/zlib/TestZlibCompressorDecompressor.java @@ -121,6 +121,31 @@ public class TestZlibCompressorDecompressor { } } + @Test + public void testZlibCompressorDecompressorWithCompressionLevels() { + Configuration conf = new Configuration(); + conf.set("zlib.compress.level","FOUR"); + if (ZlibFactory.isNativeZlibLoaded(conf)) { + byte[] rawData; + int tryNumber = 5; + int BYTE_SIZE = 10 * 1024; + Compressor zlibCompressor = ZlibFactory.getZlibCompressor(conf); + Decompressor zlibDecompressor = ZlibFactory.getZlibDecompressor(conf); + rawData = generate(BYTE_SIZE); + try { + for (int i = 0; i < tryNumber; i++) + compressDecompressZlib(rawData, (ZlibCompressor) zlibCompressor, + (ZlibDecompressor) zlibDecompressor); + zlibCompressor.reinit(conf); + } catch (Exception ex) { + fail("testZlibCompressorDecompressorWithConfiguration ex error " + ex); + } + } else { + assertTrue("ZlibFactory is using native libs against request", + ZlibFactory.isNativeZlibLoaded(conf)); + } + } + @Test public void testZlibCompressDecompress() { byte[] rawData = null;