Tech Blog 〜ぞうの日記

HadoopやLinux関連の技術的な内容の紹介です

HDFSが変わる?HDFSのイレイジャーコーディング対応

※このブログは本家(http://linux.wwing.net)のバックアップコピーです

Hadoop分散ファイルシステムであるHDFSビッグデータ用のストレージ用に広く利用され、ビッグデータにおけるファイルシステムデファクトスタンダードになっていると言っても過言ではありません。最近では暗号化の対応アクセス制御(ACL)NFSv3への対応など、セキュリティの強化や利便性の向上なども進化しています。

このように進化を続けているHDFSですが、現在開発が進んでいる機能のひとつにイレージャーコーディングへの対応というものがあります。

HDFS-7285:Erasure Coding Support inside HDFS

イレージャーコーディングとはソフトウェアエンジニアには耳慣れない言葉ですが、興味深かったのでまとめてみました。

HDFSの耐障害性

HDFSはスレーブノードであるデータノードでデータ(ブロック)の複製を行う(通常は3複製:設定可能)ことにより、ノードやディスク障害時のデータの損失に耐える設計となっています(※マスターの障害は高可用性で対応する)。

ノードの障害時には正常なノードのブロックを他のノードに自動的に複製し、高い耐障害性を持ちます。

複数のノードでデータを持つメリットもあり、MapReduceやSpark、Impalaなどが分散処理を行う際に、データを持つノードで処理できる機会が増え、可用性が向上します。(データのローカリティ:局所性)

しかし、デフォルトで3カ所のノードに複製(コピー)を持つためには多くのディスク領域を用意しておかなければなりません。例えば1TBのデータを保存するには3TB分が必要となってしまいます。加えて、複製されたブロックがどこにおかれているかなどのメタ情報管理に必要な、ネームノードのメモリ使用量も増えてしまいます。

イレージャーコーディング

ディスクの耐障害性のために広く利用されているRAIDでは、耐障害性のためにRAID-1やRAID-5などの技術を用いていますが、RAIDの再構成中に起こる障害や、再構成には長時間かかるなどのいくつかの問題があります。(参考文献[1]) そこで考案されたのが参考文献[5]にある、RAIDパラダイムシフトのErasure coding(イレイジャーコーディング)です。

イレージャーコーディングとは「消失訂正符号」を指し、消失したビット列を復元するために使用される技術です。(参考[3],[4],[5])

参考文献[5]によると、イレージャーコーディングではデータセットを認識不能な細かいチャンクにわけ、各チャンクには復元に必要な情報を付与しておきます。この情報チャンクをクラスタ内のノードに分散しておき、障害があった場合は複数のチャンクから復元に必要な情報を利用して、元のデータセットを復元します。消失訂正符号があることで、デバイス、サーバ、HDD、ネットワークなど、システム全体で複数の障害が発生した場合でもリアルタイムにデータにアクセスできるようです。

HDFSでのイレージャーコーディング(HDFS-EC)

HDFSではデフォルトで複数3カ所にブロックをコピーしていますが、通常の操作でこれらの3カ所全てのブロックにアクセスすることは稀です。イレージャーコーディングでは複製を減らすことにより、必要なストレージ領域のオーバーヘッドを減らすことができます。HDFSのデフォルトの複製数は3のため200%のオーバーヘッドが生じますが、イレージャーコーディングにすることで50%以下になります。(参考 [6])

HDFS-ECのユースケース

  • 容量の節約
    • ユーザーがヒントを与えることで、ホットなデータセットは複製する
  • 高可用性と永続性
    • 読み取りパスでのPssive recovery
    • バックグラウンドでのActive recovery
  • 動的なデータのアクセスパターン
    • コールドなデータセットがホットになったら2番目のレプリカを再生成する
  • 書き込みパスでのI/O帯域を節約
  • 複数スピンドル(ディスク)のレバレッジ
  • 地理的複製(Geo-distributed)でのディザスタリカバリ

HDFS-ECの目標

  • 現実的な容量の節約
    • 目標はストレージのオーバーヘッドを33%にする
  • 柔軟性のあるポリシー
    • ユーザーや管理者はデータに対して「ホット」「コールド」のようなタグ、プライオリティをつけられる
  • 高速なリカバリ、変更
  • 書き込みパスでのI/O帯域の節約
  • 低いオーバーヘッド
  • トランスペアレンシー/コンパチビリティ
    • イレージャーコーディング上のデータもHDFSキャッシング、スナップショット、暗号化、追記などが使用できるなければならない

現段階でのHDFS-ECの目標範囲外

  • 地理的複製

まとめ

HDFSは3つの複製を持つ、というシンプルな仕組みが大きく変わりそうですね。しかしイレージャーコーディングによって必要なディスク容量の削減ができ、ホットなデータのための対応もされ、将来的にはディザスタリカバリにも活用できそうな、かなり強力な仕様変更に思えます。 詳細は設計ドキュメント[6]に記述されているので、興味のある方はご覧下さい。

参考資料

[1] http://www.jdsf.gr.jp/backup/stm/201006.html

[2] http://www.jdsf.gr.jp/backup/stm/201007.html

[3] http://raven.air-nifty.com/night/2011/01/erasure-coding.html

[4] http://seesaawiki.jp/w/kou1okada/d/Erasure%20Code

[5] http://en.wikipedia.org/wiki/Erasure_code

[6] https://issues.apache.org/jira/secure/attachment/12697210/HDFSErasureCodingDesign-20150206.pdf