summary:
YARNは,クラスター全体のリソースを抽象化し,個々のアプリケーションに対して独立したリソース要求と管理を可能にするアーキテクチャを提供する.各ノードにはNodeManagerが常駐し,リソースの実行単位であるコンテナを管理する.また,ResourceManagerがクラスター全体のリソースのグローバル管理を行い,個別のアプリケーションごとに起動されるApplicationMasterが自身のライフサイクルおよびリソース要求を制御するという,分散的かつ協調的な設計思想に基づいている.ResourceManagerは主にSchedulerとApplicationsManagerの2つのコンポーネントで構成され,前者がリソース割り当てを担当し,後者がアプリケーションの提出と実行を管理する.リソースは主にメモリとCPU単位で定義され,これらを組み合わせたコンテナ単位でスケジューリングが行われる.Hadoop 3.0以降では,ディスク容量やGPUなどの追加リソースタイプも扱えるように拡張された.
YARNは単なるMapReduce実行エンジンにとどまらず,Apache TezやApache Spark,Apache Flink,さらにはMPI系のアプリケーションに至るまで,多様な分散処理フレームワークの共通的な実行基盤として機能してきた.この汎用性こそが,YARNをHadoopエコシステムの中核技術たらしめてきた要因である.スケジューリング方式としては,リソース使用率に基づくキャパシティスケジューラ,アプリケーション間の公平性を重視するフェアスケジューラ,FIFO[First In First Out]スケジューラなど,複数の戦略を備えており,組織やユースケースに応じた柔軟な運用が可能となっている.特にキャパシティスケジューラは,キューの階層化やリソース予約,プリエンプションなどの機能を通じて,エンタープライズ環境での複雑なリソース管理要件に対応できる.
一方,近年のクラウドネイティブ化の潮流の中で,YARNとKubernetes[K8s]との対比は技術的に極めて重要である.YARNはJavaベースのHadoopエコシステムに特化して設計されたリソースマネージャであり,データ処理バッチワークロードを効率よくスケジューリングすることに最適化されているのに対し,Kubernetesはコンテナオーケストレーションのための汎用的なプラットフォームとして開発されており,マイクロサービスやWebアプリケーション,CI/CDパイプラインなど,より多様なワークロードを対象としている.YARNは各アプリケーションが独自にApplicationMasterを持つモデルであり,分散制御の粒度がアプリケーション単位であるが,Kubernetesはすべてのコンテナ[Pod]のライフサイクルを中央のコントロールプレーン[etcd,API Server,Scheduler,Controller Managerなど]で制御する構造をとる.また,YARNはリソースの仮想化やサービスディスカバリ,自動スケーリングといった機能においてKubernetesに比べて柔軟性が劣り,クラウド環境での運用にも制約がある.Kubernetesは詳細なヘルスチェックや自己修復機能,ローリングアップデートなどのDevOpsプラクティスをネイティブにサポートしている点でも優位性がある.
そのため,従来Hadoop上でバッチ処理やETLワークロードの実行に用いられてきたSparkやFlinkなどが,現在ではKubernetes上で直接実行されるようになりつつある.これにより,YARNの役割は次第に縮小し,特にクラウド環境ではKubernetesがその代替基盤となる傾向が顕著である.AWS EMR,Google Dataproc,Azure HDInsightといったマネージドHadoopサービスでさえ,Kubernetesとのインテグレーションを強化している.ただし,オンプレミス環境や既存のHadoop資産を活かした運用が前提となる場合,YARNは依然として安定した選択肢であり,信頼性の高いリソース管理プラットフォームとして機能し続けている.特に,HadoopのHDFSとの統合,セキュリティ[Kerberosなど]との連携,大規模バッチジョブの処理効率などの点で,特定のユースケースにおいては優位性を保持している.
さらに,Apache Hadoop 3.xでは,YARNの機能強化として,Docker対応やリソースタイプの拡張,GPU対応,フェデレーションなど,Kubernetesに対抗する機能も導入されてきた.また,Submarineプロジェクトのような取り組みを通じて,YARNでの機械学習ワークロードの実行サポートも進められている.
ゆえに,YARNはHadoopの進化において極めて本質的な役割を果たしてきた分散リソースマネージャであり,技術的・歴史的にも重要な位置づけにある.しかし,現代のインフラストラクチャの多様化とクラウド化に伴い,その適用範囲は相対的に狭まりつつあり,Kubernetesとの併存または置き換えが進行しているのが現状である.今後は,YARNはHadoopエコシステム内での役割を継続しつつも,Kubernetesとの相互運用性を高める方向に進化していくと予想される.
なお,YARNはApache Hadoopの一部であり,Hadoop全体がJavaで書かれていることから,そのコンポーネントであるYARNもJavaベースで構築されている.HadoopはJava仮想マシン[JVM]上で動作するため,YARNの各コンポーネント――たとえば ResourceManager や NodeManager, ApplicationMaster ――もすべてJavaで記述されており,JARファイルとして配布される.
さらに,YARN上で実行されるユーザアプリケーション[たとえばMapReduceジョブやSparkアプリケーション]も,原則としてJVM上で動作する形式で提供される必要がある.ただし,非JavaのプログラムもYARN上で動かすことは可能であり,その場合はDistributedShellやYARN Native Servicesといった補助的な仕組みを用いて実行される.
したがって,YARNのコア実装はJavaであり,JVMを前提としたリソース管理およびスケジューリングのためのプラットフォームである.
Mathematics is the language with which God has written the universe.