Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ResourceManager中的Resource Estimator框架介绍与算法剖析

ResourceManager中的Resource Estimator框架介绍与算法剖析

原创
作者头像
宋超
修改于 2018-08-12 02:24:25
修改于 2018-08-12 02:24:25
3.5K7
举报

本文首先介绍了Hadoop中的ResourceManager中的estimator service的框架与运行流程,然后对其中用到的资源估算算法进行了原理剖析。

一. Resource Estimator Service的出发点与目标

  估计作业运行使用资源是大数据处理集群的一个重要且具有挑战性的问题。随着用户使用的集群资源越来越多,这一需求被逐渐放大。当前现有的解决方案一般是依赖于用户的经验来对作业资源需求进行估计,这样即繁琐又低效。根据对集群工作负载的分析,可以发现大部分工作(超过60%)是重复工作,这样我们便有机会根据作业历史资源使用情况来估计作业下一次的资源需求量。同时,在未来,希望能提出一种与框架无关的黑盒解决方案。这样,即使作业来自不同的计算框架,我们也能对重复性作业进行资源需求估算。

二. Resource Estimator Service的框架结构

  Hadoop-resource estimator主要由三个模块组成:Translator,SkylineStore和Estimator。下面分别介绍这三部分。

1.ResourceSkyline用来表征作业在其生命周期中的资源利用率。它使用RLESparseResourceAllocation记录容器分配的信息。RecurrenceId用于标识重复pipeline的特定运行。pipeline可以包含多个作业,每个作业都有一个ResourceSkyline来表征其资源利用率。

2.Translator用来解析作业日志,提取他们的ResourceSkylines并将它们存储到SkylineStore。SingleLineParser解析日志流中的一行并提取ResourceSkyline。

3.SkylineStore充当Hadoop-resource estimator的存储层,由2部分组成。HistorySkylineStore存储由转换程序提取的ResourceSkylines。它支持四种操作:addHistory,deleteHistory,updateHistory和getHistory。addHistory将新的ResourceSkylines附加到定期pipeline,而updateHistory删除特定定期pipeline的所有ResourceSkyline,并重新插入新的ResourceSkylines。PredictionSkylineStore存储由Estimator生成的预测RLESparseResourceAllocation。它支持两个操作:addEstimation和getEstimation。

4.Estimator根据历史记录运行预测重复出现的pipeline资源需求,将预测存储到SkylineStore并在YARN上进行资源预留。Solver读取特定定期pipeline的所有历史ResourceSkylines,并预测其包含在RLESparseResourceAllocation中的新资源需求。目前,Hadoop-resource estimator提供了一个LPSOLVER来进行预测(其中用到的算法模型会在后面进行讲解)。

三.以示例demo演示其运行流程

  Resource Estimator Service的URI是http://0.0.0.0,默认服务端口是9998

(在$ ResourceEstimatorServiceHome/conf/resourceestimator-config.xml” 中配置)。 在$ ResourceEstimatorServiceHome/data中,有一个示例日志文件resourceEstimatorService.txt,其中包含2次运行的tpch_q12查询作业的日志。进行资源预测主要有以下几个步骤:

1.解析作业日志:

代码语言:txt
AI代码解释
复制
POST http://URI:port/resourceestimator/translator/LOG_FILE_DIRECTORY

发送

代码语言:txt
AI代码解释
复制
POST http://0.0.0.0:9998/resourceestimator/translator/data/resourceEstimatorService.txt

underlying estimator将从日志文件中提取ResourceSkylines并将它们存储在jobHistory SkylineStore中。

2.查询作业的历史ResourceSkylines:

代码语言:txt
AI代码解释
复制
GET http://URI:port/resourceestimator/skylinestore/history/{pipelineId}/{runId}

发送

代码语言:txt
AI代码解释
复制
GET http://0.0.0.0:9998/resourceestimator/skylinestore/history/*/*

underlying estimator将返回历史SkylineStore中的所有记录。在示例文件中能够看到两次运行tpch_q12的ResourceSkylines:tpch_q12_0和tpch_q12_1。

3.预测作业的资源使用情况:

代码语言:txt
AI代码解释
复制
GET http://URI:port/resourceestimator/estimator/{pipelineId}

发送

代码语言:txt
AI代码解释
复制
http://0.0.0.0:9998/resourceestimator/estimator/tpch_q12

estimator将根据其历史ResourceSkylines预测新运行的作业资源需求,并将预测的资源需求存储到jobEstimation SkylineStore。

4.查询作业的预测资源情况:

代码语言:txt
AI代码解释
复制
GET http://URI:port/resourceestimator/skylinestore/estimate/{pipelineId}

发送

代码语言:txt
AI代码解释
复制
http://0.0.0.0:9998/resourceestimator/skylinestore/estimation/tpch_q12

估算器将返回tpch_q12作业资源预测情况。

5.删除作业的历史资源情况数据:

代码语言:txt
AI代码解释
复制
DELETE http://URI:port/resourceestimator/skylinestore/history/{pipelineId}/{runId}

发送

代码语言:txt
AI代码解释
复制
http://0.0.0.0:9998/resourceestimator/skylinestore/history/tpch_q12/tpch_q12_0

underlying estimator将删除tpch_q12_0的ResourceSkyline记录。重新发送

代码语言:txt
AI代码解释
复制
GET http://0.0.0.0:9998/resourceestimator/skylinestore/history/*/*

underlying estimator只返回tpch_q12_1的ResourceSkyline。

四.资源预测算法中用到的数据介绍

  Hadoop-resource estimator的Translator组件会解析日志并将其按照一定规范的格式进行拼接,下面给出了示例中的资源历史使用数据和预测资源数据,可以看到作业的历史资源使用数据是同一个job的两次run,分别为tpch_q12_0和tpch_q12_1,其主要给出了随时间变化的memory和cpu的使用情况。其中第0时间单位表示的是container规格,为memory:1024,vcores:1,第25时间单位为作业结束时刻,memory和cpu皆为0。可以看到预测数据根据历史数据给出了10~25时间单位的资源预测数据。

历史资源使用数据:

代码语言:txt
AI代码解释
复制
[[{"pipelineId":"tpch\_q12","runId":"tpch\_q12\_0"},

[{"jobId":"tpch\_q12\_0","jobInputDataSize":0.0,"jobSubmissionTime":0,"jobFinishTime":25,"containerSpec":{"memory":1024,"vcores":1},

"skylineList":

{"resourceAllocation":{

"0":{"memory":1024,"vcores":1},

"10":{"memory":1099776,"vcores":1074},

"15":{"memory":2598912,"vcores":2538},

"20":{"memory":2527232,"vcores":2468},

"25":{"memory":0,"vcores":0}}}}]],

[{"pipelineId":"tpch\_q12","runId":"tpch\_q12\_1"},

[{"jobId":"tpch\_q12\_1","jobInputDataSize":0.0,"jobSubmissionTime":0,"jobFinishTime":25,"containerSpec":{"memory":1024,"vcores":1},

"skylineList":

{"resourceAllocation":{

"0":{"memory":1024,"vcores":1},

"10":{"memory":813056,"vcores":794},

"15":{"memory":2577408,"vcores":2517},

"20":{"memory":2543616,"vcores":2484},

"25":{"memory":0,"vcores":0}}}}]]]

预测数据:

代码语言:txt
AI代码解释
复制
{"resourceAllocation":

"10":{"memory":1083392,"vcores":1058},

"15":{"memory":2598912,"vcores":2538},

"20":{"memory":2543616,"vcores":2484},

"25":{"memory":0,"vcores":0}}}
五.Resource Estimator Service算法框架与原理

  在本部分将重点介绍一下estimator中用到的资源预测算法原理。此算法由微软提出,其链接在文末参考资料中给出。下图是estimator的运行框架,可以看到其主要由三部分组成,下面分别介绍这三部分。

image
image
  1. Automatic interence,提取出作业的运行时间和历史资源使用情况。 (a) Extractor of target,能提取出作业的运行开始与结束时间。 (b) Job resource model,能提取出作业的资源使用情况,例如作业资源随时间运行的变化情况和资源使用总量。
  2. Recurring Reservation,此部分包括有Job Resource Model,可以根据作业历史运行时间与作业历史资源使用情况给出下一任务的资源使用情况。 (a) 通过改变参数α,可以控制estimator在分配资源的时候是侧重过分配还是侧重欠分配。 (b) 根据作业资源预测模型给出的预测值为作业在原来分配的资源的基础上添加资源添加agenda。此job下一个run就运行在此资源分配的基础上。
  3. Dynamic Reprovisioning,此部分根据前面给出的资源agenda,动态调整作业的每个运行阶段的资源分配。
六.算法原理剖析

  微软提出的此资源分配算法本质上是一种最优化算法,其优化的目标函数是由两部分组成的线性组合,下文中stage的概念是指每个job的运行期间按照一定规则划分成多个时间片,每个时间片称之为一个stage,下面分步骤阐述其算法原理。

1.首先定义一个目标函数,也可以称之为损失函数,即我们优化的目标。在此算法中由过分配和欠分配组成的线性组合组成损失函数costfunction。目标就是minimize(cost = αA_{0}(s)+(1-α)A_{u}(s))。其中A_{0}(s)表示在当前stage的资源过分配值,其是由当前stage的分配值减去此stage的历史资源使用均值然后取平均得到,其公式表示为A_{0}(s)=\frac{1}{N}\sum_{i=1}^N\sum_{k}(s_{k}-s_{i,k})^{+},s_{k}即为当前的资源分配值,s_{i,k}即为第i次run的历史资源使用值;A_{u}(s)表示当前stage的欠分配值,其是由上一stage的欠分配值加上当前stage的欠分配值得到,公式表示如下:D_{i,k}(s_{1},...,s_{k})=(D_{i,k}+s_{i,k}-s_{k})^{+},A_{u}(s)=\frac{1}{N}\sum_{i=1}^{N}D_{i,k}(s),下图比较直观的显示了estimator在预测资源时的一种过分配与欠分配的情况。

2.针对每个stage,此算法的策略就是选择可以使得costfunction最小的资源分配方式,即选择一个值使得costfunction最小,即得到S_k,即每一个stage上的资源分配值。 因为分配值是固定规格的倍数,所以在实现时可以通过简单的for循环或者一些最优化算法比如爬山法或者蚁群算法就可以快速得到最小值。

3.总结:算法中的做法是针对一个job,根据其历史运行时间拿到其作业开始和结束时间,在这时间段内按照一定规则划分时间片,每一个时间片为一个stage,根据同一job多次run的历史资源使用情况来预测下一run的资源使用情况。其每次配置的策略是使得costfunction最小。costfunction是过分配与欠分配的一个线性组合。

七.算法的测试效果

  在本次测试中运行tpch_q12作业9次,并在每次运行中收集作业的资源skylines。然后,在Resource Estimator Service中运行日志解析器,从日志中提取ResourceSkylines并将它们存储在SkylineStore中。下面绘制了作业的ResourceSkylines以进行演示。

  在Resource Estimator Service中运行估算器来预测新运行的资源需求,下面绘制了预测的资源需求数据。可以看到预测数据根据历史资源使用情况较好地表征了下一次运行的资源使用数据,有一定的参考意义。另外在实际场景业务上的测试效果还有待考证。

八.参考

1.Resourcemanager Estimator Service

2.微软算法文章

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
7 条评论
热度
最新
什么玩意 看不懂啊
什么玩意 看不懂啊
回复回复点赞举报
好东西
好东西
回复回复点赞举报
好东西
好东西
回复回复点赞举报
已经订阅专栏啦,期待更多文章
已经订阅专栏啦,期待更多文章
回复回复点赞举报
mark
mark
回复回复点赞举报
感谢作者的分享!
感谢作者的分享!
回复回复点赞举报
介绍的很详细~
介绍的很详细~
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
0883-7.1.6-Queue Manager控制单个用户的超配资源
1.文档编写目的 在CDP集群中Yarn的资源池调度策略由CDH版本的FairScheduler转变为CapacityScheduler。在集群的使用过程中,如何更好的给各个租户分配集群资源?如何确保集群的资源可以更合理的使用? 在集群资源空闲时,如果租户还按照分配的资源大小运行作业,则会导致集群的资源闲置浪费,本篇文章主要通过介绍通过调整资源池的User Limit Factor参数来使租户可以超用分配的资源。 文档概述 1.测试环境说明 2.测试方案 3.User Limit Factory场景测试 4
Fayson
2022/07/27
7090
0883-7.1.6-Queue Manager控制单个用户的超配资源
hadoop之yarn(优化篇)
最近一直在学习hadoop的一些原理和优化,然后也做了一些实践,也有没有去做实践的,反正个人观点都记录下来
huofo
2022/03/01
1.8K0
{Submarine} 在 Apache Hadoop 中运行深度学习框架
作者:Wangda Tan、Sunil Govindan、Zhankun Tang
大数据文摘
2019/01/23
1.8K0
{Submarine}  在 Apache Hadoop 中运行深度学习框架
大数据平台:计算资源优化技术&作业诊断
大数据平台的资源管理组件主要针对存储资源与计算资源进行分析优化。前文《大数据平台:资源管理及存储优化技术》主要介绍了存储资源优化,本文主要介绍大数据平台构建过程中,计算资源相关的优化技术。
Yiwenwu
2024/05/03
7380
大数据平台:计算资源优化技术&作业诊断
Spark on Yarn资源配置
工作期间,我提交spark任务到yarn上,发现指定的资源(使用内存大小。使用core的个数)总是与yarn的UI页面显示的资源使用量不一致,写本文说明一下这个问题,以及介绍一下spark on yarn的资源配置。
CoderJed
2019/05/15
2.4K0
Yarn资源调度器
Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。
ha_lydms
2023/09/07
3790
Yarn资源调度器
Hive 调优,先掌握这几种优化模式
Hive和MapReduce中拥有较多在特定情况下优化的特性,如何利用好相关特性,是Hive性能调优的关键。本文就介绍那些耳熟但不能详的几种Hive优化模式。
大数据技术架构
2020/03/25
5770
0499-如何使用潜水艇在Hadoop之上愉快的玩耍深度学习
Hadoop是时下最流行的企业级开源大数据平台技术,你可以将它部署在本地,也可以部署在云端。而深度学习,对于企业用户来说举几个简单的例子,常见的场景包括语音识别,图像分类,AI聊天机器人或者机器翻译。为了训练深度学习/机器学习模型,我们可以利用TensorFlow/MXNet/Pytorch/Caffe/XGBoost等框架。有时这些框架也会被一起使用用于解决不同的问题。
Fayson
2019/11/27
9250
Apache Spark 1.5新特性介绍
Apache Spark社区刚刚发布了1.5版本,大家一定想知道这个版本的主要变化,这篇文章告诉你答案。 DataFrame执行后端优化(Tungsten第一阶段) DataFrame可以说是整个Spark项目最核心的部分,在1.5这个开发周期内最大的变化就是Tungsten项目的第一阶段已经完成。主要的变化是由Spark自己来管理内存而不是使用JVM,这样可以避免JVM GC带来的性能损失。内存中的Java对象被存储成Spark自己的二进制格式,计算直接发生在二进制格式上,省去了序列化和反序列化时间。同时
CSDN技术头条
2018/02/09
8760
Apache Spark 1.5新特性介绍
YJango:TensorFlow高层API Custom Estimator建立CNN+RNN的演示
该文是YJango:TensorFlow中层API Datasets+TFRecord的数据导入的后续。
YJango
2018/04/03
2.6K3
YJango:TensorFlow高层API Custom Estimator建立CNN+RNN的演示
【Dr.Elephant中文文档-6】度量指标和启发式算法
我们将作业的资源使用量定义为任务容器大小和任务运行时间的乘积。因此,作业的资源使用量可以定义为mapper和reducer任务的资源使用量总和。
一条老狗
2019/12/26
1.3K0
Hadoop3.0扩展Yarn资源模型详解2:资源Profiles说明
问题导读 1.Resource profiles解决了什么问题? 2.使用profile的好处是什么? 3.配置文件的简洁模式如何配置? 上一篇hadoop3.0扩展Yarn资源模型详解1 h
用户1410343
2018/03/26
1.2K0
戳破 | hive on spark 调优点
微信交流群里有人问浪尖hive on spark如何调优,当时浪尖时间忙没时间回答,这里就给出一篇文章详细聊聊。强调一下资源设置调优,这个强经验性质的,这里给出的数值比例仅供参考。
Spark学习技巧
2018/08/20
1.9K0
《算法竞赛进阶指南》0x18 总结与练习
这一天,刚刚起床的达达画了一排括号序列,其中包含小括号 ( )、中括号 [ ] 和大括号 { },总长度为
一只野生彩色铅笔
2022/10/31
9690
《算法竞赛进阶指南》0x18 总结与练习
进击大数据系列(五):Hadoop 统一资源管理和调度平台 YARN
Apache Yarn(Yet Another Resource Negotiator的缩写)是hadoop集群资源管理器系统,Yarn从hadoop 2引入,最初是为了改善MapReduce的实现,但是它具有通用性,同样执行其他分布式计算模式。
民工哥
2023/08/22
1.3K0
进击大数据系列(五):Hadoop 统一资源管理和调度平台 YARN
搭建Hadoop3集群
强烈建议再搭建hadoop集群之前体验一下单机模式和伪分布式模式的搭建过程,可以参考以下链接:
职场亮哥
2020/10/10
1.2K0
[kubectl-resource-view]: 一款用于查看k8s资源使用情况的插件
一款自己编写的k8s 命令行插件,用于查看k8s node和pod资源的 cpu、 memory、 gpu的request 和limit 使用情况。
没有故事的陈师傅
2024/12/02
1350
[kubectl-resource-view]: 一款用于查看k8s资源使用情况的插件
北航提出 PTQ4SAM | 一种高效的分割任何模型训练后量化框架,实现了无损精度,速度提高了3.9 倍 !
具有卓越的零样本能力和用户友好的灵活提示技术,Segment Anything Model(SAM)最近已成为一系列通用视觉应用中的新型基础模型,包括图像分割、目标检测、跟踪和其他下游任务。然而,SAM中的 Transformer 架构需要密集的计算和内存占用,这阻碍了在资源受限的边缘设备上的实际部署。
AIGC 先锋科技
2024/07/08
5960
北航提出  PTQ4SAM  |  一种高效的分割任何模型训练后量化框架,实现了无损精度,速度提高了3.9 倍 !
【工具】Apache Spark 1.5发布了!!!
Apache Spark社区刚刚发布了1.5版本,大家一定想知道这个版本的主要变化,这篇文章告诉你答案。 DataFrame执行后端优化(Tungsten第一阶段) DataFrame可以说是整个Spark项目最核心的部分,在1.5这个开发周期内最大的变化就是Tungsten项目的第一阶段已经完成。主要的变化是由Spark自己来管理内存而不是使用JVM,这样可以避免JVM GC带来的性能损失。内存中的Java对象被存储成Spark自己的二进制格式,计算直接发生在二进制格式上,省去了序列化和反序列化时间。同
小莹莹
2018/04/20
6160
【工具】Apache Spark 1.5发布了!!!
Trio-ViT | 专门针对高效 ViTs 的卷积 Transformer混合架构的加速器!
感谢自注意力机制强大的全局信息提取能力,Transformers在各种自然语言处理(NLP)任务中取得了巨大成功。这一成功催生了视觉Transformers(ViTs)[4, 5]的快速发展,它们在计算机视觉领域受到了越来越多的关注,并且与基于卷积的对应物相比显示出优越的性能。
集智书童公众号
2024/05/17
4890
Trio-ViT | 专门针对高效 ViTs 的卷积 Transformer混合架构的加速器!
推荐阅读
相关推荐
0883-7.1.6-Queue Manager控制单个用户的超配资源
更多 >
LV.0
腾讯技术测试工程师
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档