Skip to content
Published on

HadoopのOS「YARN」とは何か?

Authors

YARNの誕生背景

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

YARNアーキテクチャ

yarn-architecture

クライアントはResource ManagerにJobを送信し、RMはNode Managerの中から1台にApplication Masterを割り当てます。このApplication Masterは、名前から推測できるように、アプリケーションごとに1つだけ存在し、ライフサイクル全体を統括する重要なプロセスであり、コンテナを通じて起動されます。このAMはResource Managerに実行に必要なリソース割り当てを要求し、Containerという束で管理される論理的なリソース(CPU、メモリ)を割り当てられてJobを実行します。

YARNの構成要素

  1. ResourceManager (RM): クラスタレベルのリソース管理:Hadoopクラスタ全体のリソースを中央で管理します。 Scheduler:アプリケーションに必要なリソースを割り当てるスケジューラの役割を果たします。このスケジューラはプラガブルで、運用者がポリシープラグインを選択できます。よく使用されるのはCapacity、Fair、SLA Schedulerです。アプリケーションの状態は監視せず、アプリケーションの障害やハードウェア障害に対するリスタートなどの作業も行いません。リソース要求に基づく機能のみを実行します。 Application Manager:アプリケーションのライフサイクルを管理し、アプリケーションの送信、実行、終了などの作業を処理します。Jobの送信を受け付け、Application Masterが実行される最初のコンテナを選定し、その後の障害に対してApplication Masterコンテナを再起動する役割を担います。

  2. NodeManager (NM): 各ノードで実行され、そのノードのリソース使用量と状態を監視します。 ResourceManagerの指示に従い、コンテナを起動または停止します。

  3. ApplicationMaster (AM): 各アプリケーションごとに1つずつインスタンス化され、アプリケーションの実行を管理します。 ResourceManagerにリソースを要求し、NodeManagerに実際の作業を実行させます。 アプリケーションの進捗状態を監視し、必要に応じてリソースを調整します。

  4. コンテナ (Container): アプリケーション実行に必要なリソース(CPU=v-core、Memory=v-memなど)の束です。 ResourceManagerによって割り当てられ、NodeManagerによって管理されます。

YARNとHDFSの関係は依存的か?

ほとんどのYARNはHDFS上で動作し、Hadoopバイナリにも含まれているため、依存関係があると考えがちですが、これは誤解です。YARNとHDFSは最も相性の良いツールであることは間違いありませんが、HDFSはストレージ領域を担当し、YARNはリソース管理を担当する独立したコンポーネントです。

YARN Job送信と実行の流れ

yarn-job workflow
  1. クライアントがResource ManagerにJobを送信します。(この時、クライアントはApplication IDを発行してもらう必要があり、ClientRMServiceのcreateNewApplicationを呼び出し、RMからクラスタから最大で割り当て可能なリソース情報であるGetNewApplicationResponseを受け取ります。この情報を基にsubmitApplicationを実行します。)

  2. Application ID、Application Name、Queue Name、Application Priority、ContainerLaunchContext情報が決定されると、Resource ManagerのApplication ManagerはAMLauncherを通じてRM内部のスケジューラから渡されたNodeManagerにApplication Masterを起動します。

  3. Node ManagerはRMからContainerLaunchContextを受け取り、この情報を使用してAM(Application Master)を起動します。 ContainerLaunchContextには以下の情報が含まれています:

    • ContainerId
    • Resource:コンテナに割り当てられたリソース
    • User:コンテナが割り当てられたユーザー
    • Security token:(Securityが有効な場合のみ)
    • LoadResource:コンテナを実行するために必要なバイナリ(例:jar、shared objectsなど)
    • Environment Variables
    • Commands:コンテナ起動に必要なコマンド
  4. Application Masterが正常に起動すると、RPCポートとTracking UIが割り当てられ、Resource Managerに登録されます。これにより、AMがResource Managerにリソースを要求できるようになります。ApplicationMasterProtocolはResourceManagerとApplicationMaster間に必要なインターフェースであり、AMRMClient、AMRMClientAsyncという実装体があります。

  5. AMがRMに要求して割り当てられたリソースであるコンテナをNode Managerで実行し、Jobを遂行します。