第1章 Hadoopの紹介
Hadoopとは
HadoopはApache基金会によって開発された分散システムの基盤となるソフトウェアフレームワークです。これは、ストレージシステムと計算フレームワークを組み合わせて複数のコンピュータをクラスター化にし、大規模データについて保存と処理の問題を解決することを目的としている。
どの問題を解決
- 大規模データの保存:高い耐障害性を備えて複数の低コストのハードウェア(hardware)上で大量データを保存します。また、データへのアクセスには高いスループット(throughput)を提供して高速でアクセスできるようにします。
- 資源の管理、スケジューリング:汎用の資源管理システム及びスケジューリングシステムを提供します。これにより、Hadoopだけではない、他の上位アプリケーションにも資源管理とスケジューリングの働きを提供します。クラスタの利用率向上、資源の統合管理、データの共有などの面で大きな利点があります。
- 分散型計算:複雑の大量の計算作業を多数の部分に分解し、異なる節点に割り当てて並行処理を行い、その結果を集約して最終的な結果を得る仕組みです。これにより、クラスターの計算能力とストレージ空間を効果的に活用し、データ処理の効率と信頼性を高めます。
Hadoopの特徴
利点
- データの保存と処理能力において高い信頼性を持ってあります。
- 利用可能なコンピュータクラスターを通じてデータを分散し、保存と計算のタスクを実行します。これらのクラスターは数千の節点まで簡単に拡張することができ、高い拡張性を持っています。
- 節点の間でデータを動的に移動させ、各節点の負荷を動的にバランスさせることができます。処理速度が非常に速いです。
- データの複数のコピーを自動的に保存し、失敗したタスクを自動的に再配分することで高い耐障害性を持っています。
欠点
- 低遅延でのデータアクセスには適していません。
- 大量の小さなファイルを効率的に保存することができません。
- 複数のユーザー同時に書き込みやファイルの任意の変更を支持していません。
Hadoopの生態
狭義のHadoopには上記の通り分散システムのソフトウェアフを指しますが。広義には、Hadoopは複数のビッグデータ技術を代表し、他のソフトウェアと組み合わせて共に整体のビッグデータ技術生態を構築します。これにより、多くの相互依存関係が生まれ、ビッグデータ領域に足を踏み入れると学習すべき内容が非常に多いことがわかります。
Hadoopの仕組み
Hadoopは、核心の三つ部分(HDFS、MapReduce、YARN)やCommon共用部分を共に組み合わせる。以下に各部分の働きを紹介します。
HDFS
Hadoop HDFS(Hadoop Distributed File System)は、高い信頼性と高いスループットを持つ分散ファイルシステムです。基本構造は主従結構(master-slave architecture)に基づいて、NameNodeとDataNodeを主従節点に分けます。NameNodeはファイルのメタデータを管理します。DataNodeはデータの実体を保存します。 HDFSにファイルが一定サイズで分割されてデータブロック(date block)としてDataNodeに保存します。
- NameNode(nn):全クラスタのメタデータ(Mate Data)を格納します。例えば、ファイル名、ファイルの目録構造、ファイル属性(作成時間、副本数、ファイル権限)、各ファイルのブロックリストとそのブロックが存在するDataNodeなど情報を保存します。
- SecondaryNameNode(2nn):NameNodeの作業を支持するために、HDFSの状態を監視する補助プログラムで、一定の時間ごとにHDFSのメタデータのスナップショット(snapshot)を取得します。
- DataNode(dn):実際データブロックを格納します。また、データブロックの検証や更新などなど役割も担当します。
YARN
YARNは、Hadoop V2.0から単独の部分としてあって、計算資源のスケジューリングを提供し、YARNにリソースを要求するとそのリソースを割り当てる役割を果たすフレームワークです。
YARNは実行中のプログラムとは独特しており、計算の内容に関与せず、様々な種類の分散計算プログラムを実行できます。例えば、MapReduce、Storm、Spark、Tezなどです。これらの計算フレームワークがYARN規格に適合してYARN上で統合できるの仕組みを持ちます。つまり、Yarnが汎用的なリソーススケジューリングのフレームワークとして利用されます。
- ResourceManager (RM): クライアントのリクエストを処理し、ApplicationMasterの起動/監視、NodeManagerの監視、資源の割り当てとスケジューリングを行います。
- NodeManager (NM): 各節点上のリソースを管理し、ResourceManagerからの命令を処理し、ApplicationMasterからの命令も処理します。
- ApplicationMaster (AM): データの分割、アプリケーションのための資源を要求し、内部タスクに資源を割り当て、タスクの監視とフォールトトレランス(fault tolerance)を担当します。
- Container: タスクの実行環境を抽象化したもので、CPU、メモリなどの多次元資源や環境変数、起動コマンドなどタスク実行に関する情報をカプセル化します。
Common
Commonは、他のHadoopモジュールに基礎施設と汎用のプログラム及びライブラリの集合を提供します。主にシステム設定ツールであるConfiguration、遠隔手続き呼び出し(Remote Procedure Call/RPC)、データの直列化、及びHadoop内部に抽象されるファイルシステム(FileSystem)などが含まれ、汎用ハードウェア上で環境を構築するための基本的なサービスを提供し、そのHadoop上で稼働するソフトウェア開発に必要なAPIを提供します。
簡単に言うと、Hadoop CommonはHadoopエコシステム全体の運用を支える基本的な構成であり、HDFS、MapReduce、およびYARNなどの他のモジュールが正常に動作し、協調して動作できるようにします。
まとめ
Hadoopはビッグデータ領域における基礎施設として存在し、多機能を備えているため、関連する学習内容が多岐にわたります。しかし、実況でHadoopに対して操作の可能のところがHDFSまでで十分な場合が多いです。特にMapReduce計算フレームワークが他の高性能の計算ソフトウェアSpark、Finkに置き換えられることが多く、Yarnの運行にも干渉しません。つまり、理論的な説明は多いものの、実際に使われることは限られています。
Discussion