【逆向思維】yarn node label生產共用問題

生產背景

presto on yarn已經測試完畢,準備上生產,生產環境嚴格,不允許有任何影響生產的因素。生產共50個節點,要求是固定10臺節點跑presto,且不能影響原有的mapreduce(無標籤application)程序,即50臺節點也必須都能被mapreduce程序分配到。在之前的測試中,固定10臺節點中一臺打coordinator標籤,9臺打worker標籤,啓動presto。存在一個問題,就是mapreduce只能跑在除presto節點的另外40臺節點上,這必須解決。

 

方案思路

週一開始去查看node label相關的配置,發現在創建node label時,可以用exclusive=false(默認爲true,表示是獨佔標籤,意思是具有該label的節點只能被指定了該label的application使用,不能被其他label的application使用,比如不能被未指定label的application調度到)屬性,將label設置成非獨佔標籤,此時該標籤可以被no label的application調度,即未指定label的application可以同時使用no label節點和該非獨佔標籤的節點。按照該情況,只要將worker標籤設置成非獨佔標籤,原來的mapreduce仍然可以使用到那9臺(除去coordinator節點)固定的worker節點。即達到了需求。於是按照這樣做去打非獨佔標籤。

結果打exclusive=false的標籤報錯,查看多方資料,似乎是跟hadoop版本相關。我的版本是hdp2.7.1,而node label穩定版本是2.8.x。那麼這個方案就被否定了。之後又在標籤之間徘徊思考,看能否通過標籤的變化來達到需求,但總沒有想到辦法。

 

逆向思路

接連嘗試了3天,週四早上開車上班的途中突然靈光一閃,之前考慮的都是給那固定的10臺打標籤,是否可以反過來,給另外40臺打標籤呢,接着思路下去。想到了如下方案:

a 假定有101,102,103...110 十臺機器。 101打coordinator標籤,其餘需要有102,103,104,105 四臺跑worker節點
b 逆向,先將106-110打worker(隨便命名一個,不一定是worker)標籤,然後用no label標籤啓動presto的worker,此時presto worker就泡在102,103,104,105固定節點
c 將106-110的worker標籤清空,此時除101 coordinator外其他節點都是no label節點,mapreduce程序就能跑在除101 coordinator的其他節點。

非完美的解決了該問題。

 

驗證過程

需求:presto:coordinator跑在018,7臺worker泡在011,012,013,014,015,019,020.

          mapreduce:需要跑在除018的所有機器上

按照需求如下打節點標籤,018打coordinator,003,005,006,008打worker節點

修改presto resources-default.json,將worker節點的label設置爲空

啓動presto,節點設置與期望的一致

清空worker節點標籤

跑一個mapreduce任務,查看任務是否能泡在除018所有節點

map 159個,reduce 1個

map節點

 

 

恩已斷,義當絕!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章