生产背景

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节点。即达到了需求。于是按照这样做去打非独占标签。

【逆向思维】yarn node label生产共用问题

结果打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节点

【逆向思维】yarn node label生产共用问题

修改presto resources-default.json,将worker节点的label设置为空

【逆向思维】yarn node label生产共用问题

启动presto,节点设置与期望的一致

【逆向思维】yarn node label生产共用问题

清空worker节点标签

【逆向思维】yarn node label生产共用问题

跑一个mapreduce任务,查看任务是否能泡在除018所有节点

map 159个,reduce 1个

【逆向思维】yarn node label生产共用问题

map节点

【逆向思维】yarn node label生产共用问题

【逆向思维】yarn node label生产共用问题

 

 

【逆向思维】yarn node label生产共用问题

恩已断,义当绝!

相关文章:

  • 2021-09-01
  • 2022-01-12
  • 2021-10-23
  • 2021-12-29
  • 2022-02-14
  • 2021-07-19
  • 2021-09-19
猜你喜欢
  • 2021-11-01
  • 2022-02-03
  • 2021-04-22
  • 2022-12-23
  • 2021-08-21
  • 2021-12-31
  • 2021-05-05
相关资源
相似解决方案