ビデオ: How do I use S3DistCp? 2024
Hadoopの典型的な展開で現実の膨大なデータ量が圧縮を必要とします。データ圧縮により、大量のストレージスペースが節約され、クラスタ全体でそのデータの移動がスピードアップされます。驚くことではありませんが、コーデックと呼ばれるいくつかの圧縮方式があります。
Hadoopデプロイメントでは、非常に多数の個々のスレーブノードを処理しています(それぞれに多数の大容量ディスクドライブがあります)。個々のスレーブノードがHDFS用に使用可能な45TB以上のRAWストレージスペースを持つことは珍しいことではありません。
<! Hadoopスレーブノードは安価に設計されていますが、フリーではなく、増加する速度で成長する傾向のある大量のデータでは、圧縮は極端なデータ量。最初に、いくつかの基本的な用語:A9999コーデック、短縮された形式の圧縮器である999は、技術(ソフトウェアまたはハードウェア、またはデータの圧縮および解凍の両方を行う。それは圧縮/解凍アルゴリズムの実装です。<!いくつかのコーデックはスプリット可能な圧縮と呼ばれるものをサポートしていること、またコーデックはデータの圧縮と解凍の速度と圧縮の程度が異なることを知っておく必要があります。
分割可能な圧縮 は、Hadoopコンテキストでは重要な概念です。 Hadoopの仕組みは、ファイルのブロックサイズ設定より大きい場合にファイルを分割し、個々のファイル分割を異なるマッパーで並行して処理できることです。 <!ほとんどのコーデックでは、テキストファイルの分割は、同じファイルからの他の分割とは独立して圧縮解除できないため、これらのコーデックはスプリット可能ではないと言われているため、MapReduceの処理は単一のマッパーに限定されています。 ファイルはスプリットに基づいて個々の部分ではなく、全体としてのみ解凍できるため、そのようなファイルの並列処理は不可能であり、ジョブが単一のマッパーを待つため、パフォーマンスが大幅に低下する可能性があります。独立して解凍することができない複数のデータブロックを処理する。 スプリット可能な圧縮は、テキストファイルの要素にすぎません。バイナリファイルの場合、Hadoop圧縮コーデックはファイルの種類(SequenceFile、Avro、ProtocolBufferなど)に応じて、バイナリエンコードされたコンテナ内のデータを圧縮します。 パフォーマンスと言えば、Hadoopクラスタに書き込まれているデータを圧縮することに関連するコスト(処理リソースと時間の点で)があります。 コンピュータでは、人生と同じように、何も無料ではありません。データを圧縮するときは、ディスク領域の処理サイクルを交換しています。また、そのデータが読み込まれているときには、データの解凍に関連するコストもかかります。追加のパフォーマンスオーバーヘッドに対してストレージの節約のメリットを考慮に入れてください。
MapReduceジョブへの入力ファイルに圧縮データが含まれている場合、そのデータをHDFSから読み取るために必要な時間が短縮され、ジョブのパフォーマンスが向上します。入力データはMapReduceで読み取られると自動的に解凍されます。入力ファイル拡張子は、サポートされているコーデックがデータの自動解凍に使用されるかどうかを決定します。たとえば、a。 gz拡張子は、ファイルをgzip圧縮ファイルとして識別します。また、MapReduce処理フローにおいて、マップフェーズの中間出力を圧縮することも有用である。マップ関数の出力はディスクに書き込まれ、ネットワーク経由で削減タスクに送信されるため、出力を圧縮するとパフォーマンスが大幅に向上します。
将来の使用のためにMapReduceの出力を履歴ファイルとして保存する場合、このデータを圧縮するとHDFSの必要なスペースが大幅に削減されます。多くの異なる圧縮アルゴリズムおよびツールが存在し、それらの特性および強さは様々である。最も一般的なトレードオフは、圧縮率(ファイルが圧縮される度合い)と圧縮/復元速度の間のトレードオフです。 Hadoopフレームワークはいくつかのコーデックをサポートしています。フレームワークは、ほとんどの入力および出力ファイル形式を透過的に圧縮および解凍します。 次のリストは、Hadoopフレームワークでサポートされている一般的なコーデックを示しています。特定のユースケースの要求に最も近いコーデックを選択してください(たとえば、処理速度が重要なワークロードでは、高圧縮率のコーデックが選択されています)。
Gzip:A compression GNUプロジェクトで採用されたユーティリティであるGzip(GNU zipの略)は、圧縮されたファイルを生成します。 gz拡張子。 gunzipコマンドを使用して、Gzipを含むいくつかの圧縮ユーティリティで作成されたファイルを解凍することができます。
Bzip2:
ユーザビリティの観点から、Bzip2とGzipは似ています。 Bzip2はGzipよりも優れた圧縮率を生成しますが、はるかに遅いです。実際、Hadoopで使用できるすべての圧縮コーデックのうち、Bzip2ははるかに遅いです。
クエリをほとんど必要としないアーカイブを設定していて、スペースに高いプレミアがある場合は、おそらくBzip2を検討する価値があります。
スナッピー:
Googleのスナッピーコーデックは、適度な圧縮率を提供しますが、速い圧縮率と圧縮解除速度を提供します。 (実際には、最も高速な解凍速度を持つため、頻繁に照会される可能性が高いデータセットにとっては非常に望ましい)。
Snappyコーデックは、他のHadoopサブプロジェクトをサポートする一般的なユーティリティのセットであるHadoop Common 。 Snappyは、Snappyコーデックをサポートしていない最新バージョンのHadoopのアドオンとして使用できます。
LZO:
Snappyと同様に、LZO(Lempel-Ziv-Oberhumerの略語、コンピュータ・サイエンスのトリオでアルゴリズムを思いついた人)は、適度な圧縮率を提供しますが、速い圧縮と解凍の速度を提供します。 LZOはGNU Public License(GPL)の下でライセンスされています。
LZOは分割可能な圧縮をサポートしており、MapReduceジョブによる圧縮テキストファイル分割の並列処理が可能です。可変長圧縮ブロックでは、圧縮ファイルを安全に分割できるマッパーに指示するための索引が必要であるため、LZOはファイルを圧縮するときに索引を作成する必要があります。 LZOは、テキストファイルを圧縮する必要がある場合にのみ、本当に望ましいものです。
Hadoopコーデック
-
コーデック ファイル拡張子
-
分割可能? 圧縮度
圧縮速度
-
Gzip 。 gz 999なし999中999 Bzip 2 999。 bz2
はい
-
高 遅い
スナッピー
中 | 中 | 高速 | LZO | 。すべての圧縮アルゴリズムは、圧縮の程度とそれらが達成できる圧縮の速度との間のトレードオフを行わなければならない。リストされているコーデックでは、圧縮時と圧縮時のバランスが圧縮時にどのようになるかを制御できます。 |
---|---|---|---|---|
たとえば、Gzipでは、負の整数(またはキーワード)を指定して圧縮の速度を調整できます。-1は最も速い圧縮レベルを示し、-9は最も遅い圧縮レベルを示します。デフォルトの圧縮レベルは-6です。 |