知识卡片
YARN基于标签的调度:用逻辑标签而非物理隔离,实现异构集群的动态划分
内容
公司的Hadoop集群往往是异构的——不同批次采购的机器配置差异很大(比如早期采购的24GB内存机器、后来的48GB机器、最近的128GB内存机器),而不同类型的计算任务对硬件资源的敏感度也不一样(Spark这类计算密集型任务,机器配置越好跑得越快;MapReduce这类离线任务对资源要求相对没那么苛刻)。YARN在2015年推出的基于标签的调度机制,解决的正是”如何让合适的任务运行在合适的机器上”这个问题:管理员可以给每个NodeManager打上一个或多个标签(本质就是字符串),再在调度器里配置资源队列和标签之间的对应关系,这样就相当于用逻辑标签把一个物理上统一的集群,划分成了若干个逻辑上相互独立(也可能交叉)的子集群——这种划分方式和真正物理独立的多个集群有本质区别:物理隔离一旦确定就很难调整,而基于标签的逻辑划分可以随时通过动态调整标签,灵活地增减某种类型节点的数量,具备很好的弹性。真实案例包括:一个20台服务器(一半高配、一半低配)的集群,希望Spark作业只跑在高配置的NodeManager上(避免和低配机器混跑时被慢节点拖累整体进度);一个1000台机器的集群,因为Docker engine的安装和维护比较麻烦,只希望在其中10台NodeManager上开启Docker支持——这两种需求都可以通过标签调度优雅地解决。这个案例给出了一条资源管理领域的重要设计思路:当一个集群内部存在天然的异构性(硬件配置差异、能力差异),而不同的工作负载对这种异构性又有不同的偏好或要求时,与其把集群按物理边界拆分成多个完全独立、难以灵活调整比例的子集群,不如引入一层轻量的逻辑标签机制,让”哪些节点服务哪类任务”这个映射关系可以随着业务需求的变化被动态、低成本地重新配置——这种”逻辑划分优于物理划分”的思路,在需要兼顾隔离性和灵活性的资源管理场景里具有普遍参考价值。