MapReduce使用壓縮算法對計算完畢的數據進行壓縮

MapReduce使用壓縮算法對計算完畢的數據進行壓縮

查看Hadoop支持的壓縮格式

Hadoop的路徑/bin/hadoop checknative

Hadoop支持的壓縮算法

壓縮格式 工具 算法 文件擴展名 是否可切分
DEFLATE DEFLATE .deflate
Gzip gzip DEFLATE .gz
bzip2 bzip2 bzip2 bz2
LZO lzop LZO .lzo
LZ4 LZ4 .lz4
Snappy Snappy .snappy

各個壓縮算法對應的類

壓縮格式 對應的java類
DEFLATE org.apache.hadoop.io.compress.DeFaultCodec
Gzip org.apache.hadoop.io.compress. GZipCodec
bzip2 org.apache.hadoop.io.compress.BZip2Codec
LZO com.hadoop.compression.lzo.LzopCodec
LZ4 org.apache.hadoop.io.compress. LZ4Codec
Snappy org.apache.hadoop.io.compress.SnappyCodec

因爲snappy是以上最快的算法,所以我們使用snappy的壓縮算法

使用壓縮算法對計算完畢的數據進行壓縮,我們只需要對Driver做改變就行了
在Driver裏,通過Configuration對象設置壓縮格式

package com.czxy4;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

/**
 * @author 嗨皮騷
 * @version v 1.0
 * @date 2019/11/18
 */
public class MoreFileDriver extends Configured implements Tool {
    @Override
    public int run(String[] strings) throws Exception {
    	//將Configuration實例出來
        Configuration entries = new Configuration();
        //k,v
        //設置map使用的壓縮算法
        entries.set("mapreduce.map.output.compress","true");
        //這裏的第二個參數就是壓縮算法對應的類
        entries.set("mapreduce.map.output.compress.codec","org.apache.hadoop.io.compress.SnappyCodec");

        //設置reduce使用的壓縮算法
        entries.set("mapreduce.output.fileoutputformat.compress","true");
        entries.set("mapreduce.output.fileoutputformat.compress.type","RECORD");
        //這裏的第二個參數就是壓縮算法對應的類
        entries.set("mapreduce.output.fileoutputformat.compress.codec","org.apache.hadoop.io.compress.SnappyCodec");
        

        Job job = Job.getInstance(entries, "MoreFile");

        job.setJarByClass(MoreFileDriver.class);

        job.setInputFormatClass(TextInputFormat.class);
        TextInputFormat.addInputPath(job,new Path("/abc"));

        job.setMapperClass(MoreFileMap.class);
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(Text.class);

        job.setReducerClass(MoreFileReduce.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(Text.class);


        job.setOutputFormatClass(TextOutputFormat.class);
        TextOutputFormat.setOutputPath(job,new Path("/cccc"));
        return job.waitForCompletion(true)?0:1;
    }

    public static void main(String[] args) throws Exception {
        int run = ToolRunner.run(new MoreFileDriver(), args);
    }
}

以上

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章