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);
}
}
以上