- Authors

- Name
- Youngju Kim
- @fjvbn20031
YARNの誕生背景
Hadoopがバージョン1だった頃は、MapReduceだけがデータを加工・処理できる唯一の手段でした。リソース管理とスケジューリングまで担当していたMapReduceの構成要素であるJob Trackerに負荷がかかり、ボトルネックとなっていました。Hadoopバージョン2では、この問題を解決するためにYARNが導入され、リソース管理とスケジューリングの責任を分離し、以前よりも汎用的なアプリケーションをHadoop上で実行できるようになりました。
YARNアーキテクチャ

クライアントはResource ManagerにJobを送信し、RMはNode Managerの中から1台にApplication Masterを割り当てます。このApplication Masterは、名前から推測できるように、アプリケーションごとに1つだけ存在し、ライフサイクル全体を統括する重要なプロセスであり、コンテナを通じて起動されます。このAMはResource Managerに実行に必要なリソース割り当てを要求し、Containerという束で管理される論理的なリソース(CPU、メモリ)を割り当てられてJobを実行します。
YARNの構成要素
ResourceManager (RM): クラスタレベルのリソース管理:Hadoopクラスタ全体のリソースを中央で管理します。 Scheduler:アプリケーションに必要なリソースを割り当てるスケジューラの役割を果たします。このスケジューラはプラガブルで、運用者がポリシープラグインを選択できます。よく使用されるのはCapacity、Fair、SLA Schedulerです。アプリケーションの状態は監視せず、アプリケーションの障害やハードウェア障害に対するリスタートなどの作業も行いません。リソース要求に基づく機能のみを実行します。 Application Manager:アプリケーションのライフサイクルを管理し、アプリケーションの送信、実行、終了などの作業を処理します。Jobの送信を受け付け、Application Masterが実行される最初のコンテナを選定し、その後の障害に対してApplication Masterコンテナを再起動する役割を担います。
NodeManager (NM): 各ノードで実行され、そのノードのリソース使用量と状態を監視します。 ResourceManagerの指示に従い、コンテナを起動または停止します。
ApplicationMaster (AM): 各アプリケーションごとに1つずつインスタンス化され、アプリケーションの実行を管理します。 ResourceManagerにリソースを要求し、NodeManagerに実際の作業を実行させます。 アプリケーションの進捗状態を監視し、必要に応じてリソースを調整します。
コンテナ (Container): アプリケーション実行に必要なリソース(CPU=v-core、Memory=v-memなど)の束です。 ResourceManagerによって割り当てられ、NodeManagerによって管理されます。
YARNとHDFSの関係は依存的か?
ほとんどのYARNはHDFS上で動作し、Hadoopバイナリにも含まれているため、依存関係があると考えがちですが、これは誤解です。YARNとHDFSは最も相性の良いツールであることは間違いありませんが、HDFSはストレージ領域を担当し、YARNはリソース管理を担当する独立したコンポーネントです。
YARN Job送信と実行の流れ

クライアントがResource ManagerにJobを送信します。(この時、クライアントはApplication IDを発行してもらう必要があり、ClientRMServiceのcreateNewApplicationを呼び出し、RMからクラスタから最大で割り当て可能なリソース情報であるGetNewApplicationResponseを受け取ります。この情報を基にsubmitApplicationを実行します。)
Application ID、Application Name、Queue Name、Application Priority、ContainerLaunchContext情報が決定されると、Resource ManagerのApplication ManagerはAMLauncherを通じてRM内部のスケジューラから渡されたNodeManagerにApplication Masterを起動します。
Node ManagerはRMからContainerLaunchContextを受け取り、この情報を使用してAM(Application Master)を起動します。 ContainerLaunchContextには以下の情報が含まれています:
- ContainerId
- Resource:コンテナに割り当てられたリソース
- User:コンテナが割り当てられたユーザー
- Security token:(Securityが有効な場合のみ)
- LoadResource:コンテナを実行するために必要なバイナリ(例:jar、shared objectsなど)
- Environment Variables
- Commands:コンテナ起動に必要なコマンド
Application Masterが正常に起動すると、RPCポートとTracking UIが割り当てられ、Resource Managerに登録されます。これにより、AMがResource Managerにリソースを要求できるようになります。ApplicationMasterProtocolはResourceManagerとApplicationMaster間に必要なインターフェースであり、AMRMClient、AMRMClientAsyncという実装体があります。
AMがRMに要求して割り当てられたリソースであるコンテナをNode Managerで実行し、Jobを遂行します。