中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hadoop壓縮技術的概念

發布時間:2021-09-09 15:05:51 來源:億速云 閱讀:196 作者:chen 欄目:大數據

本篇內容主要講解“Hadoop壓縮技術的概念”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Hadoop壓縮技術的概念”吧!

1 概述

Hadoop壓縮技術的概念

壓縮策略和原則

Hadoop壓縮技術的概念

2 MR 支持的壓縮編碼

壓縮格式hadoop自帶算法文件擴展名是否可切分換成壓縮格式后,原程序是否需要修改
DEFLATE是,直接使用DEFLATE.deflate和文本處理一樣,不需要修改
Gzip是,直接使用DEFLATE.gz和文本處理一樣,不需要修改
bzip2是,直接使用bzip2.bz2和文本處理一樣,不需要修改
LZO否,需要安裝LZO.lzo需要建索引,還需要指定輸入格式
Snappy否,需要安裝Snappy.snappy和文本處理一樣,不需要修改

為了支持多種壓縮/解壓縮算法,Hadoop 引入了編碼/解碼器,如下表所示。

壓縮格式對應的編碼/解碼器
DEFLATEorg.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

壓縮性能的比較

壓縮算法原始文件大小壓縮文件大小壓縮速度解壓速度
gzip8.3GB1.8GB17.5MB/s58MB/s
bzip28.3GB1.1GB2.4MB/s9.5MB/s
LZO8.3GB2.9GB49.3MB/s74.6MB/s

3 壓縮方式選擇

3.1 Gzip 壓縮

Hadoop壓縮技術的概念

3.2 Bzip2 壓縮

Hadoop壓縮技術的概念

3.3 Lzo 壓縮

Hadoop壓縮技術的概念

3.4 Snappy 壓縮

Hadoop壓縮技術的概念

4 壓縮位置選擇

Hadoop壓縮技術的概念

5 壓縮參數配置

參數默認值階段
io.compression.codecs                                                  [在core-site.xml]org.apache.hadoop.io.compress.DefaultCodecorg apache.hadoop.io.compress.GzipCodec org.apache.hadoop.io.compress.BZip2Codec輸入壓縮
mapreduce.map.output.compress                   [mapred-site.xml]falsemapper輸出
mapreduce.map.output.compress.codec     [mapred-site.xml]org.apache.hadoop.io.compress.DefaultCodecmapper輸出
mapreduce.output.fileoutputformat.compress [mapred-site.xml]falsereducer輸出
mapreduce.output.fileoutputformat.compress.codec [mapred-site.xml]org.apache.hadoop.io.compress  DefaultCodecreducer輸出
mapreduce.output.fileoutputformat.compress.type [mapred-site.xml]RECORDreducer輸出

6 壓縮實操案例

6.1 數據流的壓縮和解壓縮

package com.djm.mapreduce.zip;

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 CompressUtils {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        compress(args[0], args[1]);
        decompress(args[0]);
    }

    private static void decompress(String path) throws IOException {
        CompressionCodecFactory factory = new CompressionCodecFactory(new Configuration());
        CompressionCodec codec = (CompressionCodec) factory.getCodec(new Path(path));
        if (codec == null) {
            System.out.println("cannot find codec for file " + path);
            return;
        }
        CompressionInputStream cis = codec.createInputStream(new FileInputStream(new File(path)));
        FileOutputStream fos = new FileOutputStream(new File(path + ".decoded"));
        IOUtils.copyBytes(cis, fos, 1024);
        cis.close();
        fos.close();
    }

    private static void compress(String path, String method) throws IOException, ClassNotFoundException {
        FileInputStream fis = new FileInputStream(new File(path));
        Class codecClass  = Class.forName(method);
        CompressionCodec codec  = (CompressionCodec) ReflectionUtils.newInstance(codecClass, new Configuration());
        FileOutputStream fos = new FileOutputStream(new File(path + codec.getDefaultExtension()));
        CompressionOutputStream cos = codec.createOutputStream(fos);
        IOUtils.copyBytes(fis, cos, 1024);
        cos.close();
        fos.close();
        fis.close();
    }
}

6.2 Map 輸出端采用壓縮

package com.djm.mapreduce.wordcount;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.compress.BZip2Codec;
import org.apache.hadoop.io.compress.CompressionCodec;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

public class WcDriver {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        Configuration configuration = new Configuration();
        configuration.setBoolean("mapreduce.map.output.compress", true);
        // 設置map端輸出壓縮方式
        configuration.setClass("mapreduce.map.output.compress.codec", BZip2Codec.class, CompressionCodec.class);
        Job job = Job.getInstance(configuration);
        job.setJarByClass(WcDriver.class);
        job.setMapperClass(WcMapper.class);
        job.setReducerClass(WcReduce.class);
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        FileInputFormat.setInputPaths(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        boolean result = job.waitForCompletion(true);
        System.exit(result ? 0 : 1);
    }
}

6.3 Reduce 輸出端采用壓縮

package com.djm.mapreduce.wordcount;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.compress.BZip2Codec;
import org.apache.hadoop.io.compress.CompressionCodec;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

public class WcDriver {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        Configuration configuration = new Configuration();
        Job job = Job.getInstance(configuration);
        job.setJarByClass(WcDriver.class);
        job.setMapperClass(WcMapper.class);
        job.setReducerClass(WcReduce.class);
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        FileInputFormat.setInputPaths(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        // 設置reduce端輸出壓縮開啟
        FileOutputFormat.setCompressOutput(job, true);
        // 設置壓縮的方式
        FileOutputFormat.setOutputCompressorClass(job, BZip2Codec.class);
        boolean result = job.waitForCompletion(true);
        System.exit(result ? 0 : 1);
    }
}

到此,相信大家對“Hadoop壓縮技術的概念”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

左云县| 财经| 冷水江市| 公安县| 玉林市| 旺苍县| 韶山市| 沛县| 鄂温| 瑞金市| 清水河县| 玉林市| 西贡区| 宜春市| 出国| 西丰县| 江门市| 沙洋县| 衡阳县| 咸丰县| 湘潭市| 富锦市| 登封市| 万年县| 文登市| 河间市| 旬阳县| 赤水市| 平邑县| 武平县| 高淳县| 赤峰市| 新河县| 桐梓县| 蛟河市| 巴林右旗| 水富县| 政和县| 攀枝花市| 永嘉县| 兴义市|