HADOOP平台下的多租户架构实现一、背景:伴随着移动数据量的不断增长,在通讯行业引入大数据技术势在必行,目前安徽省移动数据增长量为20T每天,预计在4G普遍使用后,数据增长量能达到每天30T,需要的数据存储将达到30-50PB。针对如此大的数据量以及相对复杂的应用场景需求,采用Hadoop数据仓储是最优选择。根据大数据处理理论,集群节点数越多,集群规模越大,集群的数据处理能力越强;因此,理想状态是只建立一个大的Hadoop集群,承载所有适用于Hadoop集群的业务,不仅可以提升集群处理能力,而且可以减少数据冗余,节约存储成本。但是如果将多业务应用统一部署在一个集群上,即实现Hadoop集群的多租户模式,则容易出现数据和集群资源管理混乱无序的情况,安徽公司针对这种多部门共用一个集群的情况,通过建立统一调度平台,实现了数据统一化管理,任务合理化调度,集群资源按需分配。二、模块介绍:Hadoop统一调度平台,从功能上可以分为三个模块,分为数据管理模块、任务调度模块和资源分配模块,下面分别详细介绍一下这三个不同模块的作用:数据管理模块在多租户模式下,数据的安全性是最重要的问题,集群需要将不同用户的数据统一管理运维,对不同用户的数据进行权限隔离,这里的用户即是指使用Hadoop集群的公司内不同部室或项目团队。由于在Hadoop集群中,数据以文件形式,按照特定规则存放在HDFS的不同目录下,所以数据管理模块最重要的是制定并严格遵守Hadoop集群数据存放管理规则,将不同类型数据分别放入规定的目录下存放。Hadoop可以对不同目录给不同用户赋予不同的权限,从而实现对数据的统一管理。
第一级目录为用户级,不同用户拥有自己的私有目录,每个用户没有访问其他用户目录的权限,同时设置有公共目录,集群用户有访问公共目录的权限。第二、三级目录可以分别按照数据类型和时间对数据进行划分,保证数据存放规范。为了保证对各用户的独立数据资源池数据量的可控,需要对其设置数据存储的上限;而HDFS无法直接设置某目录下文件系统大小的阀值,需要通过监控手段增加相应告警机制,一旦用户独立数据资源池大小即将达到阀值,提醒集群维护人员与相应用户联系清减资源池。任务调度模块Hadoop集群中,任务执行本身不存在优先级的概念,任务执行采用先进先出的策略。但是每个任务由于对应的业务不同存在优先级的高低,而Hadoop集群中任务执行时间有可能会很久,这样会出现长任务影响其他任务运行,特别是优先级更高的任务运行,所以需要对Hadoop集群的任务执行进行调度。首先通过对每个任务运行时间进行监控,搜寻到运行时间较长的任务,再通过任务调度模块将优先级低占用集群资源大的长任务中止,保证优先级高的任务顺利执行,最后对该长任务进行分析,判断该任务是由于并发量大,算法较复杂造成,还是由于该任务算法存在问题导致,如果是前者,待集群闲时再执行该任务,如果是后者,则与开发人员联系优化算法。
集群资源分配模块在Hadoop2.0以后,使用Yarn架构取代了1.0的Mapreduce架构,Yarn通过ResourceManager将集群资源在不同任务队列间进行分配,通过对不同任务队列分配不同的集群资源,最终实现对不同优先级任务的差异化管理。对于Yarn中的一个任务队列(Query),有几个可以设置的参数,分别是MIN,MAX,权重值。其中MIN表示为该任务队列最少占有资源量,MAX表示为该任务队列最多占有资源量,权重值表示为各任务队列获得集群资源的比例。举一个例子,假如某集群有3个任务队列,分别为队列A、队列B和队列C,系统可分配内存资源总共为420GB,首先调整各队列参数为:队列名最小内存(GB)最大内存(GB)权重值A504203B1004202C2704201情景1情况1下,队列A、B、C获取的集群内存资源分别为50GB、100GB、270GB。(按照MIN原则分配)。这时如果出现A任务队列空闲,则集群会将分配到任务队列A的内存资源按照权重值规则分配给任务队列B和C,任务队列B和C的权重值分别为2和1,则如果单纯按权重值来分配内存资源的话,任务队列B、C获得的内存资源分别为280GB和140GB,加上MIN参数的制约,最终B、C任务队列获取的内存资源为150GB、270GB。如果A任务队列重新启任务,则系统会重新将集群内存资源分配调整为队列A50GB,队列B100GB,队列C270GB。将各队列参数动态调整为:队列名最小内存(GB)最大内存(GB)权重值A504203B504202C504201情景2情景2下,由于集群资源在满足各任务队列最小内存需求后还有多余资源,则集群会按照任务队列不