検索
特集/連載

失敗から成功まで、HDFSでRAIDを利用するFacebookの挑戦バグや失敗をどう解決した?

FacebookはHadoop分散ファイルシステムにRAIDを展開して、容量削減を実現した。だが、当初は期待通りに削減できず、データの破損に悩まされた。彼らはいかにして課題を解決したのだろうか。

Share
Tweet
LINE
Hatena

 米Facebookは2013年、大規模なHadoop分散ファイルシステム(HDFS)にRAIDを展開して、空き容量を数十Pバイト増やすと同時にデータの複製(レプリケーション)処理を減らした。しかしこのプロジェクトを進める間に、同社のエンジニアリングチームはデータの破損や大規模なディレクトリシステム全体にわたるRAIDの実装に苦戦するなど、数多くの課題に直面した。

 同社が今回実装したテクノロジーの例として、HDFS内のErasure Codingが挙げられる。これによってHDFSでデータの複製が発生する要因を減らしている。

 RAID(Redundant Array of Independent Disks)は、同一のデータを複数のHDDに保存する(すなわち冗長性を持たせる)手法である。HDFSは、Hadoopが使用するプライマリストレージシステムだ。HDFSはHadoopクラスタ全体にわたって、データへのアクセスについて高いパフォーマンスを実現する。また、ビッグデータの管理とビッグデータのアナリティクスをサポートしているという点で、HDFSは重要なツールとして大規模組織からの注目を集めている。

 HDFSで複製できるファイルは、デフォルトでは3つまでとなっている。Facebookのエンジニアリングチームによると、この制約のためにメディア容量の大きなオーバーヘッドが発生することがあったという。そこで同社はHDFSのRAIDテクノロジーを活用し、データの複製の実行回数を減らすとともに、使用する領域のオーバーヘッドを減らすことにも成功した。

 「2013年、当社のデータウェアハウスのHDFSクラスタに全面的にRAIDを展開した。クラスタでデータの複製が発生する要因を減らすことで、2013年末までに数十Pバイトのメディア容量を節減できた」と、Facebookのエンジニアリングチームは同社の公式ブログに投稿している。

 ただし、数百Pバイトの大規模なHDFSクラスタにRAIDを展開する過程で、Facebookは幾つもの課題に直面した。「そこでわれわれが学んだ教訓を共有したいと思った」と、同社エンジニアリングチームはブログに記している。

メディア容量を節約する工夫

 FacebookがRAIDを本番環境に展開した当初、節減できたメディアの容量は予測よりもずっと少なかった。「調査の結果、RAIDに深刻な問題があることが分かった。われわれは『微小ファイル問題』の洗礼を受けた」とエンジニアはブログに記している。

 エンジニアリングチームは、ファイルサイズが論理ブロック10個程度の場合に、容量の節減効果が最も大きくなることを発見した。それよりもファイルが小さくなると、容量削減の効果は落ちる。2ブロック以下のファイルでは、RAIDの容量削減効果は全くなくなる。

 同チームの分析では、本番環境のクラスタに保存されているファイルのうち50%以上が、その小さすぎる(2ブロック以下の)ファイルだった。

 この問題の解決策として、ITチームは複数ブロックをまとめてグループ化した。「微小ファイル問題への対策として、ある単純な観察結果から発想を得て、ディレクトリRAIDを開発した。その観察結果とは、(Hadoop MapReduceのツールである)Hiveを使用していると、リーフディレクトリ下のファイルは、作成後ほとんど変更されないということだ。だとすると、リーフディレクトリ全体を1つのファイルとして扱えばファイルのサイズが(見かけ上は)大きくなる。そのファイルをRAIDに展開すればいいと考えた」(エンジニアリングチームのブログ投稿記事より)

データ破損の防止策

 HDFSでRAIDを利用する際のもう1つの課題として、RAIDの再構築ロジックにバグがあるために、データが壊れるというものがあった。




*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***






Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る