中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

十七、hadoop壓縮相關(guān)-創(chuàng)新互聯(lián)

一、數(shù)據(jù)壓縮在hadoop中的意義

1、基本概述

? 壓縮技術(shù)可以減少底層hdfs的讀寫字節(jié)數(shù)。并且能夠降低在數(shù)據(jù)傳輸過程中占用的網(wǎng)絡(luò)帶寬資源,以及降低占用的磁盤空間。而在MapReduce中,shuffle以及merge過程都面臨著巨大的IO壓力。但是要注意增加了壓縮,另外一方面會增加cpu的負(fù)載。所以在要權(quán)衡好是否采用壓縮,以及采用的壓縮算法的特性。

在密山等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站制作、做網(wǎng)站 網(wǎng)站設(shè)計制作按需網(wǎng)站建設(shè),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都營銷網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè)公司,密山網(wǎng)站建設(shè)費用合理。

2、壓縮應(yīng)用基本原則

運算密集型的job,少用壓縮。因為壓縮占用cpu。
IO密集型的job,可用壓縮減少數(shù)據(jù)量。
選擇壓縮算法時,要注意壓縮比,壓縮比越大,壓縮以及解壓時間越長。

二、MR支持的壓縮編碼格式

1、壓縮編碼

壓縮格式 hadoop是否自帶 算法 文件擴(kuò)展名 可否可切分 換成壓縮格式后,原來的程序是否需要修改
DEFAULTDEFAULT.deflate與普通文本處理一樣,不需要修改
gzipDEFAULT.gz與普通文本處理一樣,不需要修改
bzip2bzip2.bz2與普通文本處理一樣,不需要修改
LZO需另外安裝lzo.lzo需要建立索引文件,還需要指定輸出格式
snappy需另外安裝snappy.snappy與普通文本處理一樣,不需要修改

2、不同壓縮算法對應(yīng)的編解碼器

壓縮格式 對應(yīng)編解碼器
DEFAULTorg.apache.hadoop.io.compress.DefaultCodec
gziporg.apache.hadoop.io.compress.GzipCodec
bzip2org.apache.hadoop.io.compress.BZip2Codec
lzocom.hadoop.compression.lzo.LzopCodec
snappyorg.apache.hadoop.io.compress.SnappyCodec

3、不同壓縮算法的特性以及適用場景

(1)gzip

優(yōu)點:
壓縮率高,解壓、壓縮速度也必比較快。hadoop本身自帶,在應(yīng)用中處理gzip格式的文件就和直接處理文本一樣。大部分Linux自帶gzip命令,使用方便。

缺點:不支持split

適用場景:
當(dāng)每個文件壓縮之后在一個block左右的大?。ㄒ驗闊o法分片),都可以考慮使用gzip將原數(shù)據(jù)壓縮。例如可以將一天或者一小時的日志壓縮成一個gzip文件,運行MapReduce的時候就可以并行處理多個gzip。hive,streaming,MapReduce程序處理壓縮文件時,無需修改程序,就像處理文本文件一樣。

(2)bzip2

優(yōu)點:
支持split;高壓縮比,比gzip高。hadoop自帶,Linux下自帶bzip2命令

缺點:壓縮、解壓速度慢,不支持native(java和C交互的api接口)

適用場景:
適合對速度要求不高,但需要較高的壓縮率的時候,可以作為mapreduce作業(yè)的輸出格式;或者輸出之后的數(shù)據(jù)比較大,處理之后的數(shù)據(jù)需要壓縮存檔減少磁盤空間并且以后數(shù)據(jù)用得比較少的情況;或者對單個很大的文本文件想壓縮減少存儲空間,同時又需要支持split,而且兼容之前的應(yīng)用程序(即應(yīng)用程序不需要修改)的情況。

(3)lzo

優(yōu)點:
壓縮/解壓速度比較快,壓縮率合理(比gzip和bzip2小)。支持split,是hadoop中最流行的壓縮格式??梢栽贚inux下可以通過安裝lzop命令來使用

缺點:
壓縮率比gzip要低一些;hadoop本身不支持,需要安裝;在應(yīng)用中對lzo格式的文件需要做一些特殊處理(為了支持split需要建索引,還需要指定inputformat為lzo格式)。

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

(4)snappy

優(yōu)點:壓縮和解壓速度快,合理的壓縮率
缺點:不支持的split,壓縮率比gzip要低;hadoop本身不支持,需要安裝
適用場景:
當(dāng)Mapreduce作業(yè)的Map輸出的數(shù)據(jù)比較大的時候,作為Map到Reduce的中間數(shù)據(jù)的壓縮格式;或者作為一個Mapreduce作業(yè)的輸出和另外一個Mapreduce作業(yè)的輸入。

三、壓縮的配置

1、適用范圍

可以用在MapReduce的任意階段輸出、原始數(shù)據(jù)的壓縮、reduce的輸出等

2、hadoop壓縮配置參數(shù)

參數(shù) 默認(rèn)值 階段 建議
io.compression.codecs (在core-site.xml中配置)org.apache.hadoop.io.compress.DefaultCodec, org.apache.hadoop.io.compress.GzipCodec, org.apache.hadoop.io.compress.BZip2Codec輸入壓縮Hadoop使用文件擴(kuò)展名判斷是否支持某種編解碼器
mapreduce.map.output.compress(在mapred-site.xml中配置)falsemap輸出這個參數(shù)設(shè)為true啟用壓縮
mapreduce.map.output.compress.codec(在mapred-site.xml中配置)org.apache.hadoop.io.compress.DefaultCodecmapper輸出使用LZO或snappy編解碼器在此階段壓縮數(shù)據(jù)
mapreduce.output.fileoutputformat.compress(在mapred-site.xml中配置)falsereduce輸出這個參數(shù)設(shè)為true啟用壓縮
mapreduce.output.fileoutputformat.compress.codec(在mapred-site.xml中配置)org.apache.hadoop.io.compress. DefaultCodecreduce輸出使用gzip或者bzip2來壓縮
mapreduce.output.fileoutputformat.compress.type(在mapred-site.xml中配置)RECORDreduce輸出SequenceFile輸出使用的壓縮類型:NONE和BLOCK

四、壓縮應(yīng)用實戰(zhàn)例子

1、數(shù)據(jù)流的壓縮和解壓

package JavaCompress;

import org.apache.hadoop.conf.Configuration;
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;

import java.io.*;

public class TestCompress {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //compress("G:\\Fly Away-梁靜茹.mp3", "org.apache.hadoop.io.compress.GzipCodec");
        deCompress("G:\\Fly Away-梁靜茹.mp3.gz", "mp3");

    }

//壓縮
    public static void compress(String filename, String method) throws IOException, ClassNotFoundException {
        //創(chuàng)建輸入流
        FileInputStream fis = new FileInputStream(new File(filename));

        //通過反射獲取壓縮類的Class 對象
        Class codecClass = Class.forName(method);

        //通過反射獲取壓縮對象
        CompressionCodec codec = (CompressionCodec)ReflectionUtils.newInstance(codecClass, new Configuration());

        //創(chuàng)建普通輸出流對象
        FileOutputStream fos = new FileOutputStream(new File(filename + codec.getDefaultExtension()));

        //通過壓縮對象創(chuàng)建壓縮輸出流,類似于將普通輸出流封裝成壓縮輸出流
        CompressionOutputStream cos = codec.createOutputStream(fos);

        //流拷貝
        IOUtils.copyBytes(fis, cos, 1024 * 1024 * 5, false);

        fis.close();
        cos.close();
        fos.close();

    }

//解壓
    public static void deCompress(String filename, String decode) throws IOException {
        CompressionCodecFactory factory = new CompressionCodecFactory(new Configuration());

        //獲取文件的壓縮算法類型對象,返回值可用于檢查文件是否可解壓
        CompressionCodec codec = factory.getCodec(new Path(filename));
        if (codec == null) {
            System.out.println("不支持解壓縮:" + filename);
            return;
        }

        //根據(jù)壓縮文件的壓縮類型,返回的對象用于創(chuàng)建壓縮輸入流
        CompressionInputStream cis = codec.createInputStream(new FileInputStream(new File(filename)));

        //創(chuàng)建輸出流
        FileOutputStream fos = new FileOutputStream(new File(filename + decode));

        IOUtils.copyBytes(cis, fos, 1024 * 1024 * 5, false);

        cis.close();
        fos.close();

    }
}

2、map輸出采用壓縮

用法很簡單,只需在driver中給job配置以下參數(shù)即可

Configuration configuration = new Configuration();

// 開啟map端輸出壓縮
configuration.setBoolean("mapreduce.map.output.compress", true);
// 設(shè)置map端輸出壓縮方式
configuration.setClass("mapreduce.map.output.compress.codec", BZip2Codec.class, CompressionCodec.class);

3、reduce輸出采用壓縮

依舊是在driver中設(shè)置以下

// 設(shè)置reduce端輸出壓縮開啟
FileOutputFormat.setCompressOutput(job, true);

// 設(shè)置壓縮的方式
FileOutputFormat.setOutputCompressorClass(job, BZip2Codec.class); 
//      FileOutputFormat.setOutputCompressorClass(job, GzipCodec.class); 
//      FileOutputFormat.setOutputCompressorClass(job, DefaultCodec.class); 

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

新聞標(biāo)題:十七、hadoop壓縮相關(guān)-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://www.rwnh.cn/article20/jdpco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、關(guān)鍵詞優(yōu)化、網(wǎng)站改版、網(wǎng)站維護(hù)做網(wǎng)站、網(wǎng)站營銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
于都县| 文山县| 哈巴河县| 克什克腾旗| 黄浦区| 筠连县| 莎车县| 林芝县| 新化县| 密山市| 蓬安县| 二连浩特市| 曲靖市| 阳泉市| 清新县| 泊头市| 信阳市| 柳林县| 南川市| 台北市| 原平市| 开封县| 康定县| 枣强县| 诸暨市| 车险| 夏邑县| 武邑县| 正宁县| 临澧县| 丰都县| 陵水| 平顶山市| 石景山区| 泾川县| 绥滨县| 宁海县| 都江堰市| 北京市| 时尚| 虞城县|