关键词:
大数据处理
批处理
流处理
作业调度
数据划分
摘要:
高效大数据处理是获取大数据价值的重要支撑技术。由于大数据处理系统中的资源是有限的,通过高效的调度充分利用可用资源是提升系统性能的基础。大数据处理系统中的调度主要包括作业调度和数据划分两方面。作业调度指将作业中的计算任务分配到计算资源上执行。数据划分指在作业执行过程中将数据分发到不同的任务上处理。现有的大数据处理系统通过采用内存计算等技术降低了磁盘I/O开销,制约系统性能的主要因素包括计算资源和网络资源是否充分利用两个方面。然而,当前大数据处理系统中存在计算与网络资源利用受限的问题。第一,集群中的可用计算资源分配受限。由于大数据处理作业中计算阶段间存在复杂的依赖关系,在某个计算阶段所依赖的其它阶段完成前,系统无法调度此阶段执行,导致可用资源难以被分配给作业。第二,任务上的计算资源利用受限。由于实际系统中的数据存在倾斜分布特征,现有基于哈希的数据划分方式会导致同一个计算阶段内不同任务上负载不均。负载较低的任务执行较快,而执行完成后由于任务上缺少需要处理的数据,导致空闲的计算资源无法被该任务利用,也无法释放给同一计算阶段的其它任务利用。第三,传输链路上的网络资源利用受限。现有大数据处理系统往往通过提升任务数据本地性的方式降低作业输入阶段传输数据量,使得处理输入数据的任务在不同机架上分布不均,进而导致中间结果传输阶段中不同网络链路上负载不均。负载较轻的链路传输较快,而传输完成后由于链路上缺少需要传输的数据,导致空闲的网络资源无法被利用。针对上述问题,围绕“高效资源利用”的核心目标开展了大数据处理系统中调度技术的研究,具体包括以下三个方面。针对任务依赖关系导致的集群中可用计算资源分配受限的问题,提出了一种依赖感知的DAG作业调度机制Argus,提升了作业调度时的计算资源利用率。首先,通过监测作业执行过程,发现了计算阶段间依赖关系导致系统有空闲资源而计算阶段无法调度的问题,分析揭示了可并行调度阶段间的调度顺序会影响资源利用率。然后,提出了基于阶段间依赖关系确定阶段调度顺序的思想,并通过充分利用已知的作业DAG结构信息,基于启发式算法确定多个可并行调度阶段之间的优先级,提升了计算资源利用率。最后,在Apache Spark上实现了Argus,并使用从实际系统中收集到的大规模数据集进行了全面的系统性能评估。实验结果表明,与现有的设计相比,Argus将单作业完成时间和多作业完成时间分别缩短了38%和31%。针对任务负载倾斜导致的计算资源利用受限的问题,提出了一种任务负载感知的差异化数据划分机制Astraea,提升了任务执行时的计算资源利用率。首先,通过对数据分布特征进行分析,揭示了基于哈希的数据划分策略会导致不同任务上负载倾斜,进而导致任务上有空闲计算资源而没有需要处理的数据的问题。然后,利用流水线并行的思想,提出了基于数据频率信息确定划分策略的原则。为了避免全局统计中间结果数据频率的开销,设计了差异化数据划分方法。对于少数高频键值,利用数据缓存阶段就可用的输入数据统计信息;而对于其余的大部分低频键值,利用精确的map本地输出数据统计信息。最后,在Spark Streaming上实现了Astraea,并使用多个大规模真实数据集进行评估。实验结果表明,与国际上最新的设计相比,Astraea将计算任务的负载倾斜程度降低了42%,系统吞吐量提高了27%。针对不同传输链路上负载不均导致的网络资源利用受限的问题,提出了一种网络负载感知的副本任务调度机制Shadow,提升了数据传输时的网络资源利用率。首先,通过检测作业中不同阶段的执行时间,发现了在Map Reduce计算框架中map阶段保证任务数据本地性会导致shuffle阶段执行时间长的情况,进而分析揭示了shuffle期间由于不同跨机架链路上负载不均,导致链路上有空闲网络资源而没有需要传输的数据的问题。然后,基于“power of choice”的原则,提出了使用副本任务平衡链路负载的方法。为了平衡网络链路负载,迭代地从负载最重的机架中选择原始map任务,并为其在负载最轻的机架上创建副本任务。通过有效地预测作业执行时间,在原始任务和其副本之间做出选择。最后,通过进行广泛的实验评估了Shadow系统的性能。实验结果表明,与现有工作相比,Shadow将跨机架链路负载倾斜度降低了36.6%,作业执行时间降低了26%。