知識圧縮ポイント仕上げのHadoopの統合

簡単な紹介

圧縮:圧縮手段のデータによって生成されたターゲット生データは、コンテンツの入力及び出力の要件は(ほとんど)と同じであるが、ボリュームは同じではありません。

単一ユーザーの場合、ディスク容量の制限は、ファイル圧縮のための需要が生じ、制限データノードによるHadoopのユーザーのために、だけでなく、HDFS上の圧縮データに。オブジェクトは、ネットワーク(ネットワークの観点)の伝送効率を高めるために、HDFS(円盤の角度)が占める空間で圧縮されたデータを低減することで記憶されます。以下のための分散コンピューティングフレームワークのために、シャッフルは主要なボトルネックです。

実質的に大規模なデータフロー処理入力==>処理==>出力オフライン処理では、たとえば、スパークできHDFS ==>スパーク==> HDFS、リアルタイム処理、スパークストリーミングできカフカ==> ==スパーク> RDBMSをストリーミング入力は、処理に使用することができる場合、圧縮を使用してもよいし、出力を(そのようなマップの中間状態として、その出力は、シャッフルの量を減らすために圧縮することができます)。

MRデータ圧縮処理を行う際に、手動ハンドルに必要とされません。しかしながら、MRの実行中に、アクションは、データ圧縮、伸長のために必要とされ、MRはサフィックスに従って処理しました。圧縮、解凍の処理では、CPUリソースを消費しています。クラスタは、高いCPU使用率を持っていた場合、それは他のジョブに影響を与えることになる、それは圧縮の使用を推奨していません。

一般的な圧縮はフォーマットGZIP、BZIP2、LZO、スナッピーを圧縮比、圧縮速度の考慮から圧縮形式を選択します。別のコーデックに対応した異なる圧縮フォーマット。

BZip2Codec圧縮:

package com.bigdata.compression;

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;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class CompressionApp {

    public static void main(String[] args) throws Exception{
        String filename = "ip.txt";
        String method = "org.apache.hadoop.io.compress.BZip2Codec";
        compress(filename,method);
    }

    private static void compress(String filename, String method) throws Exception{
        FileInputStream fis = new FileInputStream(new File(filename));
        Class<?> codecClass = Class.forName(method);
        CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(codecClass, new Configuration());

        FileOutputStream fos = new FileOutputStream(new File(filename + codec.getDefaultExtension()));
        CompressionOutputStream cos = codec.createOutputStream(fos);
        IOUtils.copyBytes(fis,cos,1024*102485);

        cos.close();
        fos.close();
        fis.close();

    }
}
  1. 入力ストリームを読みます
  2. 対応コーデッククラス名で反射しました
  3. 書き込み出力ストリーム
  4. IOUtils.copyBytesを書き出すことにより、

圧縮前と比較した後:

BZip2Codec解凍:

private static void decompression(String filename) throws Exception{
        CompressionCodecFactory factory = new CompressionCodecFactory(new Configuration());
        CompressionCodec codec = factory.getCodec(new Path(filename));
        CompressionInputStream fis = codec.createInputStream(new FileInputStream(new File(filename)));
        FileOutputStream fos = new FileOutputStream(new File(filename) + ".decoded");

        IOUtils.copyBytes(fis,fos,1024*102485);

        fos.close();
        fos.close();
        fis.close();

    }

解凍前と比較した後:

最終圧縮制御の地図:

mapred-default.xmlのパラメータ、圧縮の出力制御用マップ、mapreduce.map.output.compress.codec制御圧縮タイプがmapreduce.map.output.compress。

コード・レベルを使用することができます。

configuration.setBoolean("mapreduce.map.output.compress",true);
configuration.setClass("mapreduce.map.output.compress.codec",BZip2Codec.class,CompressionCodec.class);

設定することができます。

設定レベルを変更するには、コア-site.xmlの追加する必要があります。

<property>
    <name>io.compression.codecs</name>
    <value>
        org.apache.hadoop.io.compress.GzipCodec,
        org.apache.hadoop.io.compress.DefaultCodec,
        org.apache.hadoop.io.compress.BZip2Codec,
        org.apache.hadoop.io.compress.SnappyCodec
    </value>
</property>	

 mapred-site.xml添加:

mapreduce.map.output.compress=true
mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.BZip2Code

mapreduce.output.fileoutputformat.compress=true
mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.BZip2Code

 プロファイルは、改訂されたとのHadoopを再起動することができます。

側圧縮制御の削減:

mapred-default.xmlの、制御出力の圧縮端を減らす、パラメータがmapreduce.output.fileoutputformat.compress

mapreduce.output.fileoutputformat.compress.codec制御圧縮タイプ。

上記設定します。

 

公開された66元の記事 ウォン称賛28 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_36329973/article/details/104589566