HDFS中文件的压缩与解压

  文件的压缩有两大好处:1、可以减少存储文件所需要的磁盘空间;2、可以加速数据在网络和磁盘上的传输。尤其是在处理大数据时,这两大好处是相当重要的。

  下面是一个使用gzip工具压缩文件的例子。将文件/user/hadoop/aa.txt进行压缩,压缩后为/user/hadoop/text.gz

 1 package com.hdfs;
 2
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.io.OutputStream;
 6 import java.net.URI;
 7
 8 import org.apache.hadoop.conf.Configuration;
 9 import org.apache.hadoop.fs.FSDataInputStream;
10 import org.apache.hadoop.fs.FSDataOutputStream;
11 import org.apache.hadoop.fs.FileSystem;
12 import org.apache.hadoop.fs.Path;
13 import org.apache.hadoop.io.IOUtils;
14 import org.apache.hadoop.io.compress.CompressionCodec;
15 import org.apache.hadoop.io.compress.CompressionCodecFactory;
16 import org.apache.hadoop.io.compress.CompressionInputStream;
17 import org.apache.hadoop.io.compress.CompressionOutputStream;
18 import org.apache.hadoop.util.ReflectionUtils;
19
20 public class CodecTest {
21     //压缩文件
22     public static void compress(String codecClassName) throws Exception{
23         Class<?> codecClass = Class.forName(codecClassName);
24         Configuration conf = new Configuration();
25         FileSystem fs = FileSystem.get(conf);
26         CompressionCodec codec = (CompressionCodec)ReflectionUtils.newInstance(codecClass, conf);
27         //指定压缩文件路径
28         FSDataOutputStream outputStream = fs.create(new Path(“/user/hadoop/text.gz”));
29         //指定要被压缩的文件路径
30         FSDataInputStream in = fs.open(new Path(“/user/hadoop/aa.txt”));
31         //创建压缩输出流
32         CompressionOutputStream out = codec.createOutputStream(outputStream);
33         IOUtils.copyBytes(in, out, conf);
34         IOUtils.closeStream(in);
35         IOUtils.closeStream(out);
36     }
37
38     //解压缩
39     public static void uncompress(String fileName) throws Exception{
40         Class<?> codecClass = Class.forName(“org.apache.hadoop.io.compress.GzipCodec”);
41         Configuration conf = new Configuration();
42         FileSystem fs = FileSystem.get(conf);
43         CompressionCodec codec = (CompressionCodec)ReflectionUtils.newInstance(codecClass, conf);
44         FSDataInputStream inputStream = fs.open(new Path(“/user/hadoop/text.gz”));
45          //把text文件里到数据解压,然后输出到控制台
46         InputStream in = codec.createInputStream(inputStream);
47         IOUtils.copyBytes(in, System.out, conf);
48         IOUtils.closeStream(in);
49     }
50
51     //使用文件扩展名来推断二来的codec来对文件进行解压缩
52     public static void uncompress1(String uri) throws IOException{
53         Configuration conf = new Configuration();
54         FileSystem fs = FileSystem.get(URI.create(uri), conf);
55
56         Path inputPath = new Path(uri);
57         CompressionCodecFactory factory = new CompressionCodecFactory(conf);
58         CompressionCodec codec = factory.getCodec(inputPath);
59         if(codec == null){
60             System.out.println(“no codec found for “ + uri);
61             System.exit(1);
62         }
63         String outputUri = CompressionCodecFactory.removeSuffix(uri, codec.getDefaultExtension());
64         InputStream in = null;
65         OutputStream out = null;
66         try {
67             in = codec.createInputStream(fs.open(inputPath));
68             out = fs.create(new Path(outputUri));
69             IOUtils.copyBytes(in, out, conf);
70         } finally{
71             IOUtils.closeStream(out);
72             IOUtils.closeStream(in);
73         }
74     }
75
76     public static void main(String[] args) throws Exception {
77         //compress(“org.apache.hadoop.io.compress.GzipCodec”);
78         //uncompress(“text”);
79         uncompress1(“hdfs://master:9000/user/hadoop/text.gz”);
80     }
81
82 }

  首先执行77行进行压缩,压缩后执行第78行进行解压缩,这里解压到标准输出,所以执行78行会再控制台看到文件/user/hadoop
/aa.txt的内容。如果执行79行的话会将文件解压到/user/hadoop/text,他是根据/user/hadoop/text.gz的扩展
名判断使用哪个解压工具进行解压的。解压后的路径就是去掉扩展名。

  进行文件压缩后,在执行命令./hadoop fs -ls /user/hadoop/查看文件信息,如下:

1 [hadoop@master bin]$ ./hadoop fs -ls /user/hadoop/
2 Found 7 items
3 -rw-r–r–   3 hadoop supergroup   76805248 2013-06-17 23:55 /user/hadoop/aa.mp4
4 -rw-r–r–   3 hadoop supergroup        520 2013-06-17 22:29 /user/hadoop/aa.txt
5 drwxr-xr-x   - hadoop supergroup          0 2013-06-16 17:19 /user/hadoop/input
6 drwxr-xr-x   - hadoop supergroup          0 2013-06-16 19:32 /user/hadoop/output
7 drwxr-xr-x   - hadoop supergroup          0 2013-06-18 17:08 /user/hadoop/test
8 drwxr-xr-x   - hadoop supergroup          0 2013-06-18 19:45 /user/hadoop/test1
9 -rw-r–r–   3 hadoop supergroup         46 2013-06-19 20:09 /user/hadoop/text.gz

第4行为压缩之前的文件,大小为520个字节。第9行为压缩后的文件,大小为46个字节。由此可以看出上面讲的压缩的两大好处了。

时间: 2024-08-22 14:45:10

HDFS中文件的压缩与解压的相关文章

文件的压缩与解压XZip,XUnzip

参考http://www.codeproject.com/KB/cpp/xzipunzip.aspx CreateZip() –创建一个空的 zip 文件 HZIP CreateZip(void *z, unsigned int len, DWORD flags); // Parameters: z - 压缩文件名 // len - 对于压缩内存内容(ZIP_MEMORY) 这个值是压缩内存的大小; // 其他情况,这个值应当是 0 // flags - 如果是压缩文件,请用这个标志 ZIP_F

Python中使用tarfile压缩、解压tar归档文件示例_python

Python自带的tarfile模块可以方便读取tar归档文件,牛b的是可以处理使用gzip和bz2压缩归档文件tar.gz和tar.bz2. 与tarfile对应的是zipfile模块,zipfile是处理zip压缩的.请注意:os.system(cmd)可以使Python脚本执行命令,当然包括:tar -czf  *.tar.gz *,tar -xzf *.tar.gz,unzip等,当我觉得这样尽管可以解决问题,但我觉得很业余. 使用tarfile压缩 复制代码 代码如下: import

大文件(1g左右)-压缩、解压 大文件 C#

问题描述 压缩.解压 大文件 C# 如何用c#写一个压缩.解压的文件 文件大小为1G左右.我用 ICSharpCode.SharpZipLib.Zip;这个组件,只能实现小文件的压缩,不能实现大文件的压缩,一压缩就报错.哪位有什么好的方法实现大文件压缩呢. 解决方案 C# 文件压缩与解压c#解压.压缩文件C#下文件的压缩与解压

Linux中怎么在Deepin同时解压多个压缩档案

  在Linux系统中Deepin命令行上可以对文件进行解压,使用Deepin命令行还可以同时对多个tarball 文件解压.那么Linux中怎么在Deepin同时解压多个压缩档案呢? $ ls backup1.tar backup2.tar backup3.tar 我们需要一起把它们全部解压,该如何做呢? 我们先来简要讲解一下 tar 的用法.tar 命令原用于从磁带设备读写文件(tar 即是 Tape ARchiver 的缩略).我们只能指定要放入压缩档案或要解压出的文件名(如 tar x

Linux操作系统中,*.zip、*.tar、*.tar.gz、*.tar.bz2、*.tar.xz、*.jar、*.7z等格式的压缩与解压

zip格式 压缩: zip -r [目标文件名].zip [原文件/目录名] 解压: unzip [原文件名].zip 1 2 1 2 注:-r参数代表递归 tar格式(该格式仅仅打包,不压缩) 打包:tar -cvf [目标文件名].tar [原文件名/目录名] 解包:tar -xvf [原文件名].tar 1 2 1 2 注:c参数代表create(创建),x参数代表extract(解包),v参数代表verbose(详细信息),f参数代表filename(文件名),所以f后必须接文件名. t

Zip 压缩、解压技术在 HTML5 浏览器中的应用

原文:Zip 压缩.解压技术在 HTML5 浏览器中的应用 JSZip 是一款可以创建.读取.修改 .zip 文件的 javaScript 工具.在 web 应用中,免不了需要从 web 服务器中获取资源,如果可以将所有的资源都合并到一个 .zip 文件中,这时候只需要做一次请求,这样既减少了服务器的压力,同时也可以加快 web 应用的呈现速度. 今天就来探讨下 JSZip 如何与 HT 拓扑应用结合.先来看看这期 Demo 的效果图:   第一步.需要将应用对相关资源打包成 .zip 文件,

python用模块zlib压缩与解压字符串和文件的方法_python

python中zlib模块是用来压缩或者解压缩数据,以便保存和传输.它是其他压缩工具的基础.下面来一起看看python用模块zlib压缩与解压字符串和文件的方法.话不多说,直接来看示例代码. 例子1:压缩与解压字符串 import zlib message = 'abcd1234' compressed = zlib.compress(message) decompressed = zlib.decompress(compressed) print 'original:', repr(messa

Linux环境下安装RAR文件压缩与解压及命令应用方法

昨天老蒋帮助一个朋友的网站搬迁服务器,因为整个网站的数据有超过10GB大小,这位朋友还准备通过FTP工具一个个文件上传,按照其实用阿里云带宽1M计算,估计传完也要不少时间.于是我让其打包之后压缩包直接传,这样还可以节省点时间,等到传到一半左右的时候看到其实用的是RAR压缩方式,所以我知道后面得用到RAR的解压模式. 一般,我们在Linux环境中会使用ZIP或者TAR.GZ的压缩模式,只是我们以前的WIN环境中习惯用RAR而已,不过也不要紧在Linux中我们也可以操作的,只不过默认环境不是自带的需

asp.net c# ZIP文件压缩与解压

asp教程.net c# zip文件压缩与解压 using system; using system.collections.generic; using system.text; using system.io; using icsharpcode.sharpziplib.zip; using system.diagnostics; using icsharpcode.sharpziplib.core; namespace testconsole {     class program