HDFS中檔案的壓縮與解壓
下面是一個使用gzip工具壓縮檔案的例子。將檔案/user/hadoop/aa.txt進行壓縮,壓縮後為/user/hadoop/text.gz
package com.hdfs; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.io.compress.CompressionCodec; import org.apache.hadoop.io.compress.CompressionCodecFactory; import org.apache.hadoop.io.compress.CompressionInputStream; import org.apache.hadoop.io.compress.CompressionOutputStream; import org.apache.hadoop.util.ReflectionUtils; public class CodecTest { //壓縮檔案 public static void compress(String codecClassName) throws Exception{ Class<?> codecClass = Class.forName(codecClassName); Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); CompressionCodec codec = (CompressionCodec)ReflectionUtils.newInstance(codecClass, conf); //指定壓縮檔案路徑 FSDataOutputStream outputStream = fs.create(new Path("/user/hadoop/text.gz")); //指定要被壓縮的檔案路徑 FSDataInputStream in = fs.open(new Path("/user/hadoop/aa.txt")); //建立壓縮輸出流 CompressionOutputStream out = codec.createOutputStream(outputStream); IOUtils.copyBytes(in, out, conf); IOUtils.closeStream(in); IOUtils.closeStream(out); } //解壓縮 public static void uncompress(String fileName) throws Exception{ Class<?> codecClass = Class.forName("org.apache.hadoop.io.compress.GzipCodec"); Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); CompressionCodec codec = (CompressionCodec)ReflectionUtils.newInstance(codecClass, conf); FSDataInputStream inputStream = fs.open(new Path("/user/hadoop/text.gz")); //把text檔案裡到資料解壓,然後輸出到控制檯 InputStream in = codec.createInputStream(inputStream); IOUtils.copyBytes(in, System.out, conf); IOUtils.closeStream(in); } //使用副檔名來推斷二來的codec來對檔案進行解壓縮 public static void uncompress1(String uri) throws IOException{ Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(URI.create(uri), conf); Path inputPath = new Path(uri); CompressionCodecFactory factory = new CompressionCodecFactory(conf); CompressionCodec codec = factory.getCodec(inputPath); if(codec == null){ System.out.println("no codec found for " + uri); System.exit(1); } String outputUri = CompressionCodecFactory.removeSuffix(uri, codec.getDefaultExtension()); InputStream in = null; OutputStream out = null; try { in = codec.createInputStream(fs.open(inputPath)); out = fs.create(new Path(outputUri)); IOUtils.copyBytes(in, out, conf); } finally{ IOUtils.closeStream(out); IOUtils.closeStream(in); } } public static void main(String[] args) throws Exception { //compress("org.apache.hadoop.io.compress.GzipCodec"); //uncompress("text"); uncompress1("hdfs://master:9000/user/hadoop/text.gz"); } }
首先執行77行進行壓縮,壓縮後執行第78行進行解壓縮,這裡解壓到標準輸出,所以執行78行會再控制檯看到檔案/user/hadoop/aa.txt的內容。如果執行79行的話會將檔案解壓到/user/hadoop/text,他是根據/user/hadoop/text.gz的副檔名判斷使用哪個解壓工具進行解壓的。解壓後的路徑就是去掉副檔名。
進行檔案壓縮後,在執行命令./hadoop fs -ls /user/hadoop/檢視檔案資訊,如下:
1 [[email protected] 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.mp44 -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/test8 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個位元組。由此可以看出上面講的壓縮的兩大好處了。
我喜歡,駕馭著程式碼在風馳電掣中創造完美!我喜歡,操縱著程式碼在隨必所欲中體驗生活!我喜歡,書寫著程式碼在時代浪潮中完成經典!每一段新的程式碼在我手中誕生對我來說就象觀看剎那花開的感動! 歡迎分享與轉載相關推薦
liunx系統中的檔案壓縮與解壓
zip格式 壓縮: zip -r [目標檔名].zip [原檔案/目錄名] 解壓: unzip [原檔名].zip 注:-r引數代表遞迴 tar格式(該格式僅僅打包,不壓縮) 打包:tar -cvf [目標檔名].tar [原檔名/目錄名] 解包:tar -xvf [原檔名]
C++中的位移操作以實現檔案的壓縮(實現哈夫曼對檔案壓縮與解壓時做的一個小測試)
因為以前基本上沒用過位移操作,所以這裡做了一個小測試,加深了一下對位移的理解 相關概念: 因為C++中對檔案的操作常用的就是按位元組來進行讀取。下面對檔案的讀寫進行舉例(這是我常用的方式,大家也可以用其它方法讀取): 首先包含相關標頭檔案:
用Huffman樹實現檔案壓縮與解壓
用Huffman樹實現檔案的壓縮與解壓 我們先來了解一下什麼是Huffman樹? 我們平常所使用的Zip等壓縮工具都是藉助Huffman樹實現的,Huffman是一種特殊的二叉樹,它是一種加權路徑最短的二叉樹, 因此也稱為最優二叉樹。 (下面用一
HDFS中的壓縮與解壓縮機制
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; imp
Java實現檔案壓縮與解壓
Java實現ZIP的解壓與壓縮功能基本都是使用了Java的多肽和遞迴技術,可以對單個檔案和任意級聯資料夾進行壓縮和解壓,對於一些初學者來說是個很不錯的例項。 zip扮演著歸檔和壓縮兩個角色;gzip並不將檔案歸檔,僅只是對單個檔案進行壓縮,所以,在UNIX平
shell命令之檔案壓縮與解壓(常用)
.tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是壓縮!) .gz 解壓1:gunzip FileName.gz 解壓2:gzip -d Fil
linux 檔案壓縮與解壓
檔案壓縮與解壓檔案的壓縮與解壓,也是我們日常中經常用到的操作,如,我們會經常從網上下載各種檔案進行進行安裝,而大部分檔案都是經過壓縮的。下面來學習四個常用的壓縮命令。gzip特點:1.只能壓縮檔案,不能壓縮目錄2.不保留原始檔[[email protected] t
Linux檔案壓縮與解壓命令
對許多使用者來說,在DOS和Windows環境下利用工具軟體ARJ、Winzip等,壓縮或解壓檔案是比較容易的事。但是,在Linux中如何對檔案進行壓縮與解壓呢?本文基於Red Hat 6.0,介紹了
Linux檔案壓縮與解壓
壓縮解壓檔案很常用,經常會忘記。最好的方法是每次用的時候都去查一下,用多了相信就會熟悉了。列舉下面常用的壓縮和解壓命令,以備查詢: 1.幾種壓縮檔案格式 *.z:compress 程式壓縮的檔案。 *.bz2:bzip2程式壓縮的檔案。 *.gz:gzip程式壓縮的檔案。
HDFS中檔案的壓縮與解壓
檔案的壓縮有兩大好處:1、可以減少儲存檔案所需要的磁碟空間;2、可以加速資料在網路和磁碟上的傳輸。尤其是在處理大資料時,這兩大好處是相當重要的。 下面是一個使用gzip工具壓縮檔案的例子。將檔案/user/hadoop/aa.txt進行壓縮,壓縮後為/user/hado
大資料Linux命令之檔案檢視大小、系統情況命令、壓縮與解壓
一、實時檢視檔案內容 Linux 中有一個tail命令,常用來顯示一個檔案的最後n行文件內容 但更多情況下,我們要在伺服器端執行程式,並且需要實時監控執行日誌,這時候有什麼辦法實時滾動顯示log檔案內容? 這裡可以利用tail命令加引數f實現:tail用於顯示指
ubuntu之壓縮與解壓檔案
ubuntu之壓縮與解壓檔案 安裝壓縮工具 sudo apt-get install rar 安裝解壓工具 sudo apt-get install unrar .tar 解包: tar xvf xxx.tar 打包: tar cvf xxx.tar dirname
Linux:03---Terminal高階命令(檔案的壓縮與解壓):gzip、bzip2、tar
提示: gzip、bzip2:只能用於單個檔案的壓縮與解壓,不能壓縮或者解壓目錄 tar可用於多個檔案的壓縮與解壓 一般情況下:小檔案的壓縮用gzip,大檔案的壓縮用bzip2 一、gzip 1.概念:對字尾為.gz的檔案進行壓縮或者解壓
Linux下使用gzip壓縮與解壓檔案
Linux下gzip命令是用來壓縮檔案的。gzip不僅可以用來壓縮大的、較少使用的檔案以節省磁碟空間,還可以和tar命令一起構成Linux作業系統中比較流行的壓縮檔案格式。據統計,gzip命令對文字檔案有60%~70%的壓縮率。 gzip命令的格式是: gzip [option] [file] gz
檔案操作工具類: 檔案/目錄的建立、刪除、移動、複製、zip壓縮與解壓.
FileOperationUtils.java package com.xnl.utils; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import jav
檔案操作工具類: 檔案/目錄的建立、刪除、移動、複製、zip壓縮與解壓
FileOperationUtils.java package com.xnl.utils; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File;
huffman演算法實現檔案的壓縮與解壓
本文采用哈夫曼編碼的方式進行檔案的壓縮和解壓縮,主要原理是通過huffman編碼來表示字元,出現次數多的編碼短,出現次數少的編碼長,這樣整體而言,所需的總的bit位是減少的。但是當大部分字元出現的
Linux作業系統中,*.zip、*.tar、*.tar.gz、*.tar.bz2、*.tar.xz、*.jar、*.7z等格式的壓縮與解壓
zip格式 壓縮: zip -r [目標檔名].zip [原檔案/目錄名] 解壓: unzip [原檔名].zip 注:-r引數代表遞迴 tar格式(該格式僅僅打包,不壓縮) 打包:tar -cvf [目標檔名].tar [原檔名/目錄名] 解包:tar -xvf [原檔名].tar
ZLIB.DLL中BLOB變數壓縮與解壓函式的使用方法
最近碰上不少朋友問變數壓縮的問題,這裡整理一下。 函式申明: Function Long compress (Ref blob Destination, Ref ulong DestLen, Ref blob Source, ulong SourceLen ) Library
java tar.gz 格式多檔案打包壓縮與解壓
問題背景:開發中,我們時常會遇到對檔案進行儲存或傳輸的問題,但如果傳輸儲存的檔案較大,浪費磁碟空間不說,還會大大影響程式執行效率。於是便引出了這篇文章的主題,關於檔案打包與壓縮的問題。這裡“打包”是指,將多個檔案合成一個檔案;“壓縮”是指,把檔案的二進位制程式碼