Hadoop 2.X管理と開発(二、データ圧縮と最適化)

3951 ワード

#Hadoopデータ圧縮

データ圧縮

  • 1)MR動作中に大量のデータ伝送を行うには、データを圧縮する必要がある
  • .
  • 2)圧縮技術は、下位ストレージ(HDFS)の読み書きバイト数を効果的に削減することができ、ネットワーク帯域幅とディスク空間の効率を向上させることができる
  • .
  • )データ圧縮により、効率的にリソースを節約できる
  • .
  • 4)圧縮事MRプログラムの最適化戦略
  • 5)圧縮符号化によるMapperまたはreduceデータ転送の圧縮により、ディスクIO
  • を低減する.

    圧縮の基本原則

  • )演算密集型タスク少用圧縮
  • 2)IO密集型のタスク、多用圧縮
  • MRがサポートする圧縮符号化

  • DEFAULTは自己符号化である.default不可分
  • Gzipは自己符号化である.gz不可分
  • bzip 2は自己符号化である.bz 2は
  • に切り分けることができます
  • LZO非自己符号化lzoは
  • に切り分けることができます
  • Snappyは符号化を持たない.Snappyは
  • に分割できません

    コーディング/デコーダ


    DEFAULT 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.lzoCodeC Snappy org.apache.hadoop.io.compress.SnappyCodeC

    あっしゅくせい


    Gzip原サイズ:8.3 GB圧縮後:1.8 GB圧縮速度:17.5 MB/s解凍速度:58 MB/s bzip 2原サイズ:8.3 GB圧縮後:1.1 GB圧縮速度:2.4 MB/s解凍速度:9.5 MB/s LZO原サイズ:8.3 GB圧縮後:2.9 GB圧縮速度:49.3 MB/s解凍速度:74.6 MB/s

    圧縮モードの設定

    mapper :
        // map 
    		conf.setBoolean("mapreduce.map.outpot.compress", true);
    		// 
    		//conf.setClass("mapreduce.map.outpot.compress.codec", DefaultCodec.class, CompressionCodec.class);
    		conf.setClass("mapreduce.map.outpot.
            compress.codec", BZip2Codec.class, CompressionCodec.class);
    
    reduce :
        // reduce 
    		FileOutputFormat.setCompressOutput(job, true);
    		// 
    		//FileOutputFormat.setOutputCompressorClass(job, DefaultCodec.class);
    		FileOutputFormat.setOutputCompressorClass(job, BZip2Codec.class);
    

    Hadoop最適化


    MapReduceプログラムの効率のボトルネック


    関連

  • MR機能:分布式オフライン計算
  • コンピュータ性能:CPU、メモリ、ディスク、ネットワーク
  • I/O操作の最適化:
    データの傾き(コード最適化)mapとreduceの個数設定が不合理mapの実行時間が長すぎるため、reduceの待ち時間が長すぎるファイルが多すぎる(C o m b i n e TextInputFormat小ファイルのマージ)分速できない超大ファイル(オーバーフローが続く)複数のオーバーフロー小ファイルが複数回mergeを必要とする

  • 最適化方法

  • データ入力
    小ファイルのマージ:MRタスクを実行する前に小ファイルのマージを行うには、入力としてCombineTextInputFormatを使用し、入力側の大量の小ファイルのシーンとして使用します.
  • Mapフェーズ
    オーバーフロー回数の減少(メモリ200 MB 80%増加):ディスクI/Oの減少
    mapred-default.xml:
    
    
    	mapreduce.task.io.sort.mb
    	200
    
    
    
    	mapreduce.map.sort.spill.percent
    	0.80
    
    

    マージ回数を減らす
    mapred-default.xml:
    
    	mapreduce.task.io.sort.factor
    	10 // , 
    
    

    map以降、ビジネスロジックに影響を及ぼさずにcombinerを使用できます
  • Reduceフェーズ
    合理的な設定mapとreduceの個数設定map/reduceの共存
    mapred-default.xml:
    
    	mapreduce.job.reduce.skowstart.completedmaps
    	0.05 // map , reduce, 
    
    

    reduceのbufferを合理的に設定する
    mapred-default.xml:
    
    	mapreduce.reduce.markreset.buffer.percent
    	0.0 
    
    
  • I/O転送
    データ圧縮のためのsequenceFileの使用
  • データチルト
    範囲パーティションを行うカスタムパーティションCombineはmapJoinの断固としてreduceJoinを使わないことができます
  • パラメータチューニング
    割り当てmapプログラムCPUコア数
    mapred-default.xml:
    
    	mapreduce.map.cpu.vcores
    	1 // 
    
    

    割当reduceプログラムCPUコア数
    mapred-default.xml:
    
    	mapreduce.reduce.cpu.vcores
    	1 // 
    
    

    maptaskメモリの設定
    mapred-default.xml:
    
    	mapreduce.map.memory.mb
    	1024 // maptask 
    
    

    reducetaskメモリの設定
    mapred-default.xml:
    
    	mapreduce.reduce.memory.mb
    	1024 // maptask 
    
    

    reduce脱map端並列度
    mapred-default.xml:
    
    	mapreduce.reduce.shuffle.parallelcopies
    	5 // reduce map 5