多租户管理相关概念
传统上企业内每个部门都有它自己的私有集群满足计算资源,这通常会导致平均利用率较差,也有管理多个独立的集群的负担。
Hadoop 的多租户 Multi-tenancy 就是说一个 Hadoop 集群对多部门多用户进行服务,每一个用户被称之为租户 tenant。多租户允许企业客户用统一的平台对同一份数据来进行批处理、交互访问和实时处理,从而提高企业对 Hadoop 集群的利用率。
由于 Hadoop 集群的组件和服务众多,如 Spark、HBase、Hive、MapReduce 等,而且企业客户不同的部门和用户都有不同的任务运行,Hadoop 集群的多租户能力被设计为允许共享一个集群,同时给予每一个租户计算能力的保证。
Hadoop YARN 的核心服务 Resource manager 负责分配和回收资源。在企业级 Hadoop 集群中,由于资源是有限的,多租户环境会有很多作业在同时运行,因此资源分配和回收的是支持多租户的重要内容,这部分机制由 Resource Manager 插件式的全局调度器来管理和控制集群所有的容器(资源)。
根据需求和资源可用性不同,分为 FIFO Scheduler、Capacity Scheduler 和 Fair Scheduler 等不同的策略实现。多租户的环境通常会使用 Capacity Scheduler 或者 Fair Scheduler,因为这两种调度不仅能让长时间运行的作业及时完成,同时能让并发运行小的即席查询得到快速地响应。
FIFO Scheduler
最简单的调度器 FIFO 顾名思义,就是 First In First Out,按照先进先出的方式处理应用。只有一个队列可提交应用,所有用户提交到这个队列。FIFO scheduler 不需要配置,但它不适合多租户的场合,因为大型应用程序将用完集群的所有资源,其它应用程序都必须等待。
图 1. FIFO Scheduler
Fair Scheduler
公平调度器 Fair Scheduler 最初是由 Facebook 开发设计使得 Hadoop 应用能够被多用户公平地共享整个集群资源,现被 Cloudera CDH 所采用。
Fair Scheduler 不需要保留集群的资源,因为它会动态在所有正在运行的作业之间平衡资源。当第一个大作业开始后,如果这是唯一的作业,它会占据集群的所有资源。接着第二个小作业启动,Fair Scheduler 会让每个作业占据一半的集群资源以达到公平的资源分配。
在第二个小作业启动和分配到资源之间有延时,因为它必须等待第一个大作业资源释放。Fair Scheduler 是抢占式调度,如果在一段时间还没有收到公平的资源分配,调度器会关闭第一个大作业超出资源的部分来释放资源。
当第二个小作业完成,不再需要的资源之后,第一个大作业再次使用完整的集群能力。Fair Scheduler 既保证了集群的高利用率和及时的小型作业完成。
图 2. Fair Scheduler
Capacity Scheduler
容量调度器 Capacity Scheduler 最初是由 Yahoo 最初开发设计使得 Hadoop 应用能够被多用户使用,且最大化整个集群资源的吞吐量,现被 IBM Biginsights 和 Hortonworks HDP 所采用。
Capacity Scheduler 被设计为允许应用程序在一个可预见的和简单的方式共享集群资源,即"作业队列"。Capacity Scheduler 是根据租户的需要和要求把现有的资源分配给运行的应用程序。Capacity Scheduler 同时允许应用程序访问还没有被使用的资源,以确保队列之间共享其它队列被允许的使用资源。管理员可以控制每个队列的容量,Capacity Scheduler 负责把作业提交到队列中。
图 3. Capacity Scheduler
IBM BigInsights 的多租户管理
IBM Biginsights 是业界领先的 Hadoop 企业级发行版本,在世界著名 IT 行业独立研究公司 Forrester 从 2012 年到 2016 年发布的三次 Hadoop 解决方案的评测报告中,IBM BigInsights 一直处于领导者位置。IBM BigInsights 以 Apache Hadoop 及其相关开源项目作为核心组件,并在 Hadoop 开源框架的基础上进行了大量的企业化增强。