一种Spark集群系统的在线优化分区的任务调度方法及装置制造方法及图纸

技术编号:19341408 阅读:28 留言:0更新日期:2018-11-07 13:38
本发明专利技术公开了一种Spark集群系统的在线优化分区的任务调度方法,属于在线集群资源调度技术领域。本发明专利技术所述方法包括步骤:统计上游Stage输出数据量大小、参与作业执行的总CPU核数、内存总量以及用于拉取数据的内存比例;根据输出数据量与用于拉取数据的内存容量的大小关系,计算任务执行的轮数,并设置优化的分区数量;监测计算节点的平均CPU利用率、内存利用率,对各计算节点的资源利用水平进行评估;降序排序所有节点的资源利用水平,优先调度任务给资源利用水平最高的节点执行;重复上述步骤直到所有任务调度完成。本发明专利技术能够自动配置优化的分区数量,提高集群的资源利用率,加快Spark作业的执行速度。

A task scheduling method and device for online optimization partition of Spark cluster system

The invention discloses an on-line optimal partition task scheduling method for Spark cluster system, which belongs to the technical field of on-line cluster resource scheduling. The method comprises the following steps: counting the amount of output data from upstream Stage, the total CPU core participating in job execution, the total amount of memory and the proportion of memory used for pulling data; calculating the number of rounds of task execution according to the relationship between the amount of output data and the amount of memory used for pulling data, and setting the optimized number of partitions. Quantity; Monitor the average CPU utilization and memory utilization of computing nodes, and evaluate the resource utilization level of computing nodes; rank the resource utilization level of all nodes in descending order, and give priority to scheduling tasks to the nodes with the highest resource utilization level; repeat the above steps until all tasks are scheduled. The invention can automatically configure the optimized number of partitions, improve the resource utilization rate of the cluster, and speed up the execution speed of Spark jobs.

【技术实现步骤摘要】
一种Spark集群系统的在线优化分区的任务调度方法及装置
本专利技术属于在线集群资源调度
,具体涉及一种Spark集群系统的在线优化分区的任务调度方法及装置。
技术介绍
Spark是一个以可靠、高效、可伸缩的方式对大量数据进行分布式处理的内存计算框架。Spark集群主要的构件部署分为SparkClient、SparkContext、ClusterManager、Worker和Executor等,如图1所示。SparkClient用于用户提交应用程序到Spark集群,而SparkContext用于负责与ClusterManager进行通信,进行资源的申请、任务的分配和监控等,负责作业执行的生命周期管理。ClusterManager提供了资源的分配与管理,在不同的运行模式下,担任的角色有所不同。当SparkContext对运行的作业进行划分并分配资源后,会把任务发送到Worker节点上的Executor进行运行。许多应用程序的配置参数会影响Spark的执行性能,例如任务并行性,数据压缩以及Executor的资源配置。在Spark中,输入数据或中间数据被分成多个逻辑分区,集群中的每个计算节点处理一个或多个分区。用户可以配置每个Spark作业的分区数量和数据分区方式,不理想的任务分区或选择非最佳分区方案可能会显着增加工作负载的执行时间。例如,如果分区策略在计算阶段内启动太多任务,则会导致CPU和内存资源的竞争,从而导致性能下降。相反,如果启动的任务太少,系统的资源利用率会降低,同样会导致性能下降。Spark为用户提供了两种控制任务并行性的方法。一种方法是使用配置参数spark.default.parallelism,该参数为未指定分区数量时使用的默认任务数。第二种方法是使用重新分区API,它允许用户重新分区数据。Spark不支持在不同计算阶段之间更改数据并行性,除非用户在程序中手动通过重新分区API更改分区数。此种方法具有很大的局限性,因为分区的最佳数量可能受数据大小的影响,每次处理不同数据集时,用户都必须更改分区数并重新编译程序。此外,不合适的任务调度方法可能会拖慢作业的执行进度,导致某些任务的完成时间比其他任务长得多。由于数据处理框架通常在计算阶段之间具有同步屏障,所以让处于同一阶段中的所有任务同时完成是至关重要的,以避免短腿任务阻碍其他运行速度快的任务。正确的数据分区方案以及任务调度方法是从底层硬件资源中提高性能的关键,但是,找到一个能够提供最佳性能的数据分区方案以及任务调度方法并非易事。这是因为,数据分析工作流程通常涉及复杂的算法,例如机器学习和图处理。因此,随着多个计算阶段的增加,所产生的任务执行计划可能变得非常复杂。此外,考虑到每个计算阶段不同,每个阶段的最佳分区数量也可能不同,这使问题更加复杂。
技术实现思路
本专利技术的目的是克服现有技术的缺陷,提供一种Spark集群系统的在线优化分区的任务调度方法及装置。本专利技术所提出的技术问题是这样解决的:一种Spark集群系统的在线优化分区的任务调度方法,包括以下步骤:步骤1.统计上游Stage(阶段)输出数据量大小、参与作业执行的总CPU核数、内存总量和用于拉取数据的内存比例;步骤2.根据输出数据量与用于拉取数据的内存容量的大小关系,计算任务执行的轮数,并设置数据的分区数量;步骤3.监测计算节点的平均CPU利用率和内存利用率,对各计算节点的资源利用水平进行评估;步骤4.降序排列所有节点的资源利用水平,优先调度任务给资源利用水平最高的节点执行;步骤5.重复步骤3-步骤4,直至所有任务调度完成。步骤1中,上游Stage输出数据量大小其中,si为第i个计算节点上任务输出数据量大小,1≤i≤n,n为计算节点的数量;参与作业执行的总CPU核数其中,CPUapp(i)为第i个计算节点上用于应用程序的CPU核数;内存总量其中,Memapp(i)为第i个计算节点上用于应用程序的内存容量;用于拉取数据的内存比例α从Spark参数配置文件中读取。步骤2中,用于拉取数据的内存容量的大小为Memoryapp×α,将输出数据量S与用于拉取数据的内存容量Memoryapp×α进行大小比对:当S≤Memoryapp×α时,任务执行的轮数r=1,数据的分区数为Coreapp;当S>Memoryapp×α时,任务执行的轮数r=ceil(S/(Memoryapp×α)),其中ceil表示向上取整,数据的分区数为Coreapp×r。步骤3中,为了减少计算节点CPU利用率或内存利用率的抖动误差,引入控制系统理论中的一种负反馈调节机制,CPU利用率或内存利用率的负反馈调节机制为:其中,tj为第j个时刻,j为≥0的整数,Ui(tj)为当前时刻第i个计算节点的CPU利用率或内存利用率,Ui(tj-1)为上一时刻的第i个计算节点的CPU利用率或内存利用率,Ui′(tj)为当前时刻第i个计算节点的CPU或内存利用率的监测值。计算节点的资源利用水平是随着其资源使用状况动态变化的,需要在任务开始分配时对每个计算节点的资源利用水平进行度量,以此决定调度任务到哪个节点上执行。计算节点的资源利用水平由计算节点剩余可用CPU核数、CPU的主频大小、当前CPU利用率、当前内存利用率以及历史CPU利用率的熵值共同决定,即计算节点的资源利用水平与节点硬件属性以及资源利用率高度相关,计算节点剩余可用CPU核数越大、CPU的主频越大、当前CPU利用率越低、当前内存利用率越低、历史CPU利用率的熵值越小,该计算节点的资源利用水平越高,分配任务时具有优先分配权。第i个计算节点的资源利用水平RLi的计算公式为:RLi=AvailableCoresi×Speedcpu×(1-Ri,cpu)×(1-Ri,mem)×(1-Ei)其中,AvailableCoresi为第i个计算节点的可用CPU核数,Speedcpu为计算节点CPU的主频大小,Ri,cpu为第i个计算节点的当前CPU利用率大小,Ri,mem为第i个计算节点的当前内存利用率大小,Ei为第i个计算节点的历史CPU利用率的熵值,反映CPU利用率的波动。第i个计算节点的历史CPU利用率的熵值Ei=-(c1×log2c1+c2×log2c2),其中,c1为历史CPU利用率中CPU利用率值大于等于CPU平均利用率的次数,c2为历史CPU利用率中CPU利用率值小于CPU平均利用率的次数。步骤4中,任务分配时主要采取贪心策略,首先按照资源利用水平降序排列所有计算节点,然后遍历所有任务,将任务分配到资源利用水平最高的计算节点上,如果该计算节点的可用CPU核数大于每个任务需要的CPU核数(默认为1核),则在当前计算节点上分配该任务,同时更新该计算节点的可用CPU核数,任务后续将在该计算节点上上以最大的数据本地性运行;如果任务需要分配多轮,则重复步骤3-4直到所有任务分配完成。本专利技术还提供了一种Spark集群系统的在线优化分区的任务调度装置,包括:(1)信息收集模块:统计上游Stage输出数据量大小、参与作业执行的总CPU核数、内存总量和用于拉取数据的内存比例;(2)分区优化模块:根据输出数据量与用于拉取数据的内存容量的大小关系,计算任务执行的轮数,并设置数据的分区数量;(3)节点监测模本文档来自技高网
...

【技术保护点】
1.一种Spark集群系统的在线优化分区的任务调度方法,其特征在于,包括以下步骤:步骤1.统计上游Stage输出数据量大小、参与作业执行的总CPU核数、内存总量和用于拉取数据的内存比例;步骤2.根据输出数据量与用于拉取数据的内存容量的大小关系,计算任务执行的轮数,并设置数据的分区数量;步骤3.监测计算节点的平均CPU利用率和内存利用率,对各计算节点的资源利用水平进行评估;步骤4.降序排列所有节点的资源利用水平,优先调度任务给资源利用水平最高的节点执行;步骤5.重复步骤3‑步骤4,直至所有任务调度完成。

【技术特征摘要】
1.一种Spark集群系统的在线优化分区的任务调度方法,其特征在于,包括以下步骤:步骤1.统计上游Stage输出数据量大小、参与作业执行的总CPU核数、内存总量和用于拉取数据的内存比例;步骤2.根据输出数据量与用于拉取数据的内存容量的大小关系,计算任务执行的轮数,并设置数据的分区数量;步骤3.监测计算节点的平均CPU利用率和内存利用率,对各计算节点的资源利用水平进行评估;步骤4.降序排列所有节点的资源利用水平,优先调度任务给资源利用水平最高的节点执行;步骤5.重复步骤3-步骤4,直至所有任务调度完成。2.根据权利要求1所述的Spark集群系统的在线优化分区的任务调度方法,其特征在于,步骤1中,上游Stage输出数据量大小其中,si为第i个计算节点上任务输出数据量大小,1≤i≤n,n为计算节点的数量;参与作业执行的总CPU核数其中,CPUapp(i)为第i个计算节点上用于应用程序的CPU核数;内存总量其中,Memapp(i)为第i个计算节点上用于应用程序的内存容量;用于拉取数据的内存比例α从Spark参数配置文件中读取。3.根据权利要求2所述的Spark集群系统的在线优化分区的任务调度方法,其特征在于,步骤2中,用于拉取数据的内存容量的大小为Memoryapp×α,将输出数据量S与用于拉取数据的内存容量Memoryapp×α进行大小比对:当S≤Memoryapp×α时,任务执行的轮数r=1,数据的分区数为Coreapp;当S>Memoryapp×α时,任务执行的轮数r=ceil(S/(Memoryapp×α)),其中ceil表示向上取整,数据的分区数为Coreapp×r。4.根据权利要求3所述的Spark集群系统的在线优化分区的任务调度方法,其特征在于,步骤3中,为了减少计算节点CPU利用率或内存利用率的抖动误差,引入控制系统理论中的一种负反馈调节机制,CPU利用率或内存利用率的负反馈调节机制为:其中,tj为第j个时刻,j为≥0的整数,Ui(tj)为当前时刻第i个计算节点的CPU利用率或内存利用率,Ui(tj-1)为上一时刻的第i个计算节点的CPU利用率或内存利用率,Ui′(tj)为当前时刻第i个计算节点的CPU或内存利用率的监测值。5...

【专利技术属性】
技术研发人员:田文洪叶宇飞王金许凌霄匡平
申请(专利权)人:电子科技大学
类型:发明
国别省市:四川,51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1