亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

Hadoop中如何壓縮Codec

發布時間:2021-12-09 15:51:51 來源:億速云 閱讀:133 作者:小新 欄目:云計算

小編給大家分享一下Hadoop中如何壓縮Codec,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

作為輸入

            當壓縮文件作為MapReduce的輸入時,MapReduce將自動通過擴展名找到相應的Codec對其解壓。

作為輸出

            當MapReduce的輸出文件需要壓縮時,可以更改mapred.output.compress為true,mapred.output.compression.codec為想要使用的codec的類名稱,當然你可以可以在代碼中指定,通過調用FileOutputFormt的靜態方法去設置這兩個屬性:

package com.hadoop.codecs;

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.compress.GzipCodec;
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 CodecDemo {
    public static void main(String[] args) throws Exception {
        if (args.length!=2){
            System.exit(-1);
        }
        Job job=new Job();
        job.setJarByClass(CodecDemo.class);
        job.setJobName("CodecDemo");

        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));

        job.setMapperClass(MyMapper.class);
        job.setCombinerClass(MyReducer.class);
        job.setReducerClass(MyReducer.class);

        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(LongWritable.class);

	//設置輸出壓縮開啟
        FileOutputFormat.setCompressOutput(job, true);
	//設置壓縮類:GzipCodec
        FileOutputFormat.setOutputCompressorClass(job, GzipCodec.class);

        System.exit(job.waitForCompletion(true)?0:1);

    }
}

Hadoop中如何壓縮Codec

Hadoop中如何壓縮Codec

使用CompressionCodes解壓縮

/*
使用CompressionCodes解壓縮CompressionCodec有兩個方法可以方便的壓縮和解壓。
壓縮:通過createOutputStream(OutputStream out)方法獲得CompressionOutputStream對象
解壓:通過createInputStream(InputStream in)方法獲得CompressionInputStream對象
從命令行接受一個CompressionCodec實現類的參數,然后通過ReflectionUtils把實例化這個類,調用CompressionCodec的接口方法對標準輸出流進行封裝,封裝成一個壓縮流,通過IOUtils類的copyBytes方法把標準輸入流拷貝到壓縮流中,最后調用CompressionCodec的finish方法,完成壓縮。
*/
package com.hadoop.codecs;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.compress.CompressionCodec;
import org.apache.hadoop.io.compress.CompressionOutputStream;
import org.apache.hadoop.util.ReflectionUtils;

public class Compressors {
    public static void main(String[] args) throws Exception {
        String codecClassName = args[0];
        Class<?> codecClass = Class.forName(codecClassName);
        Configuration conf = new Configuration();
        CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(codecClass, conf);

        CompressionOutputStream out = codec.createOutputStream(System.out);
        IOUtils.copyBytes(System.in, out, 4096, false);
        out.finish();
    }
}

使用CompressionCodecFactory解壓縮

/*
    如果你想讀取一個被壓縮的文件的話,首先你得先通過擴展名判斷該用哪種codec,當然有更簡便得辦法,CompressionCodecFactory已經幫你把這件事做了,通過傳入一個Path調用它得getCodec方法,即可獲得相應得codec。
    注意看下removeSuffix方法,這是一個靜態方法,它可以將文件的后綴去掉,然后我們將這個路徑做為解壓的輸出路徑。CompressionCodecFactory能找到的codec也是有限的,默認只有三種org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.DefaultCodec,如果想添加其他的codec你需要更改io.compression.codecs屬性,并注冊codec。


*/
package com.hadoop.codecs;  

import org.apache.hadoop.conf.Configuration;  
import org.apache.hadoop.fs.FileSystem;  
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 java.io.IOException;  
import java.io.InputStream;  
import java.io.OutputStream;  
import java.net.URI;  
  
public class FileDecompressor {  
	public static void main(String[] args) throws Exception {  
		String uri = args[0];  
		Configuration conf = new Configuration();  
		FileSystem fs = FileSystem.get(URI.create(uri), conf);  
  
		Path inputPath = new Path(uri);  
		CompressionCodecFactory factory = new CompressionCodecFactory(conf);  
		CompressionCodec codec = factory.getCodec(inputPath);  
		if (codec == null) {  
			System.out.println("No codec found:" + uri);  
			System.exit(1);  
		}  
		String outputUri = CompressionCodecFactory.removeSuffix(uri, codec.getDefaultExtension());  
  
		InputStream in = null;  
		OutputStream out = null;  
  
		try {  
			in = codec.createInputStream(fs.open(inputPath));  
			out = fs.create(new Path(outputUri));  
			IOUtils.copyBytes(in,out,conf);  
		} finally {  
			IOUtils.closeStream(in);  
			IOUtils.closeStream(out);  
		}  
	}  
}

以上是“Hadoop中如何壓縮Codec”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

AI

黄浦区| 祁门县| 句容市| 广德县| 云安县| 信阳市| 高要市| 常熟市| 皋兰县| 科尔| 江永县| 磐安县| 大名县| 陆良县| 桦南县| 自治县| 怀宁县| 阳春市| 景宁| 绥化市| 宁陵县| 梁河县| 呼玛县| 新沂市| 铁岭市| 泰顺县| 连云港市| 娄底市| 海阳市| 增城市| 西林县| 台中县| 海原县| 团风县| 樟树市| 通许县| 大城县| 鲁甸县| 井冈山市| 吐鲁番市| 米林县|