minminの備忘録

フルスタックになりたいエンジニアの備忘録 → https://zuminblog.com/ へ引越し中

HDFSについて

Hadoopとは?

HDFSとはHadoopで採用されているファイル管理システムなんですが、そもそもHadoopとはなんぞやという状況だったので、そこから軽くまとめます。

Hadoopとはざっくり言うと、

非構造な大規模データの処理・格納を高速に行うためのフレームワーク

です。(非構造データとは、画像やテキストなどの定型データとして扱えないデータのことです)

ビッグデータ(ex. Petabytes規模のデータ)を処理するためには単一のサーバーだけでは処理しきれないため、複数のサーバーを使用してデータの保存・処理をすることが考えられました。

しかし、ただ単に複数サーバーに分散しようとすると、データをどのように保存するか・どのサーバーに処理を任せるか・障害の場合はどのように対応するかなど、サーバーの管理が大変です。

そこで、それらの管理・実行を簡単にするフレームワークとして考えられた一つがHadoopです。

どのようにデータを管理しているのか

Hadoopではデータ管理にHDFS(Hadoop Distributed File System)という方式を採用しています。平たく言うと、複数のサーバーにばらばらにデータを配置しています

しかし、ただバラバラに配置しているだけではデータの管理が大変なので、以下のようなマスタースレーブ方式をとっており、大きく三つから構成されています

  • Hadoopクライアント
    • Hadoopクラスタとクライアント(User)の仲介役
    • ここのおかげでクライアントからは複数のサーバーを一つのクラスタのように扱うことができる
  • NameNode
    • データがどこに格納されているかを記録しているサーバー
    • データ自体は保存していない
  • DataNode
    • 実際にデータを格納しているサーバー
    • NameNodeに対して、一定時間ごとに自身の状況を報告している(ハートビート)

f:id:minmin_21:20190819184212p:plain
HDFS

データの分割はキリが良いところではなく、”64MBごと”みたいな感じで分割します。
例えば文章を保存する場合でも、文字の途中で分割するということももちろんあり得ます。

サーバーに障害が起こった場合は?

もちろん、サーバーに障害が起こることを想定しており、障害が起こったサーバーごとに対策方法を見ていきます

DataNodeに障害が起こった場合

Hadoopでは同じデータを複数のDataNodeに保管しているため、一つのDataNodeに障害が起こった場合にも対応できます。
そして、障害が起こったDataNodeに保管されていたデータについては、自動的に新たに違うDataNodeに複製が行われます。(レプリケーション機能)

NameNodeに障害が起こった場合

データをどこに保存しているか記録しているNameNodeに障害が起こるとHDFS自体が動かなくなってしまうので、複製したSecondary NameNodeを配置する方法で、対策を行うこともあります。

HDFSのメリット・デメリット

メリット

  • 大規模なデータを比較的簡単に保存できる
  • 大量のデータを高スループットで読み込める
    • 読み込みは得意ですが、書き込みは得意ではありません
  • 冗長化が簡単にできるため、データの安全性を確保しやすい

デメリット

  • 単一障害点(SPOF)がある
    • 主にNameNodeのことなんですが、通常のファイルサーバーに比べてデータが消滅しやすいです。なので、ファイルサーバーとしては使用しない方が良いそうです
  • データをピンポイントで更新・削除ができない
    • データ容量の区切りが良いところで保存している関係上、複数のサーバーにまたがって一区切りのデータを保存していることがあり得るため、ピンポイントでの更新・削除はできない仕様になっています

次回は、Hadoopで使われている大規模データの並列分散処理のアルゴリズムであるMapReduceについて、まとめてみたいと思います。

最後に

Hadoopについて学ぶ時に、以下の書籍・資料が非常に分かりやすかったので、詳しく勉強したい・この記事じゃ分からんって人は、以下の資料を見てみることをお勧めします。

参考