关键词:
分布式系统
纠删码
数据布局
批处理任务
作业调度
异构集群
摘要:
近年来,随着数据的爆发式增长,越来越多的分布式存储系统开始集成纠删码机制,以便在保证高可靠性的基础上进一步降低系统的冗余存储开销。但由于纠删码机制的引入,数据在存储系统中的组织方式发生了改变。以Hadoop系统中实现的条带式纠删码策略为例,在进行条带编码时,原始数据相较于多副本方式被拆分为更细粒度的单元,分散在条带所在的全部节点,当上层MapReduce作业中的任务对原始数据中的一段连续内容进行访问时,纠删码模式下任务需要从多个节点获取数据。当Hadoop系统部署在异构集群环境以及集群各节点负载差异较大时,这种“一对多”的数据访问模式将可能会由于部分节点的数据传输不及时造成任务执行效率的降低,从而增加整个MapReduce作业的完成用时。此外,集群的异构环境和节点运行时负载差异本身也会造成MapReduce作业内部各任务的运行效率差异。因此,为了提升纠删码存储模式对上层MapReduce应用的服务性能,扩展纠删码的应用场景,本文提出了一种基于异构集群的MapReduce作业优化策略,其核心思想是通过修改存储侧的数据放置策略和计算侧的任务分配、作业调度模式,降低异构环境对纠删码存储模式下数据访问性能的消极影响,同时避免静态的任务分配模式放大节点负载差异,从而提升作业执行效率,工作内容主要可以概括为如下三个方面:(1)纠删码存储下作业友好的数据放置不同于Hadoop默认的数据块随机放置策略,本文提出一种基于节点硬件信息和长期后台负载的分组放置策略,我们称之为异构感知的数据放置策略(Heterogeneous-aware Data Placement Algorithm,HDPA),通过对集群各节点的数据访问性能进行分析,将访问性能接近的节点分为一组,当数据以纠删码模式写入系统时,HDPA使同一条带的数据块尽可能放在性能接近的一组节点,避免对条带进行访问时出现掉队节点,提升MapReduce作业对纠删码数据的访问速度。(2)异构环境下负载均衡的任务分配针对Hadoop系统默认的随机任务分配方式造成的节点计算负载偏斜问题,本文基于一般的异构集群环境提出一种动态的任务分配策略(Dynamic Task Allo-cation Algorithm,DTAA),通过在计算节点引入性能分析模块,动态地调节每一个节点上可用于MapReduce作业的计算单元数量,从而实现对集群整体任务并发量的控制,避免由于部分节点负载过高产生严重的长尾任务,影响MapReduce作业性能。(3)多作业并发场景下负载均衡的作业调度Hadoop现有的几类作业调度模式均未考虑到对底层数据访问负载的均衡,静态的资源划分配置也不能很好地适应集群异构环境和变化的负载。本文提出一种负载动态均衡的公平作业调度策略(Dynamic Balanced Fair Scheduling Algo-rithm,DB-Fair),通过在调度器中统计各作业对应数据集在HDPA分组放置策略下的存储信息,以及各节点在DTAA任务分配策略下的可用计算单元的限制情况,动态决定当前各作业可在集群中运行的任务数量和任务优先级,从而保证当数据以多种纠删码模式在系统中存储时,作业在集群中的任务分配对存储节点的访问热度,以及对各计算节点的硬件占用都达到相对均衡的状态,以加快多作业并发场景下的作业执行效率。通过在真实异构集群中部署我们提出的方案,实验结果表明,在不同类型的MapReduce作业中,我们的方案能够提升10%-40%的作业执行效率。在多作业并发场景下,我们的方案能够将全部作业的完成时间缩短约17%。