webdevqa.jp.net

Hadoopのシーケンスファイルとは何ですか?

Map-reduceは初めてですが、シーケンスファイルのデータ入力とは何ですか?私はHadoopの本で勉強しましたが、理解するのが難しかったです。

13
Soghra Gargari

最初に、SequenceFileが解決しようとしている問題を理解し、次にSequenceFileが問題の解決にどのように役立つかを理解する必要があります。

HDFSの場合

  • SequenceFileは、Hadoopの小さなファイルの問題に対するソリューションの1つです。
  • 小さなファイルは、HDFSブロックサイズ(128MB)よりも大幅に小さくなります。
  • HDFSの各ファイル、ディレクトリ、ブロックはオブジェクトとして表され、150バイトを占有します。
  • 1000万ファイルは、NameNodeの約3ギガバイトのメモリを使用します。
  • 10億のファイルは実現不可能です。

MapReduce内

  • 通常、マップタスクは一度に入力のブロックを処理します(デフォルトのFileInputFormatを使用)。

  • ファイルの数が多いほど、マップタスクの必要数が多くなり、ジョブ時間はさらに遅くなる可能性があります。

小さなファイルのシナリオ

  • ファイルは、より大きな論理ファイルの一部です。
  • ファイルは、たとえば画像など、本質的に小さいものです。

これらの2つのケースでは異なるソリューションが必要です。

  • まず、小さなファイルを連結するプログラムを作成します(これを正確に実行するConsolidatorと呼ばれるツールについてNathan Marzの post を参照してください)。
  • 2番目の方法では、ファイルを何らかの方法でグループ化するために、ある種のコンテナーが必要です。

Hadoopのソリューション

HARファイル

  • HAR( Hadoop Archives )は、ネームノードのメモリに圧力をかける多くのファイルの問題を軽減するために導入されました。
  • HARはおそらく、アーカイブ目的でのみ使用するのが最善です。

SequenceFile

  • SequenceFileの概念は、各小さなファイルを1つの大きなファイルに配置することです。
  • たとえば、100KBのファイルが10,000個あるとすると、以下のように、それらを単一のSequenceFileに入れるプログラムを記述できます。ここで、ファイル名をキーに使用し、コンテンツを値に使用できます。

    SequenceFile File Layout
    (ソース: csdn.net

  • いくつかの利点:

    1. NameNodeで必要なメモリの数が少なくなります。 10,000個の100KBファイルの例を続けます。
      • SequenceFileを使用する前は、10,000個のオブジェクトがNameNodeのRAMの約4.5MBを占めています。
      • SequenceFile、8 GBのHDFSブロックを含む1GBのSequenceFileを使用した後、これらのオブジェクトはNameNodeで約3.6KBのRAMを占有します。
    2. SequenceFileは分割可能であるため、MapReduceに適しています。
    3. SequenceFileは圧縮をサポートしています。
  • サポートされている圧縮。ファイル構造は圧縮タイプによって異なります。

    1. 非圧縮
    2. Record-Compressed:ファイルに追加されるときに各レコードを圧縮します。 record_compress_seq
      (ソース: csdn.net

    3. ブロック圧縮 这里写图片描述
      (ソース: csdn.net

      • 圧縮するデータがブロックサイズに達するまで待機します。
      • ブロック圧縮は、レコード圧縮よりも優れた圧縮率を提供します。
      • SequenceFileを使用する場合、ブロック圧縮が一般的に推奨されるオプションです。
      • ここでのブロックは、HDFSまたはファイルシステムブロックとは無関係です
49
JiaMing Lin