随着数据量的指数型增长,以及Hadoop生态系统的不断完善,越来越多的公司选择Hadoop作为数据仓库,并在大数据集群上架设了越来越多的相对复杂的应用场景需求。在公司内部,多用户业务应用架设在同一个Hadoop集群上,容易出现数据与集群资源混乱无序的状态,需要建立统一的调度平台实现数据统一管理、任务合理化调度,集群资源按需分配;
从集群使用角度延申,Hadoop大数据平台多租户管理实现在以下几点实现:
一、集群使用认证:
不能随便某个用户就可以直接登录大数据平台,必须有一个开关,将大数据开发平台整体隔绝。目前绝大部分公司使用Kerberos组件进行认证管理。
大致的做法为,大数据平台设置某公共堡垒机(大业务应用系统可以使用专用堡垒机),多租户登陆堡垒机后,通过Kerberos认证成功后,才能使用大数据平台,并且设置失效时间。Kerberos可以将认证的密钥在集群部署时事先放到可靠的节点上。集群运行时,集群内的节点使用密钥得到认证。只有被认证过节点才能正常使用。企图冒充的节点由于没有事先得到的密钥信息,无法与集群内部的节点通信。
二、数据库管理
多租户模式下,数据安全是最重要的问题,集群需要将不同用户的数据统一管理运维,对不同的数据进行权限隔离。Hadoop集群数据存储主要依赖HDFS,主要从以下几个方面进行多租户下数据层的管理:
(1)首先内部应制定并严格遵守hadoop集群数据存放管理规则。
示例一存放规则:第一级别目录:(公共资源、不同用户)
第二级别目录:(数据类型)
第三级别目录:(时间)
规则的指定需要严加执行。
同时为了保证对各用户独立数据资源量的可控,需要对其设置数据存储的上线(50%三级;75%二级;90%一级)可在集群监控中进行每日调度监控。
(2)目录权限控制:
在数据资产价值日益凸显,以及数据安全日益重要的情况下,应严格控制数据获取权限,特别在某些金融行业,客户的隐私尤为重要。
多租户下,hadoop生态系统有Ranger、Sentry两个组件。大致功能一样,可以对Hive、Hbase细粒度级、基于角色的授权。最近在搞ranger,ranger(HD出品)支持的组件相对较多。同时Cloudra公司在研发一种更好的权限控制组件。
(3)数据库使用权限控制:
hadoop生态圈使用加多的数据库主要有HBase、Hive等,大致都支持多schema分离设置。可以通过数据库分区与存放目录权限结合起来控制数据访问。
三、资源管理
(1)资源隔离
在操作系统层面和服务层面(YARN)都可以做资源隔离。
(1.1)服务层面, Hadoop资源池(pool),或者作业池的分配主要依赖yarn组件(相对较多的计算引擎都支持yarn管理)。 每个pool里有一定量的资源(管理员配置),每个用户属于某个pool,其提交的作业可使用这个pool中的资源。资源的分配主要是依据CPU虚拟核数和内存量。另外个别组件有单独的多租户管理,但是在一个统一的大数据平台上,还是用yarn统计管理的好。
(1.2)操作系统层Linux用CGROUPS做静态资源隔离。2006年 Google工程师在创建 CGROUPS这个特性的时候,本来的名字不是 CGROUPS,而是进程容器,这也是这个特性的本意,就是在 Linux内核级别创建一个容器的概念,使得这些进程只竞争容器内部的资源。容器内的应用不会收到容器外的应用对于操作系统资源,CPU、内存、网络 IO、句柄的侵占,运行出现问题。CGROUPS同时也是 Docker的底层技术,Docker在 CGROUPS的基础之上,实现了更加广泛和易用的接口,和建立的一个广泛的生态。个别公司的大数据平台已经实现Docker底层资源隔离(星环的TDH)
(2)资源调度
在 Hadoop集群中 ,由于资源是有限的,多租户环境下会有很 多作业在同时运行,因此,资源的合理 分配和回收对多租户来讲相 当重要。多租户环境通常用到的是公平调度策略。因为这种高度既能让长时间运行的作业及时完成,也能并发的运行占用资源少的作业 。
还是主要使用yarn的公平调度,这是一种赋予作业(job)资源的方法,它的目的是让所有的作业随着时间的推移,都能平均的获取等同的共享资源。当单独一个作业在运行时,它将使用整个集群。当有其它作业被提交上来时,系统会将任务(task)空闲时间片(slot)赋给这些新的作业,以使得每一个作业都大概获取到等量的CPU时间。
四、系统接入管理
外部用用系统应用工程全部部署在堡垒机专有用户下的目录中,同时只将部署在堡垒机上的应用作为后台处理使用。
通过以上设置,一个大数据平台可以从三个视角实现多用户隔离:
一是逻辑隔离。
从租户的角度出发,每个租户都有自己独立的逻辑模型,拥有自己独立的资源以及基于相同的逻辑模型实现的统一授权模型。
二是资源隔离。
对于不同租户的任务,在集群运行时,能够实现统一的、全局最优的任务调度能力以及资源隔离能力。
三是运行隔离机制。
用户任务请求运行在yarn调度上,相互无影响,各进行隔离。
目前在工作中才开始使用ranger作为目录权限控制,后续待将以下整体实现下,然后将各个部署再总结下。好的总结是成功的开始,Good Luck。