---
title: 算法库混部方案介绍
description: "由于鲲鹏BoostKit大数据机器学习算法加速库只支持鲲鹏服务器，当客户在鲲鹏服务器与x86服务器混合部署的大数据集群中使用机器学习算法时，需要确保从Yarn申请的资源都是来自鲲鹏服务器才能保障采用机器学习算法的任务能够正常地运行。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2200/bds/kunpengbdssparkml_20_0025.html
sourcePath: /source/zh/kunpengboostkithistory/2200/bds/kunpengbdssparkml_20_0025.html
indexId: 1da131b4ffd8f9fa559916a13fcce4f8ef1e7035230f21d48f4304ba59f9c03573
---
# 算法库混部方案介绍

#### 简介

由于鲲鹏BoostKit大数据机器学习算法加速库只支持鲲鹏服务器，当客户在鲲鹏服务器与x86服务器混合部署的大数据集群中使用机器学习算法时，需要确保从Yarn申请的资源都是来自鲲鹏服务器才能保障采用机器学习算法的任务能够正常地运行。


#### 相关概念

- Yarn：Apache Hadoop YARN （Yet Another Resource Negotiator，另一种资源协调者）是一种新的Hadoop资源管理器，它是一个通用资源管理系统，可为上层应用提供统一的资源管理和调度，它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
- 队列（Queue）：对Yarn的资源进行管理，通过划分不同的队列，以控制不同用户可用的资源限制。
- 标签（Label）：Yarn的节点标签是一种将具有相似特征的节点分组的方法，可以让应用程序在指定的那些节点上运行。
- NodeManager（NM）：运行在单个节点上的代理，它管理Hadoop集群中单个计算节点，功能包括与ResourceManager保持通信、管理Container的生命周期、监测每个Container的资源使用（内存、CPU等）情况、采集节点健康状况、管理日志和不同应用程序用到的附属服务等。
- ResourceManager （RM）：一个仲裁整个集群可用资源的主节点，帮助Yarn系统管理其上的分布式应用。


#### 方案概述

通过将鲲鹏服务器节点和x86服务器节点划分为不同的队列，算法任务只能提交到鲲鹏队列，其他任务可以提交到鲲鹏队列或者x86队列。

混部集群部署架构图如图1所示。

图1 混部集群部署架构图

1. 方案具有以下特征和限制：

  - Spark任务会提交到Yarn的队列中运行，Yarn队列可以通过Node Labels特性来绑定多个标签，一个节点只可以配置一个标签，可通过指定特定的队列和标签来达到让任务在特定标签的节点上运行。
  - 将所有鲲鹏服务器增加特定标签，并将标签分配给鲲鹏boostkit队列，算法任务需提交到鲲鹏队列，非算法任务可提交到鲲鹏队列或x86队列。鲲鹏队列和x86队列是互斥的，同一个任务不能同时运行在鲲鹏队列和x86队列。
  - 大数据平台（比如：FusionInsight）需要开启节点标签功能，并为所有鲲鹏服务器节点配置相同的标签，同时为算法任务创建Yarn队列，再将鲲鹏服务器节点的标签授权给算法任务队列。
  - 算法应用ISV需将算法任务提交命令中的队列配置为鲲鹏boostkit队列，以确保算法任务会运行在鲲鹏服务器节点上。
2. 算法包的部署方式：

  - 算法库只需要部署在提交任务的客户端节点上，不需要在所有计算节点都部署。
  - 在任务提交后开源组件Yarn会负责将算法包分发到运行任务的鲲鹏服务器节点上，不需要开发/部署其它工具来进行该操作。


#### Yarn Node Labels概述

Yarn的节点标签是一种将具有相似特征的节点分组的方法，应用程序可以指定在那些节点上运行。

当前Yarn节点标签（分区）具有以下的限制和特征：

- 一个节点只能有一个节点标签，因此一个集群被节点标签划分为几个不相交的子集群。默认情况下，节点属于default分区(partition="")。
- 用户需要配置每个节点标签（分区）可以被不同队列使用多少资源。
- 节点标签（分区）有两种分别为：

  - 独占（exclusive）：容器将被分配给与节点标签（分区）完全匹配的节点。例如，请求partition= " x "将被分配给有partition= " x "的节点，请求DEFAULT partition将被分配给DEFAULT partition的节点。
  - 非排他性（Non-exclusive）：当一个分区是非排他性时，它会将空闲的资源共享给请求DEFAULT分区的容器。

用户可以指定每个队列可以访问的节点标签集，一个应用程序只能使用包含该应用程序的队列可以访问的节点标签的子集。
