亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Hadoop中的壓縮與解壓縮案例詳解

 更新時間:2021年12月02日 11:36:54   作者:愛上攻城獅2021  
壓縮就是通過某種技術(shù)(算法)把原始文件變下,相應(yīng)的解壓就是把壓縮后的文件變成原始文件,本文給大家分享Hadoop中的壓縮知識,感興趣的朋友跟隨小編一起看看吧

壓縮主要關(guān)注點:壓縮率,壓縮速度,解壓速度,是否可切片

一:壓縮的作用

壓縮技術(shù)能夠減少底層HDFS讀寫字節(jié)數(shù),減少磁盤IO,提升網(wǎng)絡(luò)傳輸效率,因為磁盤IO和網(wǎng)絡(luò)帶寬是Hadoop的寶貴資源;特別是在運行MR程序時,I/O,網(wǎng)絡(luò)數(shù)據(jù)傳輸,shuffle及Merge都要花大量的時間,因此壓縮非常重要; 壓縮是提升Hadoop運行效率的一種優(yōu)化策略,使用得當(dāng)可以提升效率,但是使用不當(dāng)也可能降低效率

1.1:壓縮的原則:

1、計算(運算)密集型任務(wù):大量使用CPU去做數(shù)學(xué)運算,此時少用壓縮
2、IO密集型任務(wù):此時多用壓縮 ????????壓縮需要消耗CPU資源

1.2:MR支持的壓縮編碼

DEFLATE? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 不支持切分

Gzip???????????????????????????????????????????????????????? 不支持切分

bzip2???????????????????????????????????????????????????????? 支持切分

LZO? ? ? ? ? ? ? ? 非hadoop自帶 安裝? ? ? ? ? ?支持切分

Snappy? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 不支持切分

為了支持多種壓縮/解壓縮算法,Hadoop引入了編碼/解碼器

  • org.apache.hadoop.io.compress.DefaultCodec
  • org.apache.hadoop.io.compress.GzipCodec
  • org.apache.hadoop.io.compress.BZip2Codec
  • com.hadoop.compression.lzo.LzopCodec
  • org.apache.hadoop.io.compress.SnappyCodec

1.3:壓縮性能的比較

1.4:壓縮方式的選擇

1.4.1Gzip壓縮

優(yōu)點:壓縮/解壓縮比較快,處理Gzip格式文件和直接處理文本一樣

缺點:不支持split

應(yīng)用場景:

? ? ? ? 當(dāng)每個文件壓縮之后在130M以內(nèi)(1個塊大小內(nèi)),考慮。

1.4.2:Bzip2壓縮

優(yōu)點:比Gzip壓縮率高,支持split

缺點:壓縮/解壓速度慢

應(yīng)用場景:適合對速度要求不高,但需要較高的壓縮率??

? ? ? ? ? ? ? ? ? ?或者輸出數(shù)據(jù)比較大,處理之后的數(shù)據(jù)需要壓縮存檔,同時對單個很大的文本文件像壓縮減少存儲空間,同時需支持split;

1.4.3LZO壓縮

優(yōu)點:壓縮/解壓縮比較快,合理的壓縮率,支持split,是Hadoop最流行的壓縮格式,在Linux系統(tǒng)下需要安裝

缺點:壓縮率比Gzip低一些,Hadoop本身不支持,為了支持split需要建立索引,還需要指定InputFormat為Lzo格式

應(yīng)用場景:一個很大的文本文件,壓縮之后還大于200M以上可以考慮,而且單個文件越大,LZO優(yōu)點越明顯;

1.4.4Snappy壓縮

優(yōu)點: 壓縮速度和合理的壓縮率

缺點:不支持split,壓縮率比gzip低,Hadoop本身不支持需要安裝

應(yīng)用場景:當(dāng)MapReduce作業(yè)的Map輸出的數(shù)據(jù)比較大的時候,作為Map到Reduce的 中間數(shù)據(jù)的壓縮格式,或者作為一個MapReduce作業(yè)的輸出和另外一個MapReduce作業(yè)的輸入。

壓縮可以在MapReduce作用的任意階段啟用。

?二:MapReduce數(shù)據(jù)壓縮

Map之前的輸入端壓縮 :(Hadoop自動檢查文件擴(kuò)展名如果擴(kuò)展名能夠匹配就會使用恰當(dāng)?shù)木幗獯a方式對文件進(jìn)行壓縮和解壓)

Mapper輸出采用壓縮:(可有效改善shuffle過程,此過程是資源消耗最多的環(huán)節(jié))

注:(LZO是Hadoop通用的編解碼器,其設(shè)計目標(biāo)是達(dá)到與硬盤讀取速度相當(dāng)?shù)膲嚎s速度,因此速度是優(yōu)先考慮的因素,其次是壓縮率,LZO的壓縮速度是Gzip的5倍,解壓速度是Gzip的2倍)

Reducer輸出壓縮:壓縮技術(shù)能夠減少要存儲的數(shù)據(jù)量,將i磁盤空間。

三:壓縮的參數(shù)配置

io.compression.codecs ??(在core-site.xml中配置)? (map輸入前)

mapreduce.map.output.compress(在mapred-site.xml中配置)? (map到reduce)

mapreduce.map.output.compress.codec(在mapred-site.xml中配置)

mapreduce.output.fileoutputformat.compress(在mapred-site.xml中配置)(reduce輸出)

mapreduce.output.fileoutputformat.compress.codec(在mapred-site.xml中配置)

mapreduce.output.fileoutputformat.compress.type(在mapred-site.xml中配置)

如果壓縮寫到了配置文件中則,所有都會進(jìn)行壓縮,如果只是寫到了當(dāng)前程序中,只對當(dāng)前程序起作用。

3.1:設(shè)置reduce輸出端的壓縮格式

//設(shè)置Reduced端輸出壓縮
FileOutputFormat.setCompressOutput(job,true);
//壓縮的結(jié)果是BZip2Codec
FileOutputFormat.setOutputCompressorClass(job,BZip2Codec.class);
FileOutputFormat.setOutputCompressorClass(job, SnappyCodec.class);

3.2:設(shè)置map輸入的壓縮方式

//開啟map輸出壓縮
conf.setBoolean("mapreduce.map.output.compress",true);
conf.setClass("mapreduce.map.output.compress.codec", BZip2Codec.class, CompressionCodec.class);

四:文件的壓縮與解壓縮案例

public class FileCompress {
    public static void main(String[] args) throws IOException {
        //壓縮傳入兩個參數(shù) path  以及壓縮格式
//        compress("E:\\a.txt","org.apache.hadoop.io.compress.BZip2Codec");
 
        decompress("E:\\a.txt.bz2");
 
    }
 
    private static void decompress(String path) throws IOException {
        //1:校驗是否能解壓    CompressionCodecFactory     A factory that will find the correct codec for a given filename.
        CompressionCodecFactory factory = new CompressionCodecFactory(new Configuration());
        //This class encapsulates a streaming compression/decompression pair.
        CompressionCodec codec = factory.getCodec(new Path(path));
        if (codec == null){
            System.out.println("cannot find codec for file " + path);
            return;
        }
        //2 獲取普通輸入流,再獲取解壓輸入流
        FileInputStream fis = new FileInputStream(new File(path));
        //允許客戶端 重新定義輸入流
        CompressionInputStream cis = codec.createInputStream(fis);
        //3:獲取輸出流
        FileOutputStream fos = new FileOutputStream(new File(path + ".decodec"));
 
        //4 將壓縮輸入流寫入輸出流
        IOUtils.copyBytes(cis , fos, new Configuration());
        //5:關(guān)閉資源
        IOUtils.closeStream(fos);
        IOUtils.closeStream(cis);
        IOUtils.closeStream(fis);
 
    }
 
    private static void compress(String path, String method) throws IOException {
        //1:獲取輸入流
        FileInputStream fis = new FileInputStream(path);
        //2:獲取壓縮編碼器   編解碼器就是算嗎
        CompressionCodecFactory factory = new CompressionCodecFactory(new Configuration());
        CompressionCodec codec = factory.getCodecByName(method);
        //3:獲取普通輸出流,獲取壓縮輸出流     獲取編碼器的擴(kuò)展名
        FileOutputStream fos = new FileOutputStream(new File(path + codec.getDefaultExtension()));
        CompressionOutputStream cos = codec.createOutputStream(fos);
        //4:賦值輸入流到流輸出流
        IOUtils.copyBytes(fis,cos,new Configuration());
        //5 關(guān)閉資源
        IOUtils.closeStream(cos);
        IOUtils.closeStream(fos);
        IOUtils.closeStream(fis);
 
    }
}

到此這篇關(guān)于Hadoop中的壓縮的文章就介紹到這了,更多相關(guān)Hadoop壓縮內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java項目實現(xiàn)圖片等比縮放

    java項目實現(xiàn)圖片等比縮放

    這篇文章主要為大家詳細(xì)介紹了java項目實現(xiàn)圖片等比縮放,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • SpringBoot項目中@Test不出現(xiàn)可點擊運行的按鈕問題

    SpringBoot項目中@Test不出現(xiàn)可點擊運行的按鈕問題

    這篇文章主要介紹了SpringBoot項目中@Test不出現(xiàn)可點擊運行的按鈕問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java?toString方法使用超全講解

    Java?toString方法使用超全講解

    在Java中所有的類都有一個共同的父類Object(默認(rèn)繼承,不用加extends關(guān)鍵字),toString方法就是Object類的一個方法,用來返回該對象的字符串表示形式,下面這篇文章主要給大家介紹了關(guān)于Java?toString方法使用的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • IDEA加載項目沒有src目錄的問題及解決

    IDEA加載項目沒有src目錄的問題及解決

    這篇文章主要介紹了IDEA加載項目沒有src目錄的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SpringMVC框架的介紹與使用詳解

    SpringMVC框架的介紹與使用詳解

    SpringMVC?是一種基于?Java?的實現(xiàn)?MVC?設(shè)計模型的請求驅(qū)動類型的輕量級?Web?框架,跟Spring,Mybatis框架并稱為ssm,這篇文章主要介紹了SpringMVC框架的介紹與使用,需要的朋友可以參考下
    2022-08-08
  • springMVC的生命周期詳解

    springMVC的生命周期詳解

    本篇文章主要介紹了springMVC的生命周期詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Spring Boot不同版本Redis設(shè)置JedisConnectionFactory詳解

    Spring Boot不同版本Redis設(shè)置JedisConnectionFactory詳解

    本文章向大家介紹Spring Boot不同版本Redis設(shè)置JedisConnectionFactory,主要內(nèi)容包括1.X 版本、2.X 版本、2.、基本概念、基礎(chǔ)應(yīng)用、原理機制和需要注意的事項等,并結(jié)合實例形式分析了其使用技巧,希望通過本文能幫助到大家理解應(yīng)用這部分內(nèi)容
    2023-09-09
  • Spring的IOC控制反轉(zhuǎn)詳解

    Spring的IOC控制反轉(zhuǎn)詳解

    這篇文章主要為大家介紹了Spring的IOC控制反轉(zhuǎn),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>
    2022-01-01
  • Java實現(xiàn)一鍵生成表controller,service,mapper文件

    Java實現(xiàn)一鍵生成表controller,service,mapper文件

    這篇文章主要為大家詳細(xì)介紹了如何利用Java語言實現(xiàn)一鍵生成表controller,service,mapper文件,文中的示例代碼講解詳細(xì),需要的可以收藏一下
    2023-05-05
  • SpringBoot中的事務(wù)回滾規(guī)則詳解

    SpringBoot中的事務(wù)回滾規(guī)則詳解

    這篇文章主要介紹了SpringBoot中的事務(wù)回滾規(guī)則詳解,事務(wù)是指一系列的操作,這些操作要么全部成功,要么全部失敗。在Spring Boot中,我們可以使用事務(wù)管理器來管理事務(wù),在使用事務(wù)管理器的時候,一個非常重要的概念就是事務(wù)回滾,需要的朋友可以參考下
    2023-07-07

最新評論