91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

昌邑市| 黎平县| 宁化县| 光山县| 辉南县| 拜泉县| 西畴县| 呈贡县| 尉氏县| 中江县| 历史| 清涧县| 荃湾区| 定结县| 永吉县| 尉犁县| 兰西县| 萨嘎县| 闽清县| 曲周县| 嘉义市| 湖北省| 天门市| 沂南县| 潢川县| 南昌市| 阳高县| 泊头市| 漳浦县| 莎车县| 弥渡县| 若尔盖县| 霍林郭勒市| 静宁县| 灵璧县| 新巴尔虎右旗| 盘山县| 马山县| 莱州市| 墨江| 历史|