歴史には偉大なライバルがたくさんいます: フランス vs. イギリス、巨人 vs. 阪神、ルパン vs. 銭形、マリオ vs. クッパ...。しかし、クラウド上の Apache Hadoop のデータストレージに関しては、HDFS(Hadoop 分散ファイルシステム)と Amazon の S3(Simple Storage Service)が最大のライバルです。

Apache Hadoop は従来、HDFS と連携していましたが、S3 は Hadoop のファイルシステム要件も満たしており、Netflix などの企業はこの互換性を利用して、HDFS ではなく S3 に情報を保存する Hadoop データウェアハウスを構築しています。

では、Hadoop のクラウドデータストレージとして、 HDFS よりも S3 の方がいいのでしょうか?HDFS と S3 の長所と短所を理解すべく、この技術的なライバル関係をバトルで解決しましょう!

その前に、S3 と HDFS の概要と、両者を区別するポイントについて見てみましょう。HDFS と S3 の主な違いは、以下の通りです:

  • 違い1:S3 は HDFS よりもスケーラブルである
  • 違い2:S3 は HDFS より耐久性がある
  • 違い3:S3 のデータは、HDFSのデータとは異なり、常に永続的である
  • 違い4:S3 は費用対効果が高く、HDFS よりも安い可能性が高い
  • 違い5:パフォーマンスに関しては HDFS が優れており、S3 を上回っている

HDFSとは

HDFS(Hadoop 分散ファイルシステム)は、Hadoop アプリケーションの主要なデータストレージシステムとして構築されました。Apache ソフトウェア財団のプロジェクトである HDFS は、コモディティハードウェア上で動作する分散型のフォールトトレラントファイルシステムを提供することを目的としています。

クラスタの HDFS 層は、「NameNode」とも呼ばれるマスターノード(制御する側)が1つ以上のスレーブノード(制御される側)を管理し、各ノードが DataNode のインスタンスを実行することで構成されています。『NameNode』 はデータの場所を追跡し、『DataNode』はこのデータの保存と取得を担当します。HDFS のファイルは自動的に複数のマシンにまたがって保存されるため、HDFS にはノードの障害やデータ損失から保護する冗長性が組み込まれています。

Amazon S3とは

Amazon S3(Simple Storage Service)は、AWS(Amazon Web Services)が提供するクラウドIaaS(Infrastructure as a Service:サービスとしてのインフラ)ソリューションで、便利なWebベースのインターフェースを介してオブジェクトストレージを提供します。Amazonによると、S3 には、「業界をリードするスケーラビリティ、データの可用性、セキュリティ、およびパフォーマンス 」という利点があります。

Amazon S3 の基本的なストレージ単位はオブジェクトで、関連する ID番号とメタデータを持つファイルから構成されます。そのオブジェクトは、フォルダやディレクトリと同様の機能を持つバケットに保存され、選択した AWS リージョン内に存在します。

1回戦 : スケーラビリティ(拡張性)

スケーラビリティをめぐる対決は、「水平方向のスケーラビリティ」と「垂直方向のスケーラビリティ」の問題に行き着きます。

HDFS は、水平方向に拡張するローカルストレージに依存しており、ストレージ容量を増やしたい場合は、既存のノードに大きなハードディスクを追加するか、クラスタにマシンを追加する必要があります。これは実現可能ですが、S3 よりもコストと手間がかかります。

S3 は、ユーザーの現在のデータ使用量に応じて垂直的かつ自動的に拡張し、ユーザー側でのアクションは必要ありません。さらに、Amazon はストレージに所定の制限を設けていないため、実質無限のスペースが利用できます。

結論:1回戦は、拡張性、柔軟性、弾力性に優れた S3 の勝ち。

2回戦: 耐久性

データの「耐久性」とは、クラウドデータストレージにおいて、ビット腐敗(ビットが経年劣化して、正しく読み取れなくなること)や破損に見舞われることなく、情報を長期的に保持する能力のことを指します。では、耐久性については、S3 と HDFS のどちらがいいのでしょうか?

HDFS のデータ耐久性に関する統計モデルによると、4,000ノードの大規模クラスタ(総ストレージ16ペタバイト、ブロックレプリカ250,736,598個)でデータブロック(デフォルトでは64メガバイト)を失う確率は、今後24時間で0.00000057 (5.7 x 10^-7) 、今後365日で0.00021 (2.1 x 10^-4) です。しかし、ほとんどのクラスタには数十個のインスタンスしかないため、データが失われる確率はもっとずっと高い可能性があります。

一方 S3 は、年間99.999999999%のオブジェクトの耐久性を提供します。これは、10,000,000個のオブジェクトに対して、10,000年に1回、1個のオブジェクトが失われる可能性があるということです(S3 の FAQ を参照)。

S3 ユーザーにとって、このニュースはさらに嬉しいものです。Integrat.io の同僚の一人が最近 AWS のワークショップを受けたのですが、Amazon の担当者は、サービスの全歴史を通じて、デフォルトの S3 ストレージで実際に1つのオブジェクトも失ったことがないと主張したと報告されています。(耐久性が99.99%の安価な低冗長化ストレージ(RRS)というオプションもあります)。

結論:これも S3 の勝ち。大規模なクラスタは耐久性に優れているかもしれませんが、ほとんどの場合、S3 は HDFS よりも耐久性に優れています。

3回戦: 永続性

クラウドデータストレージの世界における「永続性」とは、データ作成のプロセスが終了した後もデータが存続することを指します。

HDFS では、EC2 (Elastic Compute Cloud)や EMR (Elastic MapReduce)インスタンスを停止してもデータは永続化しませんが、EC2 上でデータを永続化するために、コストのかかる EBS(Elastic Block Store) ボリュームを使うことができます。

一方、S3 では、データは常に永続的です。 - というシンプルなものです。

結論:S3 がこのラウンドでトップに立っています:S3 はすぐに使えるデータ永続性を備えていますが、HDFS はそうではありません。

4回戦: 価格

データの整合性を保つために、HDFS はデフォルトで各ブロックのデータのコピーを3つ保存します。これはまさに言葉通りです: HDFS はデータの保存に3倍の容量が必要であり、したがってコストは3倍かかります。3重のデータレプリケーションを有効にする必要はありませんが、コピーを1つだけ保存することは非常にリスクが高く、データ損失の危険にさらされることになります。

対するAmazon は S3 上でデータのバックアップを行うため、実際に必要なストレージのみを購入することができます。また、S3 は圧縮ファイルの保存にも対応しており、それによってストレージのコスト削減ができます。

S3 のもう一つの利点は、データの保存やアクセス方法に応じて、様々な価格のストレージクラスが複数用意されていることです。例えば、「標準」クラスは汎用的なストレージ向けで、安価な「Glacier」クラスは頻繁にアクセスしない長期間のバックアップやアーカイブ向けとなります。

結論:この点では、ストレージのオーバーヘッドコストが低い S3 の勝ちは明らか。

5回戦: パフォーマンス

これまでのところ、HDFS と S3 の比較は、【スケーラビリティ】、【耐久性】、【永続性】、そして【価格】の4項目において、S3 の圧勝であり、勝負になっていません。でもパフォーマンスの問題はどうでしょうか?

耳寄り情報として、HDFS のパフォーマンスが優れている点があります。データは同じマシンに保存されて処理されるため、アクセスや処理速度は光の速さです。

一方、残念ながら S3 は HDFS ほどの性能はありません。レイテンシは明らかに高く、データのスループットは低くなります。ただし、Hadoop のジョブは大体マップ還元ジョブの連鎖で構成され、中間データは HDFS とローカルファイルシステムに保存されるため、Amazon S3 からの読み込み又は書き込み以外では、ノードのローカルディスクのスループットが得られます。


ちなみに先日、Hadoop の読み書きテストユーティリティである TestDFSIO を、1ノードあたり4つの揮発性ディスクのデバイスがある m1.xlarge インスタンスのクラスタでいくつかテストしてみましたが、その結果、HDFS の方が性能が高いことが確認されました:

結論:その強力なオールラウンドパフォーマンスにより、最終的に HDFS がこのラウンドの勝者。

6回戦: セキュリティ

HDFS は安全じゃないと思っている人がいますが、それはよくある誤解です。Hadoop は Kerberos によるユーザー認証と、ファイルシステムのパーミッションによる認可を提供しています。Hadoop YARNでは、これをさらに推し進め、クラスタをいくつかのネームスペースに分割し、ユーザーがアクセスすべきデータのみに制限する「フェデレーション」という新機能が搭載されました。また、データは SSL 経由で安全に Amazon インスタンスにアップロードされます。

S3 はセキュリティも内蔵されており、データアクセスを制御するためのユーザー認証に対応しています。最初は、バケットとオブジェクトの所有者のみがデータにアクセスでき、バケットポリシーACL(アクセスコントロールリスト)により、ユーザーやグループにさらなる権限を付与することができます。また、S3 では SSL でデータを暗号化して安全にアップロードできます。

結論:HDFS も S3 も強固なセキュリティ対策が施されているということで引き分け。

7回戦: 制限事項

HDFS はあらゆるサイズのファイルを保存できますが、小さなファイルを保存する際の問題については十分に文書化されており、それらは Hadoop アーカイブに連結または統合されるはずです。(「小さなファイルの問題」については、コチラの記事で詳しく説明しています(英語))。また、HDFS で特定のクラスタに保存されたデータは、そのクラスタ上のマシンだけが利用でき、クラスタ外のインスタンスでは利用できません。

それに対して S3 の場合、データは Hadoop クラスターに依存せず、多くのクラスターでの同時処理が可能です。ただし、S3 上のファイルには制限がいくつかあります。最大ファイルサイズは5ギガバイトで、ParquetやORCなどの追加の Hadoop ストレージ形式は S3 では使えません。これは、Hadoop がこのようなファイル内の特定のバイトへのアクセスが必要なためで、S3 では提供されていない能力です。

結論:これも引き分け:HDFS と S3 のどちらにも制限があるというのは、両者のどちらかを選ぶ前に知っておくべきですね。

HDFS と S3: 勝者は?

より優れたスケーラビリティ、内蔵の永続性、そして低価格で、今回の勝者はS3 です!でも HDFS も重要な賞をいくつか獲得しています。より良いパフォーマンスと、ファイルサイズやストレージフォーマットの制限のない HDFS だっていい感じですよね。

ただ、HDFS を使うにせよ Amazon S3 を使うにせよ、データストレージとデータ送信先の統合を支援する、成熟した機能豊富なデータ統合プラットフォームが必要ですが、幸い、遠くまで探しに行く必要はありません。ソースとクラウドデータウェアハウスやデータレイク間のデータパイプラインを簡単に構築できる、強力で高度に安全な ETL ソリューションである Integrat.io があります。

Integrat.ioのノーコード、ドラッグ&ドロップの UI により、組織の誰でも洗練されたデータ統合パイプラインのデザインや導入ができます。さらに、Integrat.ioには140以上のコネクタがあらかじめ用意されており、事実上あらゆるソースとデスティネーションに接続できます。

Integrat.ioが、組織のデータ活用をより良く、よりスマートにするためにどのようなお手伝いができるかをご覧になりませんか?ビジネス ニーズと目標についてのお問い合わせや、 Integrat.io プラットフォームの 7 日間のパイロットをご希望の方は、ぜひコチラまでご連絡ください。また、Integrat.io のブログでは、ETL やデータ統合に関するトピックもご紹介しています。