Yarn (转自之乎者也)

作者:青俞
链接:https://www.zhihu.com/question/34016617/answer/57822812
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Yarn设计的初衷就是为了在同一套集群上面跑不同的应用框架。至于为什么要在同一套集群上面跑不同的应用则是出于提高集群资源利用率的角度考虑的。

不同的分布式框架各有优势,针对的业务场景是不一样的。MapReduce能更好的处理大批量的ETL业务而Spark则相对更为专注于Machine Learning。对于公司而言,这些业务如果能在同一集群上面跑则能有效降低成本。要允许不同框架同时运行在同一集群,最首要解决的问题就是如何分配资源。在没有Yarn的时候,一个比较简单的做法是,假设集群有100台机器,我们将50台机器分配给Spark,将另外50台分配给MapReduce任务。这样做似乎并没什么不妥。但是假设每天我们跑MapReduce的任务时间只有1小时,其他大部分时间都是在跑Spark,那么一天里面有23小时,50台机器都处于空闲状态,而Spark的机器则很可能有大量的作业在排队。这显然不是一个很有效利用集群的方法。

Yarn全称为Yet Another Resource Negotiator。 顾名思义,他就是一个资源管理工具。在全局范围里面,他知道集群有哪些空闲的机器。当用户提交作业时,Yarn只需要分配用户要求的资源,然后由作业自身去调用,配置和管理相应的运算框架。这样可以有效地避免上面提到的问题。再进一步说,Yarn将可分配的资源抽象为容器(Container),降低了资源分配的粒度。假如一台机器上面资源足够,则可能同时运行Spark和MapReduce两种作业。进一步提高了资源的利用率。

猜你喜欢

转载自www.cnblogs.com/tesla-turing/p/11635129.html