Sfoglia il codice sorgente

Support additional compression levels for GzipCodec. Contributed by Ravi Mutyala.
(cherry picked from commit 18f9b77a321b225677ce23c503b41d21478fc4a7)
(cherry picked from commit e38c2ef6c54521a74cc2b787d78211f629aa07d8)
(cherry picked from commit 78a4c348940cd98548650c0a5adb981895cef201)

Junping Du 9 anni fa
parent
commit
e3ed99cfe0

+ 3 - 0
hadoop-common-project/hadoop-common/CHANGES.txt

@@ -1031,6 +1031,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

+ 41 - 1
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.
      */

+ 25 - 0
hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/compress/zlib/TestZlibCompressorDecompressor.java

@@ -122,6 +122,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;