最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

一:壓縮的作用

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

1.1:壓縮的原則:

1、計(jì)算(運(yùn)算)密集型任務(wù):大量使用CPU去做數(shù)學(xué)運(yùn)算,此時(shí)少用壓縮
2、IO密集型任務(wù):此時(shí)多用壓縮 ????????壓縮需要消耗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)點(diǎn):壓縮/解壓縮比較快,處理Gzip格式文件和直接處理文本一樣

缺點(diǎn):不支持split

應(yīng)用場景:

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

1.4.2:Bzip2壓縮

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

缺點(diǎn):壓縮/解壓速度慢

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

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

1.4.3LZO壓縮

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

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

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

1.4.4Snappy壓縮

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

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

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

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

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

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

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

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

Reducer輸出壓縮:壓縮技術(shù)能夠減少要存儲(chǔ)的數(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中配置)

如果壓縮寫到了配置文件中則,所有都會(huì)進(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 {
        //壓縮傳入兩個(gè)參數(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:校驗(yàn)是否能解壓    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)文章

  • Spring?Feign超時(shí)設(shè)置深入了解

    Spring?Feign超時(shí)設(shè)置深入了解

    Spring?Cloud中Feign客戶端是默認(rèn)開啟支持Ribbon的,最重要的兩個(gè)超時(shí)就是連接超時(shí)ConnectTimeout和讀超時(shí)ReadTimeout,在默認(rèn)情況下,也就是沒有任何配置下,F(xiàn)eign的超時(shí)時(shí)間會(huì)被Ribbon覆蓋,兩個(gè)超時(shí)時(shí)間都是1秒
    2023-03-03
  • Java中private關(guān)鍵字詳細(xì)用法實(shí)例以及解釋

    Java中private關(guān)鍵字詳細(xì)用法實(shí)例以及解釋

    這篇文章主要給大家介紹了關(guān)于Java中private關(guān)鍵字詳細(xì)用法實(shí)例以及解釋的相關(guān)資料,在Java中private是一種訪問修飾符,它可以用來控制類成員的訪問權(quán)限,文中將用法介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • 詳解SpringBoot中自定義和配置攔截器的方法

    詳解SpringBoot中自定義和配置攔截器的方法

    今天這篇文章來介紹一下攔截器在SpringBoot中的如何自定義及如何配置的,攔截器的具體作用和應(yīng)用場景,感興趣的小伙伴可以了解一下
    2022-05-05
  • mybatis @Intercepts的用法解讀

    mybatis @Intercepts的用法解讀

    這篇文章主要介紹了mybatis @Intercepts的用法解讀,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • mybatis-plus分頁查詢的實(shí)現(xiàn)示例

    mybatis-plus分頁查詢的實(shí)現(xiàn)示例

    這篇文章主要介紹了mybatis-plus分頁查詢的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 手把手搭建Java共享網(wǎng)盤的方法步驟

    手把手搭建Java共享網(wǎng)盤的方法步驟

    這篇文章主要介紹了手把手搭建Java共享網(wǎng)盤,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • java 多線程死鎖詳解及簡單實(shí)例

    java 多線程死鎖詳解及簡單實(shí)例

    這篇文章主要介紹了java 多線程死鎖詳解及簡單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • java基于反射得到對象屬性值的方法

    java基于反射得到對象屬性值的方法

    這篇文章主要介紹了java基于反射得到對象屬性值的方法,結(jié)合實(shí)例形式分析了java基于反射獲取對象屬性值的相關(guān)實(shí)現(xiàn)方法與操作技巧,需要的朋友可以參考下
    2017-03-03
  • Java大數(shù)據(jù)處理的核心技術(shù)MapReduce框架

    Java大數(shù)據(jù)處理的核心技術(shù)MapReduce框架

    MapReduce是一種分布式計(jì)算框架,適用于大規(guī)模的數(shù)據(jù)處理。它將大數(shù)據(jù)分成多個(gè)小數(shù)據(jù)塊,通過Map和Reduce兩個(gè)階段對數(shù)據(jù)進(jìn)行處理和分析。MapReduce框架具有可靠、高效、可擴(kuò)展等特點(diǎn),已經(jīng)成為大數(shù)據(jù)處理的核心技術(shù)
    2023-05-05
  • springboot ApplicationContextInitializer的三種使用方法小結(jié)

    springboot ApplicationContextInitializer的三種使用方法小結(jié)

    這篇文章主要介紹了關(guān)于ApplicationContextInitializer的三種使用方法小結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論

那坡县| 咸丰县| 上虞市| 金平| 滕州市| 双牌县| 彭泽县| 天峻县| 白河县| 嘉黎县| 马龙县| 仪陇县| 连江县| 纳雍县| 乐陵市| 高淳县| 岑溪市| 堆龙德庆县| 锡林郭勒盟| 南雄市| 延吉市| 天镇县| 郸城县| 泸溪县| 衡山县| 满洲里市| 德令哈市| 班玛县| 榆中县| 巴南区| 伊宁县| 广元市| 石台县| 左权县| 无极县| 米脂县| 商河县| 五常市| 蒲城县| 松滋市| 龙川县|