【ヤーン】

YARN(ヤーン) とは?

公開:
💡 クラスタの「交通整理役」。限られた資源をみんなで上手にシェアする司令塔
📌 このページのポイント
YARN のアーキテクチャ ResourceManager クラスタ全体の司令塔 Spark / Flink アプリ投入 NodeManager 1 コンテナ A CPU:2 Mem:4G コンテナ B CPU:1 Mem:2G 空きリソース: CPU:1 Mem:2G NodeManager 2 コンテナ C CPU:2 Mem:8G 空き 空きリソース: CPU:2 Mem:4G ResourceManager がリソースを管理し、各 NodeManager にコンテナ(実行枠)を配置 Spark・Flink・MapReduce など複数フレームワークが同一クラスタを共有
YARN のリソース管理アーキテクチャ
ひよこ ひよこ
YARNって名前を聞くとJavaScriptのパッケージマネージャを思い浮かべちゃうんだけど、別物なの?
ペンギン先生 ペンギン先生
完全に別物だよ!Hadoop YARNは「Yet Another Resource Negotiator」の略で、Hadoopクラスタのリソースを管理するためのフレームワークなんだ。名前がかぶってるだけで、役割も技術領域もまったく違うよ
ひよこ ひよこ
リソースを管理するってどういうことなの?
ペンギン先生 ペンギン先生
たとえば100台のサーバーでできたクラスタがあるとするよね。そこで「Sparkで集計したい」「MapReduceでログ解析したい」と複数のリクエストが来たとき、どのサーバーにどれだけのCPUとメモリを割り当てるかを決めるのがYARNの仕事なんだ。オフィスの会議室予約システムみたいなものだね
ひよこ ひよこ
なるほど!会議室の予約係みたいな感じなんだね!
ペンギン先生 ペンギン先生
そうそう。YARNが登場する前のHadoopでは、MapReduceがリソース管理も処理実行も全部やっていたんだ。でもそれだとMapReduce以外の処理が動かせなかった。YARNがリソース管理を切り出したことで、Spark、Flink、Tezなど色んなフレームワークを同じクラスタで同時に動かせるようになったんだよ
ひよこ ひよこ
どういう仕組みで動いてるの?
ペンギン先生 ペンギン先生
大きく2つの役割があるよ。まず「ResourceManager」がクラスタ全体の司令塔として、どのジョブにどれだけリソースを割り当てるかを決める。次に各サーバーにいる「NodeManager」が、自分のマシンのCPUやメモリを監視して、ResourceManagerの指示どおりにコンテナを起動するんだ
ひよこ ひよこ
コンテナって出てきたけど、Dockerコンテナとは違うの?
ペンギン先生 ペンギン先生
いい質問だね。YARNのコンテナDockerコンテナとは別で、「CPUいくつ、メモリいくら」というリソースの枠のことを指すんだ。アプリケーションはこの枠の中で実行される。ただ最近のYARNはDockerコンテナ上でタスクを動かす機能も追加されているよ
ひよこ ひよこ
今でもYARNって使われてるの?Kubernetesとかもあるよね?
ペンギン先生 ペンギン先生
鋭いところを突くね。確かにKubernetesの普及でYARNの立ち位置は変わりつつあるよ。クラウド環境ではEMRやDataprocがYARNを内部で使いつつ抽象化してくれるし、Spark on Kubernetesのように直接Kubernetesで動かすパターンも増えている。でもオンプレミスの大規模Hadoopクラスタではまだまだ現役だし、YARNのキャパシティスケジューラはマルチテナント環境でのリソース配分に強みがあるんだよ
ひよこ ひよこ
YARNならではの強みもまだあるんだね!
ペンギン先生 ペンギン先生
そうだね。特にYARNのキューベースのリソース管理は、部署ごとに「最大50%まで使える」みたいな制限をかけられるから、大企業のデータ基盤ではとても重宝されているんだ。Hadoopを理解するうえでYARNは欠かせない存在だよ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「YARN」って出てきたら「Hadoopクラスタのリソースを管理・配分する司令塔」と思えればだいたいOK!
📖 おまけ:英語の意味
「Yet Another Resource Negotiator」 = もう一つのリソース調停者
💬 初期のHadoopはMapReduceがリソース管理も兼ねていて限界があったから、「もう一つの(Yet Another)」リソース管理の仕組みとして生まれたんだよ。ちなみにJavaScriptのパッケージマネージャ「Yarn」とは全くの別物だよ
← 用語集にもどる