HDFSについて
Hadoopとは?
HDFSとはHadoopで採用されているファイル管理システムなんですが、そもそもHadoopとはなんぞやという状況だったので、そこから軽くまとめます。
Hadoopとはざっくり言うと、
非構造な大規模データの処理・格納を高速に行うためのフレームワーク
です。(非構造データとは、画像やテキストなどの定型データとして扱えないデータのことです)
ビッグデータ(ex. Petabytes規模のデータ)を処理するためには単一のサーバーだけでは処理しきれないため、複数のサーバーを使用してデータの保存・処理をすることが考えられました。
しかし、ただ単に複数サーバーに分散しようとすると、データをどのように保存するか・どのサーバーに処理を任せるか・障害の場合はどのように対応するかなど、サーバーの管理が大変です。
そこで、それらの管理・実行を簡単にするフレームワークとして考えられた一つがHadoopです。
どのようにデータを管理しているのか
Hadoopではデータ管理にHDFS(Hadoop Distributed File System)という方式を採用しています。平たく言うと、複数のサーバーにばらばらにデータを配置しています
しかし、ただバラバラに配置しているだけではデータの管理が大変なので、以下のようなマスタースレーブ方式をとっており、大きく三つから構成されています
- Hadoopクライアント
- NameNode
- データがどこに格納されているかを記録しているサーバー
- データ自体は保存していない
- DataNode
- 実際にデータを格納しているサーバー
- NameNodeに対して、一定時間ごとに自身の状況を報告している(ハートビート)
データの分割はキリが良いところではなく、”64MBごと”みたいな感じで分割します。
例えば文章を保存する場合でも、文字の途中で分割するということももちろんあり得ます。
サーバーに障害が起こった場合は?
もちろん、サーバーに障害が起こることを想定しており、障害が起こったサーバーごとに対策方法を見ていきます
DataNodeに障害が起こった場合
Hadoopでは同じデータを複数のDataNodeに保管しているため、一つのDataNodeに障害が起こった場合にも対応できます。
そして、障害が起こったDataNodeに保管されていたデータについては、自動的に新たに違うDataNodeに複製が行われます。(レプリケーション機能)
NameNodeに障害が起こった場合
データをどこに保存しているか記録しているNameNodeに障害が起こるとHDFS自体が動かなくなってしまうので、複製したSecondary NameNodeを配置する方法で、対策を行うこともあります。
HDFSのメリット・デメリット
メリット
デメリット
- 単一障害点(SPOF)がある
- 主にNameNodeのことなんですが、通常のファイルサーバーに比べてデータが消滅しやすいです。なので、ファイルサーバーとしては使用しない方が良いそうです
- データをピンポイントで更新・削除ができない
- データ容量の区切りが良いところで保存している関係上、複数のサーバーにまたがって一区切りのデータを保存していることがあり得るため、ピンポイントでの更新・削除はできない仕様になっています
次回は、Hadoopで使われている大規模データの並列分散処理のアルゴリズムであるMapReduceについて、まとめてみたいと思います。
最後に
Hadoopについて学ぶ時に、以下の書籍・資料が非常に分かりやすかったので、詳しく勉強したい・この記事じゃ分からんって人は、以下の資料を見てみることをお勧めします。
- 書籍
- 資料