正如前文所闡述的,yarn的federation的緣由是為了解決rm的擴充套件性問題的。如果單純通過搭建新的yarn獨立集群的方式,會造成管理的不便,還有一點就是資源無法被充分利用到。我們無法保證每個集群在資源空閒的時候能夠及時地安排上任務執行,除非我們有一種全域性控制各個rm的排程器。至少在獨立集群部署模式下,做到這種智慧型調控並不容易。而在這點上,yarn federation已經為我們實現了這點。
下面我們來具體了解yarn federation的架構設計,通過了解它的架構設計,我們就能更清楚地知道它是如何做全域性資源排程的了。
yarn federation功能並沒有對原始yarn的核心邏輯做大規模的修改,只是在其上做了額外的處理。這裡面涉及的主要有以下兩大模組:
yarn federation設計的乙個重要目標是讓眾多獨立小集群變為邏輯意義上的乙個超大資源池。對於客戶端來說,它直接面對的將不是眾多具體的獨立小集群。而要做到統一大集群資源,當然我們首先需要知道有哪些集群資訊,包括集群id,位址,容量使用等等。而且我們需要將這些資訊進行持久化操作,這樣可以做到服務間的資訊共享。
而另外乙個核心模組就是客戶端的請求路由模組。在客戶端和背後多yarn小集群之間,我們需要有乙個router這樣的角色,做智慧型的請求**。這個角色有點load balancer的意思,又可以理解為是乙個proxy的role。在這裡router就需要用到之前持久化的多集群資訊了。然後我們的路由策略也會根據各個集群的狀態資訊做目標集群的選擇。
了解完yarn federation的大致原理之後,我們來看yarn federation的架構設計圖:
上圖中的state store部分即上面提到的狀態持久化模組,不過上面將policy store單獨拎出來了,策略資訊的儲存比較特殊。它是由專門的策略生成類進行存放的。簡要概括上述步驟:
這裡為了效能上的考慮,減少頻繁的state store,router會對從state store中查詢來的資訊做cache處理。
在yarn federation策略中,具體還分為兩個模組的策略:
第一類,router路由模組的policy。負責為應用選擇乙個主cluster,也稱為home cluster。
第二類, am proxy policy。這個policy適用於am如何決定向哪些cluster申請資源。因為這裡會存在跨集群資源申請的情況。
這裡我們主要談論簡單一點的router policy。在yarn federation過程中,為了保證能夠更高效的排程統一大資源,yarn federation設計了多種靈活的router policy策略。從yarn federation的初始設計文件中,主要介紹了如下幾種:
跨集群資源的排程,yarn federation支援跨集群資源排程的情況。它的原理是在am和rm之間增添了乙個proxy service做中間的攔截,此服務叫做amrmproxy。am會首先連線amrmproxy,然後amrmproxy再負責和各個rm通訊。這裡就會存在本地的am向遠端rm通訊的可能性。當然amrmproxy的攔截作用,它可以在中間做請求的限流或是security等額外的管控。
以下是amrmproxy的內部結構圖:
在yarn federation模式下,這裡的資源排程是乙個全域性的模式。全域性排程的益處還能解決部分極端情況導致某些子集群完全無法用的情況。am不僅僅可以與本地的rm申請資源,還能夠向其它集群申請資源。這裡借助的角色就是上文提到的amrmproxy服務。amrmproxy再負責和其他非本地rm進行通訊。
那麼yarn federation模式是如何支援跨集群的資源申請的呢?答案是通過router,policy generator和amrmproxy三者的協調合作來完成了。資源申請的基本原則是基於yarn內部的資源reservation apis來做。而對於每個集群具體申請多少量,則根據每個集群的實際狀態資訊,policy generator進行策略寫入。這個策略資訊裡包括了每個集群的資源申請量等等資訊。然後amrmproxy隨後讀取策略資訊,再進行具體的資源預留申請,流程圖如下所示。
鑑於部分應用可能會存在跨多個集群執行的情況,客戶端向router查詢應用狀態資訊時,需要廣播請求到所有的rm,最後再合併查詢結果返回給客戶端。
以上是原始設計文件的設計思路,不過筆者目前並不確定是否完全照此方案實現,具體實現還得當前**的實現方案。
hdfs在後期設計實現的基於路由的federation方案,與yarn federation有著高度的相似性,包括裡面有完全功能類似定義的state store,router的角色定義,不過目標服務由於rm變為了nn。不過筆者對比這2者一些小細節設計上的差異,yarn federation在排程上會更複雜一些,它不僅僅有router policy定向還有乙個amrmproxy的**角色,而hdfs rbf則只有router這麼一層中轉處理。
container of 的的的原理
另外一篇,同樣精彩,揭開linux核心中container of的神秘面紗 華清遠見嵌入式學院講師。在linux 核心中有乙個大名鼎鼎的巨集container of 這個巨集是用來幹嘛的呢?我們先來看看它在核心中是怎樣定義的。呵呵,乍一看不知道是什麼東東。我們先來分析一下container of p...
存在的就是合理的,發生的即是必然的。
筆者有時候會想,什麼是對,什麼是錯?對於追求某一件事情之前首先會考慮,為什麼我要做這件事情。所以經過自我分析和生活周邊環境的總結。我認為,對於乙個人來,這是在站在個體的角度上說。什麼是對的?就是你自己覺得是對的,它就是對的。不過這個只是你自己的想法。主觀上的正確,不代表客觀上也受到了別人的認可。就拿...
Apache的rewrite的重寫相關的引數
apache mod rewrite規則重寫的標誌一覽 使用mod rewrite時常用的伺服器變數 rewriterule規則表示式的說明 匹配任何單字元 chars 匹配字串 chars chars 不匹配字串 chars text1 text2 可選擇的字串 text1或text2 匹配0到1...