sql >> データベース >  >> RDS >> Database

Hadoop入出力システムを理解する

    他のI/Oサブシステムとは異なり、Hadoopには一連のプリミティブも付属しています。これらの原始的な考慮事項は、本質的に一般的ですが、もちろん、HadoopIOシステムにもいくつかの特別な意味があります。 Hadoopは数テラバイトのデータセットを処理します。これらのプリミティブに関する特別な考慮事項により、Hadoopがデータの入力と出力をどのように処理するかがわかります。この記事では、これらのプリミティブをすばやくざっと見て、Hadoop入出力システムの概要を説明します。

    データの整合性

    データの整合性 つまり、データは、保存、処理、および取得の操作全体にわたって正確で一貫性を保つ必要があります。永続化および処理中にデータが失われたり破損したりしないようにするために、Hadoopは厳格なデータ整合性制約を維持します。すべての読み取り/書き込み操作はディスクで発生するため、ネットワークを介してエラーが発生する可能性が高くなります。また、Hadoopが処理するデータの量は、状況を悪化させるだけです。破損したデータを検出する通常の方法は、チェックサムを使用することです。 チェックサム データが最初にシステムに入力されたときに計算され、取得プロセス中にチャネルを介して送信されます。取得側はチェックサムを再度計算し、受信したチェックサムと照合します。完全に一致する場合、データにはエラーがないと見なされ、そうでない場合はエラーが含まれます。しかし、問題は–送信されたチェックサム自体が破損している場合はどうなるでしょうか。これは小さなデータであるため、ほとんどあり得ませんが、否定できない可能性はありません。状況を緩和するために、ECCメモリなどの適切な種類のハードウェアを使用できます。

    これは単なる検出です。したがって、エラーを修正するために、CRC(Cyclic Redundancy Check)と呼ばれる別の手法が使用されます。

    Hadoopはそれをさらに進め、512(デフォルト)バイトのデータごとに個別のチェックサムを作成します。 CRC-32は4バイトのみであるため、ストレージのオーバーヘッドは問題になりません。システムに入力されるすべてのデータは、ストレージまたはさらなる処理のために転送される前に、データノードによって検証されます。データノードパイプラインに送信されたデータはチェックサムによって検証され、見つかった破損はすぐに ChecksumExceptionでクライアントに通知されます。 。データノードから読み取られたクライアントも同じドリルを実行します。データノードは、チェックサム検証のログを維持して、検証されたブロックを追跡します。ログは、クライアントからブロック検証成功信号を受信すると、データノードによって更新されます。このタイプの統計は、不良ディスクを寄せ付けないようにするのに役立ちます。

    これとは別に、ブロックストアでの定期的な検証は DataBlockScannerの助けを借りて行われます。 バックグラウンドでデータノードスレッドと一緒に実行されます。これにより、物理ストレージメディアの破損からデータが保護されます。

    Hadoopは、データのコピーまたはレプリカを維持します。これは特に、大規模な破損からデータを回復するために使用されます。クライアントがブロックの読み取り中にエラーを検出すると、 ChecksumException をスローする前に、ネームノードから不良ブロックについてデータノードにすぐに報告します。 。次に、namenodeはそれを不良ブロックとしてマークし、そのブロックへのそれ以上の参照をそのレプリカにスケジュールします。このようにして、レプリカは他のレプリカとともに維持され、マークされた不良ブロックがシステムから削除されます。

    Hadoop LocalFileSystemで作成されたすべてのファイル 、拡張子が .crcの同じディレクトリにある同じ名前の隠しファイル 創造された。このファイルは、ファイル内のデータの各チャンク(512バイト)のチェックサムを維持します。メタデータの保守は、 ChecksumExceptionをスローする前に読み取りエラーを検出するのに役立ちます LocalFileSystemによる 。

    圧縮

    Hadoopが処理するデータの量を念頭に置くと、圧縮は贅沢ではなく要件です。 Hadoopで正しく使用されるファイル圧縮には多くの明らかな利点があります。ストレージ要件を節約し、ネットワークとディスクを介したデータ転送を高速化するための必須機能です。 Hadoopで一般的に使用されるツール、手法、アルゴリズムはたくさんあります。それらの多くは非常に人気があり、長年にわたってファイル圧縮に使用されてきました。たとえば、gzip、bzip2、LZO、zipなどがよく使用されます。

    シリアル化

    構造化オブジェクトをバイトのストリームに変換するプロセスは、シリアル化と呼ばれます。 。これは、ネットワークを介したデータ送信またはディスク内の生データの永続化に特に必要です。 逆シリアル化 これは、バイトのストリームが構造化オブジェクトに変換される逆のプロセスです。これは、rawバイトのオブジェクト実装に特に必要です。したがって、分散コンピューティングがプロセス間通信とデータの永続性という2つの異なる領域でこれを使用することは驚くべきことではありません。

    Hadoopは、RPC(リモートプロシージャコール)を使用して、ノード間のプロセス間通信を実行します。したがって、RPCプロトコルは、シリアル化と逆シリアル化のプロセスを使用してメッセージをバイトストリームにレンダリングし、その逆も同様で、ネットワークを介して送信します。ただし、プロセスは、ネットワーク帯域幅を最大限に活用できるほどコンパクトである必要があります。また、時間の経過に伴うプロトコルの更新に対応できるように、高速で相互運用性があり、柔軟性が必要です。

    Hadoopには、独自のコンパクトで高速なシリアル化形式である Writables があります。 、MapReduceプログラムがキーと値型を生成するために使用します。

    ファイルのデータ構造

    特殊なタイプのデータを保持するためにHadoopの特殊なデータ構造を詳しく説明する高レベルのコンテナーがいくつかあります。たとえば、バイナリログを維持するには、 SequenceFile コンテナは、バイナリのキーと値のペアを永続化するためのデータ構造を提供します。次に、 LongWritableで表されるタイムスタンプなどのキーを使用できます。 書き込み可能による値 、ログに記録された数量を指します。

    別のコンテナ、 SequenceFileのソートされた派生があります 、 MapFileと呼ばれます 。キーによる便利なルックアップのインデックスを提供します。

    これらの2つのコンテナーは相互運用可能であり、相互に変換できます。

    結論

    これは、Hadoopの入出力システムの概要です。以降の記事で、多くの複雑な詳細を掘り下げます。一般的なI/Oシステムの基本を理解していれば、Hadoop入出力システムを理解することはそれほど難しくありません。 Hadoopは、大規模なデータで機能する分散型の性質に対応するために、追加のジュースを追加するだけです。それだけです。

    参照

    ホワイト、トム。 Hadoop、決定的なガイド、2009年 。 O’ReillyPublications。


    1. MySQLまたはMariaDBサーバーの本番環境への準備-パート1-

    2. MariaDBで照合を表示する

    3. MySQLで英数字以外の文字のみを含む行を返す2つの方法

    4. SQLクエリから最初と最後のレコードを取得するにはどうすればよいですか?