一看就懂!任务提交的资源判断在Taier中的实践
Taier 介绍
Taier 是袋鼠云开源项目之一,是一个分布式可视化的DAG任务调度系统。
旨在降低ETL开发成本、提高大数据平台稳定性,大数据开发人员可以在 Taier 直接进行业务逻辑的开发,而不用关心任务错综复杂的依赖关系与底层的大数据平台的架构实现,将工作的重心更多地聚焦在业务之中。
项目地址:https://github.com/DTStack/Taier

Taier 资源判断
Taier 基于插件式架构设计,用户在界面开发任务并提交运行。提交运行插件又划分为worker-plugins、datasource-plugins双插件类型。
在任务提交的时候,Taier需要判断是否有足够的资源来执行,否则一股脑地提交任务,最终会拖垮环境,导致服务的不可用。根据环境资源的剩余情况来动态调整提交任务的速率是Taier必不可少的一项功能,那么Taier究竟是怎么来判断资源的呢?
什么是资源?
对一个系统而言,首先要定义出资源的种类,然后将每种资源量化,才能进行管理,这就是资源抽象的过程。那么,想回答上文中「Taier是如何判断资源」的这个问题,就需要先理清楚,在一个分布式、多环境的系统中,什么是资源,又为什么要有“资源”这个概念?
我们通常所说的“资源”都是硬件资源,包括CPU使用/内存使用/磁盘用量/IO/网络流量等等,这是比较粗粒度的。也可以是抽象层次更高的TPS/请求数之类的。
资源可以用来衡量系统的瓶颈。系统能否充分利用资源,什么时候可以持续提交任务,什么时候需要暂停提交任务,比如当总体资源充裕时,可以把对应的任务全部提交上去。
● 以Yarn框架介绍为例

ResourceManager 是一个全局的资源管理器,负责整个系统的资源管理和分配,包括 scheduler 、Application Manager和 Node Manager。
对调度器来说,YARN 提供了多种直接可用的调度器, Fair Scheduler 和 Capacity Scheduler 等。调度器仅根据各个应用程序的资源需求进行资源分配,分配的基本单位是Container,而容器里面是将内存、CPU、网络、磁盘封装到一起。
在Yarn的web 界面,我们可以直观的看到当前Yarn集群剩余的内存、CPU核数、运行的Container数量。对提交到yarn上的任务来说,资源就是:内存、CPU、磁盘等可用信息。

所以在提交到Yarn上执行的任务,我们可以根据ResourceManager 获取Yarn集群当前剩余的内存、CPU核数来进行判断,任务能否满足提交条件等规则。其中,最基本的规则就是:
• Yarn集群剩余的内存 >= 当前任务所需的内存
• Yarn集群剩余的CPU核数 >= 当前任务所需的CPU核数
何时去判断资源?
任务在界面开发完成之后,点击运行的按钮,开始从等待提交的状态切换。在提交运行的时候,任务组装好集群配置信息进入下一个阶段——资源判断。
在这个阶段开始判断资源是否满足任务提交。如果任务满足则进行提交,如果任务不满足,则定时、延时、重试直到资源满足任务执行条件。

怎样去判断资源?
在worker-plugins提交的抽象类中,有一个通用的方法judgeSlots去判断资源。
judgeSlots 的判断结果分为以下四种:
• OK: 资源判断满足,任务可以提交
• NOT_OK: 不满足任务所需资源,需要延时重试
• LIMIT_ERROR: 任务参数设置错误: CPU核数或内存为0等场景
• EXCEPTION: 任务资源判断异常: ResourceManager连接异常等场景

● 以Spark任务为例
下文我们以Spark任务为例,看看Spark的提交插件是如何获取对应的ResourceManager信息并进行资源判断的。

可以看到根据Yarn集群信息获取了以下信息:
• 根据Yarn集群信息初始化YarnClient
• 获取Yarn集群队列下的ACCEPTED状态任务,是否大于控制台yarnAccepterTaskNumber 参数设置
• 获取Yarn集群队列的剩余CPU核数和内存信息

然后根据JobClient所携带的任务参数信息,获取了Driver、Executor 的相关内存和CPU信息并进行计算。

最后将获取到的Yarn集群信息和任务所需的资源信息按照固定规则进行比对,返回对应的资源判断结果。资源判断的结果将会实时在Taier 的界面上展示,所以在任务处于等待提交状态的时候,可以去控制台->队列,管理并查看该任务资源判断信息。

Taier 未来规划
展望未来,为进一步提升Taier的使用场景,同时也为了减少Hadoop生态在Taier中的依赖,Taier后续会扩展更多的任务类型。除了支持对接Hadoop集群外,Taier也会陆续支持相关类型的local模式运行,完善更多的场景使用。
Taier团队非常期待得到每一个人的反馈,能够和其他优秀开发者共同合作,进一步推动Taier的技术发展。
如果您对Taier有兴趣,希望可以参与到我们的建设中来,一起交流,一起进步,为 Taier变得更好贡献一点你的代码和意见,这将是我们,同时也是 Taier莫大的荣幸。
想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szbky
同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术qun」,交流最新开源技术信息,qun号码:30537511,项目地址:https://github.com/DTStack
一看就懂!任务提交的资源判断在Taier中的实践的更多相关文章
- 一看就懂的Android APP开发入门教程
一看就懂的Android APP开发入门教程 作者: 字体:[增加 减小] 类型:转载 这篇文章主要介绍了Android APP开发入门教程,从SDK下载.开发环境搭建.代码编写.APP打包等步骤 ...
- mysql取出现在的时间戳和时间时间戳转成人类看得懂的时间
mysql取出现在的时间戳和时间时间戳转成人类看得懂的时间,我们在mysql里面他封装了一个内置的时间戳转化的函数,比如我们现在的时间戳是:1458536709 ,"%Y-%m-%d&quo ...
- 一看就懂的ReactJs入门教程(精华版)
一看就懂的ReactJs入门教程(精华版) 现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和 ...
- JavaScript一看就懂(2)闭包
认识闭包之前需要先了解作用域,如果你对作用域还没有足够了解,请移步JavaScript一看就懂(1)作用域 什么是闭包? 我们可以先简单认为:一个函数a定义在另一个函数b里面,这个函数a就是闭包: f ...
- 小学生都看得懂的C语言入门(1): 基础/判别/循环
c基础入门, 小学生也可以都看得懂!!!! 安装一个编译器, 这方面我不太懂, 安装了DEV-C++ ,体积不大,30M左右吧, 感觉挺好用,初学者够了. 介绍下DEV 的快键键: 恢复 Ctrl+ ...
- python中和生成器协程相关的yield from之最详最强解释,一看就懂(四)
如果认真读过上文的朋友,应该已经明白了yield from实现的底层generator到caller的上传数据通道是什么了.本文重点讲yield from所实现的caller到coroutine的向下 ...
- python中和生成器协程相关yield from之最详最强解释,一看就懂(二)
一. 从列表中yield 语法形式:yield from <可迭代的对象实例> python中的列表是可迭代的, 如果想构造一个生成器逐一产生list中元素,按之前的yield语法,是在 ...
- python中和生成器协程相关的yield之最详最强解释,一看就懂(一)
yield是python中一个非常重要的关键词,所有迭代器都是yield实现的,学习python,如果不把这个yield的意思和用法彻底搞清楚,学习python的生成器,协程和异步io的时候,就会彻底 ...
- 8个设计师必看的免费UI图标设计资源站
图标是我们日常APP及网页设计过程中必不可少的元素之一,通过小小的图标,可以快速方便的实现视觉引导和功能划分.在创作时,我们需要寻找各种各样的图标来满足自己的设计需求,非常浪费时间和精力.今天,小编给 ...
- Windows进程通信之一看就懂的匿名管道通信
目录 进程通信之一看就懂的匿名管道通信 一丶匿名管道 1.1何为匿名管道 1.2创建匿名管道需要注意的事项 1.3 创建匿名管道需要的步骤 1.4代码例子 1.5代码运行截图 进程通信之一看就懂的匿名 ...
随机推荐
- 链表的创建&遍历打印
博客地址:https://www.cnblogs.com/zylyehuo/ # -*- coding: utf-8 -*- class Node: def __init__(self, item): ...
- Docker管理面板系列——Portainer
一.介绍 Portainer是个轻量级的Docker管理面板,和Rancher这种重量级选手没法比,Portainer倾向于单机的管理(后来发现能够添加多个单机节点切换着管理),当然,在Docker搞 ...
- [python] 使用Python实现Markdown文档格式转换
本文主要介绍如何利用Python中的MarkItDown库将多种文件高效转换为Markdown文本,以及如何使用Python-Markdown库将Markdown文本转换为HTML(超文本标记语言)文 ...
- Linux脚本-使用jar自动替换配置文件
背景 最近公司需要在生产服务器上测试字库,需要非常频繁修改配置文件中的字体相关属性,然后实时调试,所以需要频繁的修改配置文件并手动发布出去.之前需要修改配置文件时,我们需要: 把jar包通过FTP传回 ...
- 面试题-Storm框架
前言 Storm框架在实际项目中已经平稳运行快一年了,也很好的支撑了海量读写器的数据处理需求,不过和RabbitMQ一样,为了项目进度,实际工作中只能尽快的调研,关注一些关键点,其他的细节就只能放一放 ...
- 【SpringMVC】处理 JSON:使用 HttpMessageConverter
处理 JSON:使用 HttpMessageConverter 处理 JSON 加入 jar 包: 编写目标方法,使其返回 JSON 对应的对象或集合 在方法上添加 @ResponseBody 注解 ...
- 请运行命令来卸载Oracle主目录
卸载Oracle数据库碰见的一个不一样的操作,留爪. 正常点的软件卸载直接点卸载即可, Oracle 卸载非要来点不一样警告, 如图: 注意:不要被图里的斜杠符号忽略了,准确的应该是: # 注意斜杠 ...
- 【开源推荐】AI Interviewer:基于Spring-Alibaba-AI的智能面试官系统(附GitHub实战教程)
项目背景 作为开发者,你是否经历过: 技术面试时因紧张发挥失常? 刷了1000+LeetCode却不会表达解题思路? 花费上千元购买模拟面试服务? 今天推荐的AI Interviewer开源项目,正是 ...
- 主存的扩展及其与CPU的连接——字扩展
一块芯片的容量为\(2^{18}B\),而该CPU需要的容量为:\(2^{地址总线位宽}\)=\(2^{21}B\),所以需要8片该芯片来扩展. 由于CPU由21个地址引脚,芯片只有18个地址引脚,C ...
- Transformer(自然语言处理)笔记
Transerformer架构(自然语言处理) 尝试学习和从零构建一个大语言模型 就目前我的认知 Transformer架构主要分为编码器.解码器.词表.训练集.训练算法(T5) 编码器(Encode ...