先看個yarn的整體架構

client向rm送出任務的過程大緻分為七步,先上圖在解釋:
1. client向rm送出請求
2. rm傳回一個applicationid作為回應
3. client向rm回應application submission context(asc)。asc包括applicationid、user、queue,以及其他一些啟動am相關的資訊,除此之外,還有一個container launch context(clc),clc包含了資源請求數(記憶體與cpu),job files,安全token,以及其他一些用以在一個node上啟動am的資訊。任務一旦送出以後,client可以請求rm去殺死應用或查詢應用的運作狀态
4. 當rm接受到asc後,它會排程一個合适的container來啟動am,這個container經常被稱作為container 0。am需要請求其他的container來運作任務,如果沒有合适的container,am就不能啟動。當有合适的container時,rm發請求到合适的nm上,來啟動am。這時候,am的prc與監控的url就已經建立了。
5. 當am啟動起來後,rm回應給am叢集的最小與最大資源等資訊。這時am必須決定如何使用那麼目前可用的資源。yarn不像那些請求固定資源的scheduler,它能夠根據叢集的目前狀态動态調整。
6. am根據從rm那裡得知的可使用的資源,它會請求一些一定數目的container。this request can be very specific,including containers with multiples of the resource minimum values (e.g., extra memory)。
7. rm将會根據排程政策,盡可能的滿足am申請的container。
在一個job運作時,am會向rm彙報心跳與進度資訊,在這些心跳過程中,am可能去申請或釋放container。會當任務完成時,am向rm發送一條任務結束資訊然後退出。如下圖所示: