Hadoop 分散ファイルシステム(HDFS)
HDFS
HDFS ( Hadoop 分散ファイルシステム)は、 Hadoop アプリケーションで使用される主要なストレージシステムです。このオープンソースのフレームワークは、ノード間のデータ転送を高速に行うことで動作します。ビッグデータを取り扱い、保存する必要のある企業でよく利用されています。HDFS は、ビッグデータを管 理し、ビッグデータ解析をサポートする手段として、多くの Hadoop システムにおいて重要なコンポーネントとなっています。
HDFS を利用している企業は世界中にたくさんありますが、 HDFS とは一体何なのでしょうか。また、なぜ必要なのでしょうか。ここでは、 HDFS とは何か、なぜ企業にとって有用なのかについて深く掘り下げていきます。
HDFS とは
HDFS は、 Hadoop Distributed File System ( Hadoop 分散ファイルシステム)の頭文字を取った略語で、コモディティハードウェア上で実行するように設計された分散ファイルシステムです。
HDFS は、耐障害性を備えており、低コストのハードウェアに導入できるように設計されています。HDFS は、アプリケーションデータへの高スループットを提供し、大規模なデータセットを持つアプリケーションに適しています。また、Apache Hadoop のファイルシステムデータへのストリーミングアクセスを可能にします。
では、 Hadoop とは何でしょうか。また、 HDFS とどう違うのでしょうか。Hadoop と HDFS の最も大きな違いは、 Hadoop がデータの保存、処理、分析ができるオープンソースのフレームワークであるのに対し、 HDFS はデータへのアクセスを提供する Hadoop のファイルシステムである点です。これは、本質的に HDFS が Hadoop のモジュールであることを意味します。
HDFS のアーキテクチャについて見ていきましょう。
NameNodes と DataNodes にフォーカスしています。NameNodeは、GNU/Linux のオペレーティングシステムとソフトウェアを搭載したハードウェアです。Hadoop の分散ファイルシステムはマスターサーバーとして、ファイルの管理、クライアントのファイルへのアクセス制御、ファイルのリネーム、オープン、クローズなどの海外向けファイル操作処理を行うことができます。
DataNode は、 GNU/Linux オペレーティングシステムと DataNode ソフトウェアを搭載したハードウェアです。HDFS クラスタの各ノードには、 DataNode が配置されます。これらのノードは、クライアントからの要求があればファイルシステムに対する操作を実行し、 NameNode からの指示があればファイルの作成、複製、ブロックなどを行い、システムのデータ保存を制御するのに役立ちます。
HDFS の意味と目的は、以下の目標を達成することです。
- 大規模なデータセットの管理 - データセットの整理と保存は、扱うのが難しい話です。HDFS は、巨大なデータセットを扱うアプリケーションを管理するために使用されます。そのためには、 HDFS は 1 クラスタあたり数百のノードを持つ必要があります。
- 故障検知 - HDFS には多数のコモディティハードウェアが含まれているため、迅速かつ効果的に故障をスキャンして検出する技術を備えている必要があります。部品の故障はよくあることです。
- ハードウェア効率 - 大規模なデータセットが含まれる場合、ネットワークトラフィックを削減し、処理速度を向上させることができます。
HDFS の歴史
Hadoop の原点とは。HDFS の設計は、Google File System がベースになっています。開発当初は、Web 検索エンジンプロジェクトの Apache Nutch のインフラとして構築され、その後、Hadoop エコシステムに組み込まれました。
インターネットが普及し始めた頃、人々がウェブページの情報を検索する手段として、ウェブクローラーが登場し始めました。その結果、Yahoo や Google などさまざまな検索エンジンが誕生しました。
また、「 Nutch 」という別の検索エンジンを作り、データや計算を複数のコンピュータに同時に分散させたいと考えていました。その後、 Nutch は Yahoo に移り、2つに分かれました。今では、Apache Spark と Hadoop はそれぞれ別の存在となっています。Hadoop がバッチ処理を前提に作られているのに対し、 Spark はリアルタイムのデータを効率的に扱えるように作られています。
現在、Hadoop の構造やフレームワークは、ソフトウェア開発者と貢献者のグローバルなコミュニティであるApacheソフトウェア財団によって管理されています。
HDFS はここから生まれたもので、ハードウェアのストレージソリューションを、より優れた、より効率的な方法、つまり仮想ファイリングシステムに置き換えることを目的としています。MapReduce が登場した当初は、 MapReduce が HDFS を利用できる唯一の分散処理エンジンでした。最近では、 HBase や Solr といった Hadoop の代替データサービスコンポーネントも、データの保存に HDFS を利用しています。
ビッグデータの世界における HDFS とは
では、ビッグデータとは何 で、そこに HDFS はどのように関わってくるのでしょうか。ビッグデータとは、保存、処理、分析が困難なデータ全般を指す言葉です。HDFS ビッグデータとは、 HDFS ファイリングシステムに整理されたデータです。
Hadoop は、ご存知の通り、並列処理と分散ストレージを利用して動作するフレームワークです。従来の方法では保存できないようなビッグデータを分類して保存するのに利用できます。
実際、ビッグデータを扱うソフトウェアとして最もよく使われており、 Netflix 、 Expedia 、 British Airways などの企業が、データストレージとしてポジティブにHadoop と関係を築き サービスを利用しています。ビッグデータにおける HDFS は、現在多くの企業がデータの保存方法として選択しているため、極めて重要です。
HDFS のサービスによって整理されたビッグデータの中核となる5つの要素があります。
- 頻度 - データの生成、照合、解析の速さ。
- 量 - 生成されるデータ量。
- 種類 - 構造化されたもの、非構造化されたものなど様々データの種類。
- 真実性 :データの品質と正確さ。
- 価値 - このデータを使って、どのようにビジネスプロセスに洞察をもたらすことができるのか。
Hadoop 分散ファイルシステムのメリット
Hadoop のオープンソースサブプロジェクトである HDFS は、ビッグデータを扱ううえで 5 つの主要なメリットを提供します。
- 耐障 害性:HDFS は障害を検知して自動的に回復するように設計されており、システムの継続性と信頼性を確保します。
- 処理スピード:クラスタアーキテクチャにより、2 GB/秒のデータを維持できます。
- データアクセス:より多くの種類のデータ、特にストリーミングデータへのアクセスが可能です。バッチ処理で大量のデータを処理するように設計されているため、高いデータスループット率を実現し、ストリーミングデータを扱うのに適しています。
- 互換性および移植性:HDFS は、さまざまなハードウェアに移行できるように設計されており、複数のオペレーティングシステムと互換性があるため、ユーザーは任意のセットアップで HDFS を利用できます。互換性および移植性は、ビッグデータを扱う際に極めて重要であり、HDFS の特殊なデータ処理方法によって実現しています。互換性および移植性は、ビッグデータを扱う際に極めて重要であり、HDFS の特殊なデータ処理方法によって実現しています。
このグラフは、ローカルファイルシステムと HDFS の違いを示しています。
- 拡張性:ファイルシステムのサイズに応じて、リソースをスケーリングできます。HDFS には、垂直方向および水平方向へのデータ拡張の仕組みがあります。
- データロケリティ:Hadoop のファイルシステムに関しては、データが計算ユニットのある場所に移動するのとは対照的に、データはデータノードに常駐しています。データと演算処理の距離を短くすることで、ネットワークの混雑を減らし、より効果的・効率的なシステムを実現することができるのです。
- 費用対効果:当初、データというと、高価なハードウェアや帯域を占有するイメージを持つかもしれません。ハードウェアの故障は、その修理に多大なコストがかかります。HDFS では、データは仮想のまま安価に保存されるため、ファイルシステムのメタデータとファイルシステムの名前空間のデータ保存コストを大幅に削減することができます。さらに、HDFS はオープンソースであるため、ライセンス料を支払う心配はありません。
- 大容量のデータ保存:データの保存は HDFS のすべてであり、あらゆる種類と規模のデータを意味しますが、特にデータの保存に苦労している企業が保有する大量のデータを意味します。これには、構造化されたデータと非構造化データの両方が含まれます。
- 柔軟性:従来のストレージデータベースとは異なり、収集したデータを保存する前に処理する必要がありません。データを好きなだけ保存でき、また、そのデータをどう使うかは、後で自由に決めることができます。また、これには、テキスト、ビデオ、画像などの非構造化データも含まれます。
HDFS の使い方
では、 HDFS はどのように使うのでしょうか。HDFS は、メインの NameNode と複数の Datanode を、コモディティなハードウェアクラスタ上で動作させます。これらのノードは、データセンター内の同じ場所に編成されています。次に、ブロックに分解され、複数の DataNode に分散されて保存されます。データ損失の可能性を低減するために、ブロックは頻繁にノー ド間で複製されます。これは、万が一、データが消失してしまった場合のバックアップシステムです。
NameNodes について見てみましょう。NameNode は、データの内容、ブロックの所属先、ブロックサイズ、どこに行くべきかを知っているクラスタ内のノードです。また、 NameNodes は、誰かがいつ書き込み、読み取り、作成、削除、様々なデータノート間でデータを複製できるかなど、ファイルへのアクセスを制御するために使用されます。
また、サーバーの容量に応じてクラスタをリアルタイムに変更することができるので、データが急増したときにも有効です。必要に応じてノードを追加したり、削除したりすることができます。
さて、次は DataNodes についてです。DataNodes は、ネームノードと常に通信を行い、タスクを開始し完了する必要があるかどうかを確認します。このような一貫したコラボレーションの流れは、 NameNode が各 DataNode の状態を鋭敏に把握していることを意味します。
あるデータノードがあるべき動作をしていないことが判明した場合、ネームモードは自動的にそのタスクを同じデータブロック内の他の動作するノードに再割り当てすることができます。同様に、 DataNode も互いに通信することができます。つまり、標準的なファイル操作の間に共同作業を行うことができます。NameNode は DataNode とそのパフォーマンスを認識しているため、システムを維持する上で非常に重要な存在です。
データブロックは複数のデータノートに複製され、 NameNode からアクセスできます。
HDFS を使用するには、Hadoop クラスタをインストールし、セットアップする必要があります。これは、初めて利用する人に適したシングルノードのセットアップや、大規模な分散型クラスタのためのクラスタのセットアップが可能です。その後、以下のようなHDFSコマンドを使いこなして、システムを運用・管理する必要があります。
コマンド |
説明 |
-rm |
ファイルやディレクトリを削除します。 |
-ls |
ファイルをパーミッションや他の詳細とともに一覧表示します。 |
-mkdir |
HDFS に path という名前のディレクトリを作成します。 |
-cat |
ファイルの内容を表示します。 |
-rmdir |
ディレクトリを削除します。 |
-put |
ローカルディスクのファイルやフォルダを HDFS にアップロードします。 |
-rmr |
パスまたはフォルダーとサブフォルダーで特定されるファイルを削除します。 |
-get |
HDFS からローカルファイルへファイルまたはフォルダを移動します。 |
-count |
ファイル数、ディレクトリ数、ファイルサイズをカウントします。 |
-df |
空き容量を表示します。 |
-getmerge |
HDFS の複数のファイルをマージします。 |
-chmod |
ファイルパーミッションを変更します。 |
-copyToLocal |
ファイルをローカルシステムにコピーします。 |
-Stat |
ファイルやディレクトリに関する統計情報を表示します。 |
-head |
ファイルの最初の1キロバイトを表示します。 |
-usage |
個々のコマンドのヘルプを返します。 |
-chown |
ファイルの新しいオーナーとグループを割り当てます。 |
HDFS の仕組み
前述したように、 HDFS では NameNodes と DataNodes を使用します。HDFS は、計算ノード間の迅速なデータ転送を可能にします。HDFS はデータを取り込むと、情報をブロックに分解しクラスタ内の異なるノードに分散させることができます。
データはブロックに分割され、データノードに分散して保存されます。これらのブロックはノード間で複製することができ、効率的な並列処理を可能にします。さまざまなコマンドでデータにアクセスし、移動し、見ることができます。"-get"
や "-put"
などの HDFS DFS オプションにより、必要に応じてデータの取得や移動が可能です。
さらに、 HDFS は警戒心が強く、故障を素早く検知できるように 設計されています。ファイルシステムは、データの複製を使用してすべてのデータが複数回保存されるようにし、個々のノード間でそれを割り当て、少なくとも1つのコピーが他のコピーと異なるラックにあることを保証します。
つまり、 DataNode が NameNode に信号を送らなくなると、その DataNode をクラスタから外し、 DataNode なしで運用します。もし、この DataNode が戻ってきた場合、新しいクラスタに割り当てることができます。さらに、データブロックは複数の DataNode に複製されているため、1つ削除しても、いかなる種類のファイル破損にもつながりません。
HDFS コンポーネント
Hadoop には大きく分けて Hadoop HDFS 、 Hadoop MapReduce 、 Hadoop YARNの3つのコンポーネントがあるということを知ることが重要です。これらのコンポーネントが Hadoop に何をもたらすのかを見てみましょう。
- Hadoop HDFS - Hadoop 分散ファイルシステム( HDFS )は、 Hadoop のストレージユニットです。
- Hadoop MapReduce - Hadoop MapReduce は、 Hadoop の処理単位です。これは、膨大なデータを処理するためのアプリケーションを記述するためのソフトウェアフレームワークです。
- Hadoop YARN - Hadoop YARN は、 Hadoop のリソース管理コンポーネントです。これは、バッチ処理、ストリーム処理、インタラクティブ処理、グラフ処理など、 HDFS に格納されたデータを処理し、実行することができます。
HDFS ファイルシステムの作成方法
HDFS ファイルシステムを作成する方法を知りたいですか。以下の手順で、システムの作成、編集、また、必要な場合は削除を行うことができます。
HDFS のリストアップ
HDFS のリストは、 /user/yourUserName
となっているはずです。HDFS のホームディレクトリの内容を表示するには、次のように入力します。
hdfs dfs -ls
まだ始めたばかりなので、この段階では何も見ることができません。空でないディレクトリの内容を表示したいときは、以下のコマンドを入力します。
hdfs dfs -ls /user
これで、他のすべての Hadoop ユーザーのホームディレクトリの名前を見ることができるようになります。
HDFS にディレクトリを作成
ここで、テスト用のディレクトリを作成し、 testHDFS
と呼ぶことにします。これは、 HDFS 内に表示されます。以下のものを入力してください。
hdfs dfs -mkdir testHDFS
ここで、 HDFS をリストアップする際に入力したコマンドを使用して、ディレクトリが存在することを確認する必要があります。testHDFS ディレクトリが表示されているはずです。
HDFS のフルパス名で再度検証してください。以下のコマンドを入力してください。
hdfs dfs -ls /user/yourUserName
次のステップに進む前に、これが機能していることを再確認してください。
ファイルをコピー
ローカルファイルシステムから HDFS にファイルをコピーするには、まずコピーしたいファイルを作成することから始めます。これを行うには、以下のコマンドを入力します。
echo "HDFS test file" >> testFile
これは、文字 HDFS テストファイルを含む testFile という新しいファイルを作成 します。これを確認するために、次のコマンドを入力します。
ls
そして、ファイルが作成されたことを確認するために、以下のコマンドを入力します。
cat testFile
その後、ファイルを HDFS にコピーする必要があります。Linux から HDFS にファイルをコピーするためには、以下のコマンドが必要です。
hdfs dfs -copyFromLocal testFile
"-cp"
というコマンドは HDFS 内のファイルをコピーするために使用されるため、 "-copyFromLocal"
というコマンドを使用しなければならないことに注意してください。
あとは、ファイルが正しくコピーされたことを確認します。これを実行するには、次のコマンドを入力してください。
hdfs dfs -ls
hdfs dfs -cat testFile
ファイルの移動とコピー
testfile をコピーする際に、ベースホームディレクトリに置かれました。これで、既に作成した testHDFS ディレクトリに移動することができます。以下を実行することで、これを実施することができます。
hdfs dfs -mv testFile testHDFS/
hdfs dfs -ls
hdfs dfs -ls testHDFS/
最初の部分は、 testFile を HDFS のホームディレクトリから、作成したテストディレクトリに移動しました。このコマンドの2番目の部分は、それがもう HDFS のホームディレクトリ内にないことを示し、3番目の部分は、それがテスト HDFS ディレクトリに移動したことを確認しています。
ファイルをコピーするには、次のコマンドを入力します。
hdfs dfs -cp testHDFS/testFile testHDFS/testFile2
hdfs dfs -ls testHDFS/
ディスク使用状況の確認
ディスク容量の確認は、 HDFS を使用している場合に有用です。これを実行するには、次のコマンドを入力してください。
hdfs dfs -df
すると、 HDFS の中でどれくらいの容量を使用しているのかがわかります。また、入力することで、クラスタ全体の HDFS の空き容量を確認することもできます。
hdfs dfs -df
ファイル / ディレクトリの削除
HDFS 内のファイルやディレクトリを削除する必要がある時が来るかもしれません。これは、コマンドで実現できます。
hdfs dfs -rm testHDFS/testFile
hdfs dfs -ls testHDFS/
作成した testHDFS ディレクトリと testFile2 が残っているのがわかると思います。そこで、以下のコマンドを入力して、ディレクトリを削除します。
hdfs dfs -rmdir testhdfs
エラーメッセージが表れますが、あわてないでください。具体的には、次のようなものが表示されます。“rmdir: testhdfs: Directory is not empty”
ディレクトリは空でないと削除できません。" rm"
コマンドを使用すると、これを回避して、ディレクトリとその中に含まれているすべてのファイルをまとめて削除することができます。これを実行するには、以下のコマンドを入力してください。
hdfs dfs -rm -r testHDFS
hdfs dfs -ls
HDFS のインストール方法
Hadoop をインストールするには、シングルノードとマルチノードがあることを覚えておく必要があります。必要なものに応じて、シングルノードまたはマルチノードクラスタを使用できます。
シングルノードクラスタは、 1 つの DataNode のみが動作していることを意味します。1台のマシンに NameNode 、 DataNode 、リソースマネージャ、ノードマネージャを搭載します。
業界によっては、これだけで十分な場合もあります。例えば、医療分野では、研究を行う際に、データの収集、分類、処理を順番に行う必要がある場合、シングルノードクラスタを使用することができます。何百台ものマシンに分散しているデータに比べて、小規模でも簡単に処理することができます。シングルノードクラスタをインストールするには、以下の手順を参考にしてください。
- Java 8 パッケージをダウンロードし、ホームディレクトリに保存します。
- Java Tar ファイルを解凍します。
- Hadoop 2.7.3 パッケージをダウンロードします。
- Hadoop Tar ファイルを解凍します。
- bashファイル (
.bashrc
) に Hadoop と Java のパスを追加します。 - Hadoop Configuration ファイルを編集します。
- core-site.xml を開き、プロパティを編集します。
yarn-site.xml
を編集し、プロパティを編集します。mapred-site.xml
ファイルを編集し、プロパティを編集します。yarn-site.xml
を編集し、プロパティを編集します。hadoop-env.sh
を編集し、 Java のパスを追加します。- Hadoop のホームディレクトリに移動し、 NameNode をフォーマットします。
hadoop-2.7.3/sbin
ディレクトリに移動し、すべてのデーモンを起動します。- すべての Hadoop サービスが稼働していることを確認します。
これで HDFS が正常にインストールされます。
HDFS ファイルへのアクセス方法
HDFS は、データを取り扱う以上、セキュリティが厳しいのは当然のことです。HDFS は技術的には仮想ストレージなので、クラスタにまたがっているため、ファイルシステムのメタデータを見ることができるだけで、実際の具体的なデータを見ることはできません。
HDFS のファイルにアクセスするには、 HDFS から "jar"
ファイルをローカルファイルシステムにダウンロードします。また、ウェブユーザーインターフェースを使用して HDFS にアクセスすることも可能です。この方法を実施するには、ブラウザを開き検索バーに "localhost:50070"
と入力します。そこから HDFS の Web ユーザーインターフェイスを表示し、右側のユーティリティタブに移動することができます。次に " browse file system" をクリックすると、 HDFS 上にあるファイルの一覧が表示されます。
HDFS DFS の例
ここでは、最も一般的な Hadoop コマンドの例を紹介します。
例 A
ディレクトリを削除するには、以下の内容を適用する必要があります(注意:ファイルが空の場合のみ可能です)。
$Hadoop fs -rmdir /directory-name
Or
$hdfs dfs -rmdir /directory-name
例 B
HDFS に複数のファイルがある場合、 "-getmerge" コマンドを使用できます。これにより、複数のファイルが 1 つのファイルに統合され、ローカルのファイルシステムにダウンロードすることができます。以下を実行することで、これを実施することができます。
$ Hadoop fs -getmerge [-nl] /source /local-destination
Or
$ hdfs dfs -getmerge [-nl] /source /local-destination
例 C
HDFS からローカルにファイルをアップロードする場合は、"-put "コマンドを使用できます。その際、どこからコピーするか、また、どのファイルを HDFS 上にコピーするかを指定します。これを実施する場合は、以下を使用します。
$ Hadoop fs -put /local-file-path /hdfs-file-path
Or
$ hdfs dfs -put /local-file-path /hdfs-file-path
例 D
count コマンドは、 HDFS 上のディレクトリ数、ファイル数、ファイルサイズを把握するために使用されます。以下を実行することで、これを実施することができます。
$ Hadoop fs -count /hdfs-file-path
Or
$ hdfs dfs -count /hdfs-file-path
例 E
"chown" コマンドは、ファイルの所有者とグループを変更するために使用します。これを有効にするには、以下を使用します。
$ Hadoop fs -chown [-R] [owner][:[group]] hdfs-file-path
Or
$ hdfs dfs -chown [-R] [owner][:[group]] hdfs-file-path
HDFS ストレージとは
ご存知の通り、 HDFS のデータはブロックと呼ばれるものに格納されています。このブロックは、ファイルシステムが保存できるデータの最小単位です。ファイルは処理されてブロックに分解され、その後、そのブロックはクラスタに分散されます。また、安全のために複製もされます。通常、各ブロックは3回複製することができます。下の図は、ビッグデータとそれを HDFS でどのように保存するかを示しています。
1つ目は DataNode に、2つ目はクラスタ内の別の DataNode に、3つ目は別のクラスタの DataNode に保存されています。これは、三重の保護セキュリティのステップのようなものです。そのため、万が一、 1 つのレプリカに障害が発生しても、データが永久に失われることはありません。
NameNode は、ブロック数やレプリカの格納場所などの重要な情報を保持しています。それに対して、 DataNode は実際のデータを保存しており、コマンドでブロックの作成、ブロックの削除、ブロックの複製ができます。以下のコマンドで実施することができます。
In hdfs-site.xml
dfs.NameNode.name.dir
file:/Hadoop/hdfs/NameNode
dfs.DataNode.data.dir
file:/Hadoop/hdfs/DataNode
Dfs.DataNode.data.dir
これは、 DataNodes がそのブロックをどこに格納すべきかを決定するものです。
HDFS のデータ保存方法
HDFS は、NameNode、Secondary NameNode、DataNode のマスターサービスで構成されています。NameNode および Secondary NameNode は、HDFS のメタデータを管理します。DataNode は、HDFS データの実体を保存します。
NameNode は、指定されたファイルのコンテンツが HDFS 内のどの DataNode に含まれているかを追跡します。HDFS はファイルをブロックに分割し、各ブロックを DataNode に格納します。複数の DataNode は、クラスタにリンクされています。NameNode は、これらのブロックのレプリカをクラスタ全体に分散させます。また、ユーザーやアプリケーションに対して必要な情報がどこにあるのかを通知します。
Hadoop 分散ファイルシステム(HDFS)は、何を取り扱うた めに設計されているのでしょうか
簡単に言えば「 Hadoop の分散ファイルシステムは何を扱うために設計されているのでしょうか」ということです。その答えは、まず第一に「ビッグデータ」です。これは、ビジネスや顧客からのデータの管理と保存に苦労している大企業にとって、非常に重要なものです。
Hadoop を使うと、トランザクション、サイエンス、ソーシャルメディア、広告、マシンなど、あらゆるデータを保存し統合することができます。また、このデータに立ち戻ることで、ビジネスに関する業績や分析に関する貴重な洞察を得ることができます。
HDFS はデータを保存するために設計されているため、科学者や医療関係者がデータ分析を行う際によく使う生のデータも扱うことができます。これをデータレイクと呼びます。そのため、より難しい問題にも遠慮なく取り組むことができます。
さらに、 Hadoop は主に膨大な量のデータを様々な方法で処理するために設計されているため、分析目的のアルゴリズムを実行するためにも使用することができます。つまり、企業がより効率的にデータを処理・分析し、新たなトレンドや異常を発見するのに役立ちます。ある種のデータセットは、データウェアハウスから Hadoop に移されることもあります。Hadoop は、簡単にアクセスしやすい一カ所にすべてを収納します。
トランザクションデータに関しても、 Hadoop は何百万ものトランザクションを処理することができます。その保存能力と処理能力により、 Hadoop は顧客データの保存や分析に活用することができます。また、データを深く掘り下げることで、新たなトレンドや パターンを発見し、ビジネスの目標に役立てることができます。さらに、 Hadoop は常に新しいデータで更新されており、新旧のデータを比較することで、何がなぜ変わったのかを確認することもできます。
HDFS で考慮すべきこと
HDFS は、デフォルトで 3 つのレプリカを保存するように構成されており、データセットは 2 つの追加コピーを持つことになります。これは、処理中にデータが局所化される可能性が向上する一方で、ストレージのオーバーヘッドコストが発生します。
- HDFS は、ローカルストレージで構成された場合に最も効果的に機能し、ファイルシステムの最高性能が保証されます。
- HDFS の容量を増やすには、記憶媒体だけでなく新たなサーバー(コンピューティング、メモリ、ディスク)の追加が必要です。
HDFS とクラウドオブジェクトストレージの比較
前述したように、HDFS の容量はコンピューティングリソースと密接に関連しています。ストレージの容量を増やすと、CPU のリソースも不必要に増加します。HDFS にデータノードをさらに追加する場合には、既存のデータを新たに追加したサーバーに分配するリバランス操作が必要になります。
この操作には時間がかかることがあります。また、オンプレミス環境での Hadoop クラスタの拡張は、コストやスペースの面からも困難な場合があります。YARN が処理対象のデータを格納するサーバー上でプロビジョニングできることを前提とすると、HDFS はローカルストレージを使用するため、I/O 性能のメリットを提供できます。
しかし、利用頻度の高い環境では、データの読み書きの 多くはローカルではなくネットワーク上で行われます。Azure Data Lake Storage(ADLS)、AWS S3、Google Cloud Storage(GCS)などのクラウドオブジェクトストレージは、クラウドにアクセスするコンピューティングリソースに依存しないため、ユーザーは膨大なデータをクラウドに保存できます。
ペタバイトを超えるデータでも、クラウドオブジェクトストレージなら容易に保存が可能です。ただし、クラウドストレージに対する読み書き操作は、全てネットワーク経由で行われます。データにアクセスするアプリケーションは、可能な限りキャッシュを活用するか、入出力操作を最小化するロジックを含めることが重要です。