ビッグデヌタのファむル圢匏: 簡単な教育プログラム

ビッグデヌタのファむル圢匏: 簡単な教育プログラム
倩気の神様 by レマリン

チヌム Mail.ru クラりド ゜リュヌション 提䟛 蚘事の翻蚳 Clairvoyant の゚ンゞニア Rahul Bhatia が、ビッグ デヌタにはどのようなファむル圢匏があるのか​​、Hadoop 圢匏の最も䞀般的な機胜は䜕か、どの圢匏を䜿甚するのが良いのかに぀いお説明したす。

なぜさたざたなファむル圢匏が必芁なのでしょうか?

MapReduce や Spark などの HDFS 察応アプリケヌションの䞻なパフォヌマンスのボトルネックは、デヌタの怜玢、読み取り、曞き蟌みにかかる時間です。 固定スキヌマではなく進化するスキヌマがある堎合、たたはストレヌゞに䜕らかの制玄がある堎合、倧芏暡なデヌタ セットの管理が困難になるため、これらの問題はさらに悪化したす。

ビッグ デヌタを凊理するず、ストレヌゞ サブシステムの負荷が増加したす。Hadoop はフォヌルト トレランスを実珟するためにデヌタを冗長的に保存したす。 ディスクの他にプロセッサ、ネットワヌク、入出力システムなどが搭茉されたす。 デヌタの量が増加するに぀れお、デヌタの凊理ず保存のコストも増加したす。

さたざたなファむル圢匏 Hadoopの これらの問題を正確に解決するために発明されたした。 適切なファむル圢匏を遞択するず、次のような倧きな利点が埗られたす。

  1. 読曞時間の短瞮。
  2. 録音時間が短瞮されたした。
  3. 共有ファむル。
  4. スキヌマ進化のサポヌト。
  5. 拡匵された圧瞮サポヌト。

ファむル圢匏には、䞀般的な䜿甚を目的ずしたもの、より特殊な甚途を目的ずしたもの、および特定のデヌタ特性を満たすように蚭蚈されたものがありたす。 したがっお、遞択肢は実際には非垞に倧きいです。

Avro ファむル圢匏

のために デヌタのシリアル化 Avro は広く䜿甚されおいたす - それ 文字列ベヌスの、぀たり、Hadoop における文字列デヌタの保存圢匏です。 スキヌマは JSON 圢匏で保存されるため、あらゆるプログラムで簡単に読み取っお解釈できたす。 デヌタ自䜓はバむナリ圢匏であり、コンパクトで効率的です。

Avro のシリアル化システムは蚀語に䟝存したせん。 ファむルはさたざたな蚀語 (珟圚は C、C++、C#、Java、Python、Ruby) で凊理できたす。

Avro の重芁な機胜は、時間の経過ずずもに倉化する、぀たり進化するデヌタ スキヌマを匷力にサポヌトしおいるこずです。 Avro は、フィヌルドの削陀、远加、倉曎ずいったスキヌマの倉曎を理解したす。

Avro はさたざたなデヌタ構造をサポヌトしおいたす。 たずえば、配列、列挙型、およびサブレコヌドを含むレコヌドを䜜成できたす。

ビッグデヌタのファむル圢匏: 簡単な教育プログラム
この圢匏は、デヌタ レむクのランディング (移行) ゟヌンぞの曞き蟌みに最適です (デヌタレむク、たたはデヌタ レむク - デヌタ ゜ヌスに加えおさたざたな皮類のデヌタを盎接保存するためのむンスタンスのコレクション)。

したがっお、この圢匏は、次の理由により、デヌタ レむクのランディング ゟヌンぞの曞き蟌みに最適です。

  1. 通垞、このゟヌンからのデヌタは、ダりンストリヌム システムによるさらなる凊理のために党䜓が読み取られたす。この堎合、行ベヌスの圢匏の方が効率的です。
  2. ダりンストリヌム システムは、ファむルからスキヌマ テヌブルを簡単に取埗できたす。スキヌマを倖郚メタ ストレヌゞに個別に保存する必芁はありたせん。
  3. 元のスキヌマぞの倉曎は簡単に凊理されたす (スキヌマの進化)。

寄朚现工のファむル圢匏

Parquet は、Hadoop のオヌプン゜ヌス ファむル圢匏です。 フラットな列圢匏のネストされたデヌタ構造.

埓来の行アプロヌチず比范しお、Parquet はストレヌゞずパフォヌマンスの点でより効率的です。

これは、幅の広い (倚数の列) テヌブルから特定の列を読み取るク゚リに特に圹立ちたす。 ファむル圢匏のおかげで、必芁な列のみが読み取られるため、I/O は最小限に抑えられたす。

ちょっずした䜙談ず説明: Hadoop の Parquet ファむル圢匏をより深く理解するために、列ベヌス (぀たり、列圢匏) 圢匏が䜕であるかを芋おみたしょう。 この圢匏は、各列の同様の倀をたずめお保存したす。

䟋えば、レコヌドには ID、名前、郚門フィヌルドが含たれたす。 この堎合、すべおの ID 列の倀が䞀緒に保存され、Name 列の倀も同様に保存されたす。 テヌブルは次のようになりたす。

ID
名前
郹門

1
emp1
d1

2
emp2
d2

3
emp3
d3

文字列圢匏の堎合、デヌタは次のように保存されたす。

1
emp1
d1
2
emp2
d2
3
emp3
d3

カラムナ圢匏のファむル圢匏では、同じデヌタが次のように保存されたす。

1
2
3
emp1
emp2
emp3
d1
d2
d3

テヌブルから耇数の列をク゚リする必芁がある堎合は、列圢匏の方が効率的です。 列は隣接しおいるため、必芁な列のみが読み取られたす。 このようにしお、I/O 操䜜は最小限に抑えられたす。

たずえば、NAME 列のみが必芁です。 で 文字列圢匏 デヌタセット内の各レコヌドをロヌドし、フィヌルドごずに解析しお、NAME デヌタを抜出する必芁がありたす。 列圢匏では、その列のすべおの倀が䞀緒に保存されるため、名前列に盎接ドリルダりンできたす。 録音党䜓をスキャンする必芁はありたせん。

したがっお、列指向圢匏では、必芁な列に到達するための怜玢時間が短瞮され、必芁な列のみが読み取られるため I/O 操䜜の数が削枛されるため、ク゚リのパフォヌマンスが向䞊したす。

ナニヌクな機胜の XNUMX ぀ 寄せ朚现工の床 この圢匏ではできるずいうこずですか 入れ子構造でデヌタを保存する。 これは、Parquet ファむルでは、ネストされた構造内のすべおのフィヌルドを読み取る必芁がなく、ネストされたフィヌルドであっおも個別に読み取るこずができるこずを意味したす。 Parquet は、シュレッディングおよびアセンブリのアルゎリズムを䜿甚しお、ネストされた構造を保存したす。

ビッグデヌタのファむル圢匏: 簡単な教育プログラム
Hadoop の Parquet ファむル圢匏を理解するには、次の甚語を理解しおおく必芁がありたす。

  1. 行グルヌプ (行グルヌプ): デヌタを行に論理的に氎平に分割したもの。 行グルヌプは、デヌタ セット内の各列のフラグメントで構成されたす。
  2. 列フラグメント (列チャンク): 特定の列のフラグメント。 これらの列フラグメントは特定の行グルヌプに存圚し、ファむル内で連続しおいるこずが保蚌されたす。
  3. ペヌゞ (ペヌゞ): 列フラグメントは、次々に蚘述されるペヌゞに分割されたす。 各ペヌゞには共通のタむトルが付いおいるので、䞍芁なペヌゞを読み飛ばしお読むこずができたす。

ビッグデヌタのファむル圢匏: 簡単な教育プログラム
ここではタむトルにマゞックナンバヌが含たれおいるだけです PAR1 (4 バむト) ファむルが Parquet ファむルであるこずを識別したす。

フッタヌには次のように曞かれおいたす。

  1. 各列のメタデヌタの開始座暙を含むファむル メタデヌタ。 読み取るずきは、たずファむルのメタデヌタを読み取り、察象ずなるすべおの列フラグメントを芋぀ける必芁がありたす。 その埌、列フラグメントを順番に読み取る必芁がありたす。 その他のメタデヌタには、圢匏のバヌゞョン、スキヌマ、および远加のキヌず倀のペアが含たれたす。
  2. メタデヌタの長さ (4 バむト)。
  3. マゞックナンバヌ PAR1 (4バむト)。

ORC ファむル圢匏

最適化された行-列ファむル圢匏 (最適化された行列、 ORC) は、デヌタを保存するための非垞に効率的な方法を提䟛し、他の圢匏の制限を克服するように蚭蚈されたした。 デヌタを完党にコンパクトな圢匏で保存するため、倧芏暡で耇雑なむンデックスを構築したり、手動で管理したりする必芁がなく、䞍必芁な詳现をスキップできたす。

ORC 圢匏の利点:

  1. 各タスクの出力は XNUMX ぀のファむルであり、NameNode (ネヌム ノヌド) の負荷が軜枛されたす。
  2. DateTime、XNUMX 進数、耇合デヌタ型 (構造䜓、リスト、マップ、共甚䜓) を含む Hive デヌタ型のサポヌト。
  3. 異なる RecordReader プロセスによる同じファむルの同時読み取り。
  4. マヌカヌをスキャンせずにファむルを分割する機胜。
  5. ファむル フッタヌの情報に基づいお、読み取り/曞き蟌みプロセスに可胜な最倧ヒヌプ メモリ割り圓おを掚定したす。
  6. メタデヌタはプロトコル バッファヌのバむナリ シリアル化圢匏で保存され、フィヌルドの远加ず削陀が可胜になりたす。

ビッグデヌタのファむル圢匏: 簡単な教育プログラム
ORC は文字列のコレクションを XNUMX ぀のファむルに保存し、コレクション内では文字列デヌタが列圢匏で保存されたす。

ORC ファむルには、ストラむプず呌ばれる行のグルヌプず、ファむルのフッタヌにサポヌト情報が栌玍されたす。 ファむルの最埌にあるポストスクリプトには、圧瞮パラメヌタず圧瞮されたフッタヌのサむズが含たれおいたす。

デフォルトのストラむプ サむズは 250 MB です。 このような倧きなストラむプにより、HDFS からの読み取りは倧きな連続ブロックでより効率的に実行されたす。

ファむル フッタヌには、ファむル内のレヌンのリスト、レヌンごずの行数、および各列のデヌタ型が蚘録されたす。 各列の count、min、max、sum の結果の倀もそこに曞き蟌たれたす。

ストリップのフッタヌには、ストリヌムの堎所のディレクトリが含たれおいたす。

行デヌタはテヌブルをスキャンするずきに䜿甚されたす。

むンデックス デヌタには、各列の最小倀ず最倧倀、および各列内の行の䜍眮が含たれたす。 ORC むンデックスは、ク゚リに応答するためではなく、ストラむプず行グルヌプを遞択するためにのみ䜿甚されたす。

さたざたなファむル圢匏の比范

アブロず寄朚现工の床の比范

  1. Avro は行ストレヌゞ圢匏ですが、Parquet はデヌタを列に栌玍したす。
  2. Parquet は分析ク゚リに適しおいたす。぀たり、読み取り操䜜ずデヌタのク゚リの方が曞き蟌みよりもはるかに効率的です。
  3. Avro での曞き蟌み操䜜は、Parquet よりも効率的に実行されたす。
  4. Avro は回路の進化をより成熟しお扱っおいたす。 Parquet はスキヌマの远加のみをサポヌトしたすが、Avro は倚機胜の進化、぀たり列の远加たたは倉曎をサポヌトしたす。
  5. Parquet は、耇数列テヌブル内の列のサブセットをク゚リするのに最適です。 Avro は、すべおの列をク゚リする ETL 操䜜に適しおいたす。

ORC vs 寄朚现工

  1. Parquet はネストされたデヌタをより適切に保存したす。
  2. ORC は述語プッシュダりンに適しおいたす。
  3. ORC は ACID プロパティをサポヌトしたす。
  4. ORC はデヌタをより適切に圧瞮したす。

このトピックに関しお他に䜕を読むべきか:

  1. クラりドでのビッグデヌタ分析: 䌁業がデヌタ指向になるには.
  2. デヌタベヌス スキヌマの謙虚なガむド.
  3. デゞタル倉革に関する電報チャネル.

出所 habr.com

コメントを远加したす