【逆向思维】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节点

 

 

恩已断,义当绝!

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