Hadoop 2.X管理と開発(二、データ圧縮と最適化)
3951 ワード
#Hadoopデータ圧縮
1)MR動作中に大量のデータ伝送を行うには、データを圧縮する必要がある .2)圧縮技術は、下位ストレージ(HDFS)の読み書きバイト数を効果的に削減することができ、ネットワーク帯域幅とディスク空間の効率を向上させることができる .)データ圧縮により、効率的にリソースを節約できる .4)圧縮事MRプログラムの最適化戦略 5)圧縮符号化によるMapperまたはreduceデータ転送の圧縮により、ディスクIO を低減する.
)演算密集型タスク少用圧縮 2)IO密集型のタスク、多用圧縮 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
Hadoop最適化
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の減少
マージ回数を減らす
map以降、ビジネスロジックに影響を及ぼさずにcombinerを使用できます
Reduceフェーズ
合理的な設定mapとreduceの個数設定map/reduceの共存
reduceのbufferを合理的に設定する I/O転送
データ圧縮のためのsequenceFileの使用
データチルト
範囲パーティションを行うカスタムパーティションCombineはmapJoinの断固としてreduceJoinを使わないことができます
パラメータチューニング
割り当てmapプログラムCPUコア数
割当reduceプログラムCPUコア数
maptaskメモリの設定
reducetaskメモリの設定
reduce脱map端並列度
データ圧縮
圧縮の基本原則
MRがサポートする圧縮符号化
コーディング/デコーダ
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プログラムの効率のボトルネック
関連
データの傾き(コード最適化)mapとreduceの個数設定が不合理mapの実行時間が長すぎるため、reduceの待ち時間が長すぎるファイルが多すぎる(C o m b i n e TextInputFormat小ファイルのマージ)分速できない超大ファイル(オーバーフローが続く)複数のオーバーフロー小ファイルが複数回mergeを必要とする
最適化方法
小ファイルのマージ:MRタスクを実行する前に小ファイルのマージを行うには、入力としてCombineTextInputFormatを使用し、入力側の大量の小ファイルのシーンとして使用します.
オーバーフロー回数の減少(メモリ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を使用できます
合理的な設定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
データ圧縮のための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