6个人如何维护上千规模的大数据集群?

本文主要介绍饿了么大数据团队如何通过对计算引擎入口的统一,降低用户接入门槛;如何让用户自助分析任务异常及失败原因,以及如何从集群产生的任务数据本身监控集群计算/存储资源消耗,监控集群状况,监控异常任务等。

如果你想了解大数据的学习路线,想学习大数据知识以及需要免费的学习资料可以加群:784789432.欢迎你的加入。每天下午三点开直播分享基础知识,晚上20:00都会开直播给大家分享大数据项目实战。

饿了么 BDI-大数据平台研发团队目前共有 20 人左右,主要负责离线&实时 Infra 和平台工具开发。

其中 6 人的离线团队需要维护大数据集群规模如下:

  • Hadoop 集群规模 1300+
  • HDFS 存量数据 40+PB,Read 3.5 PB+/天,Write 500TB+/天
  • 14W MR Job/天,10W Spark Job/天,25W Presto/天

此外还需要维护 Hadoop、Spark、Hive、Presto 等饿了么内部版本组件,解决公司 400+ 大数据集群用户每天面临的各种问题。

引擎入口统一

目前在饿了么对外提供的查询引擎主要有 Presto、Hive 和 Spark,其中 Spark 又有 Spark Thrift Server 和 Spark SQL 两种模式。

并且 Kylin 也在稳步试用中,Druid 也正在调研中。各种计算引擎都有自身的优缺点,适用的计算场景各不相同。

从用户角度来说,普通用户对此没有较强的辨识能力,学习成本会比较高。

并且当用户可以自主选择引擎执行任务时,会优先选择所谓的最快引擎,而这势必会造成引擎阻塞,或者将完全不适合的任务提交到某引擎,从而降低任务成功率。

从管理角度来说,大数据集群的入口太多,将难以实现统一管理,难以实现负载均衡、权限控制,难以掌控集群整体对外服务能力。

并且当有新的计算需求需要接入,我们还需要为其部署对应的客户端环境。

用户使用多种计算引擎

功能模块

针对这种情况,饿了么大数据团队开发了 Dispatcher,该组件的主要功能如下图所示:

Dispatcher 功能模块

用户所有任务全部通过 Dispatcher 提交,在 Dispatcher 中我们可以做到统一的鉴权,统一的任务执行情况跟踪。

还可以做到执行引擎的自动路由,各执行引擎负载控制,以及通过引擎降级提高任务运行成功率。

逻辑架构

Dispatcher 的逻辑架构如下图所示:

Dispatcher 系统逻辑架构

目前用户可以通过 JDBC 模式调用 Dispatcher 服务,或者直接以 Driver 模式运行 Dispatcher。

Dispatcher 接收到查询请求后,将会统一进行鉴权、引擎路由等操作,将查询提交到对应引擎。

另外,Dispatcher 还有 SQL 转换模块,当发生从 Presto 引擎降级到 Spark/Hive 引擎时,将会通过该模块自动将 Presto SQL 转换成 HiveQL。

通过 Dispatcher 对查询入口的统一,带来的好处如下:

  • 用户接入门槛低,无需再去学习各引擎使用方法和优缺点,无需手动选择执行引擎。
  • 部署成本低,客户端可通过 JDBC 方式快速接入。
  • 统一的鉴权和监控。
  • 降级模块提高任务成功率。
  • 各引擎负载均衡。
  • 引擎可扩展。

引擎可扩展主要是指当后续接入 Kylin、Druid 或者其他更多查询引擎时,可以做到用户无感知。

由于收集到了提交到集群的所有查询,针对每一个已有查询计划,我们可以获得热度数据,知道在全部查询中哪些表被使用次数最多,哪些表经常被关联查询,哪些字段经常被聚合查询等。

当后续接入 Kylin 时,可以通过这些数据快速建立或优化 Cube。

SQL 画像

在 Dispatcher 中最核心的是 SQL 画像模块,基本流程如下图:

SQL 路由模块

查询提交后,通过连接 HiveServer 对查询计划进行解析,可以获取当前查询的所有元数据信息,比如:

  • 读入数据量
  • 读入表/分区数
  • 各类 Join 次数
  • 关联字段多少
  • 聚合复杂度
  • 过滤条件
  • ……

上述元数据信息基本上可以对每一个查询进行精准的描述,每一个查询可以通过这些维度的统计信息调度到不同引擎中。

Hive 对 SQL 进行解析并进行逻辑执行计划优化后,将会得到优化后的 Operator Tree,通过 explain 命令可以查看。

SQL 画像数据可以从这个结果收集各种不同类型的 Operator 操作,如下图所示:

SQL 解析示例

从直观的理解上我们知道,读入数据量对于引擎的选择是很重要的。比如当读入少量数据时,Presto 执行性能最好,读入大量数据时 Hive 最稳定,而当读入中等数据量时,可以由 Spark 来执行。

各类计算引擎数据量-执行时间分布

在初始阶段,还可以通过读入数据量,结合 Join 复杂度,聚合复杂度等因素在各种计算引擎上进行测试,采用基于规则的办法进行路由。

执行过程中记录好每一次查询的 SQL 画像数据,执行引擎,降级链路等数据。

基于这些画像数据,后续可以采用比如决策树,Logistic 回归,SVM 等分类算法实现引擎的智能路由,目前饿了么大数据团队已经开始了这方面的尝试。

在饿了么的应用中,由 Dispatcher 统一调度的 Ad Hoc 查询,由于增加了预检查环节,以及失败降级环节,每天总体成功率为 99.95% 以上,整体 PT90 值为 300 秒左右。

目前 Presto 承担了 Ad Hoc 查询的 50% 流量,SparkServer 模式承担了 40% 流量。

充分利用集群本身数据

饿了么大数据集群每天运行的 Spark&MR 任务 25W+,这些数据详细记录了每一个 Mapper/Reducer 或者 Spark 的 Task 的运行情况,如果能够充分利用,将会产生巨大的价值。即充分利用集群本身数据,数据驱动集群建设。

这些数据不仅可以有助于集群管理人员监控集群本身的计算资源、存储资源消耗,任务性能分析,主机运行状态。还可以帮助用户自助分析任务运行失败原因,任务运行性能分析等。

饿了么大数据团队开发的 Grace 项目就是在这方面的一个示例。

Grace 使用场景

你对集群任务运行状况详细数据没有明确认识的话,很容易当出现问题时陷入困境,从监控看到集群异常后将无法继续进一步快速定位问题。

当经常有用户找你说,我的任务为什么跑失败了?我的任务为什么跑的这么慢?我的任务能调一下优先级么?不要跟我说看日志,我看不懂。我想大家内心都是崩溃的。

当监控发出 NameNode 异常抖动,网络飚高,block 创建增加,block 创建延时增大等告警时,应该如何快速定位集群运行的异常任务?

当监控发出集群中 Pending 的任务太多时,用户反馈任务大面积延迟时,如何快速找到问题根本原因?

当用户申请计算资源时,到底应该给他们分配多少资源?当用户申请提高任务优先级时如何用数据说话,明确优先级到底应该调到多少?当用户只管上线不管下线任务时,我们如何定位哪些任务是不再需要的?

还有,如何通过实时展示各 BU 计算资源消耗,指定 BU 中各用户计算资源消耗,占 BU 资源比例。

以及如何从历史数据中分析各 BU 任务数,资源使用比例,BU 内部各用户的资源消耗,各任务的资源消耗等。

以下示例展示一些 Grace 产出数据图表,有关 BU、用户、任务级别的数据不方便展示。

监控队列

从下图可以方便的看到各队列最大最小资源,当前已用资源,当前运行任务数,Pending 任务数,以及资源使用比例等,还可以看到这些数据的历史趋势。

各队列任务情况

队列资源使用趋势

任务监控

可以查看指定队列中运行中任务的任务类型,开始时间,运行时长,消耗当前队列资源比例,以及消耗当前 BU 资源比例等。

可快速定位计算资源消耗多并且运行时间长的任务,快速找到队列阻塞原因。

指定队列任务情况

监控主机失败率

可以监控集群所有主机上的 Task 执行失败率。已有监控体系会对主机的 CPU,磁盘,内存,网络等硬件状况进行监控。

这些硬件故障最直观的表现就是分配在这些有问题的主机上的任务执行缓慢或者执行失败。

运行中的任务是最灵敏的反应,一旦检测到某主机失败率过高,可触发快速自动下线保障业务正常执行。后续可以结合硬件监控定位主机异常原因。

主机失败率监控

任务性能分析

用户可自助进行任务性能分析,如下图:

任务性能分析

并且可以根据异常项按照以下建议自助调整,如下图:

任务自助优化方案

任务失败原因分析

对于失败的任务,用户也可以按照以下方法快速从调度系统查看失败原因,以及对应的解决办法,饿了么大数据团队会定期收集各种典型报错信息,更新维护自助分析知识库。

失败原因自助分析

除此之外,我们还可以实时监控每个任务的计算资源消耗 GB Hours,总的读入写出数据量,Shuffle 数据量等,以及运行中任务的 HDFS 读写数据量,HDFS 操作数等。

当出现集群计算资源不足时,可快速定位消耗计算资源多的任务。当监控出现 HDFS 集群抖动,读写超时等异常状况时,也可通过这些数据快速定位到异常任务。

基于这些数据还可以根据各队列任务量,任务运行资源消耗时间段分布,合理优化各队列资源分配比例。

根据这些任务运行状况数据建立任务画像,监控任务资源消耗趋势,定位任务是否异常。再结合任务产出数据的访问热度,还可以反馈给调度系统动态调整任务优先级等。

Grace 架构

上述示例中使用到的数据都是通过 Grace 收集的。Grace 是饿了么大数据团队开发的应用,主要用于监控分析线上 MR/Spark 任务运行数据,监控运行中队列及任务明细及汇总数据。

逻辑架构如下图:

Grace 逻辑架构

Grace 是通过 Spark Streaming 实现的,通过消费 Kafka 中存储的已完成 MR 任务的 jhist 文件或 Spark 任务的 eventlog 路径,从 HDFS 对应位置获取任务运行历史数据,解析后得到 MR/Spark 任务的明细数据。

再根据这些数据进行一定的聚合分析,得到任务级别,Job 级别,Stage 级别的汇总信息。

最后通过定制化的 Dr-Elephant 系统对任务明细数据通过启发式算法进行分析,从而给用户一些直观化的优化提示。

对于 Dr-Elephant,我们也做了定制化的变动,比如将其作为 Grace 体系的一个组件打包依赖。

从单机部署服务的模式变成了分布式实时解析模式。将其数据源切换为 Grace 解析到的任务明细数据。

增加每个任务的 ActionId 跟踪链路信息,优化 Spark 任务解析逻辑,增加新的启发式算法和新的监控指标等。

总结

随着大数据生态体系越来越完善,越来越多背景不同的用户都将加入该生态圈,我们如何降低用户的进入门槛,方便用户快速便捷地使用大数据资源,也是需要考虑的问题。

大数据集群中运行的绝大部分任务都是业务相关,但是随着集群规模越来越大,任务规模越来越大,集群本身产生的数据也是不容忽视的。

这部分数据才是真正反映集群使用详细情况的,我们需要考虑如何收集使用这部分数据,从数据角度来衡量、观察我们的集群和任务。

仅仅关注于集群整体部署、性能、稳定等方面是不够的,如何提高用户体验,充分挖掘集群本身数据,用数据促进大数据集群的建设,是本次分享的主题。

原文地址:https://www.cnblogs.com/xuexiqun784789432/p/9210717.html

时间: 2024-08-30 04:00:35

6个人如何维护上千规模的大数据集群?的相关文章

扬州市宝应县,泰山小学、桃园小学、城中小学等多所学校上千教师罢课

江苏省扬州市宝应县,泰山小学.桃园小学.城中小学等多所学校上千教师罢课.要求加薪. 由于地方政府没有给教师及时地上调薪水 老师们罢课了 师生们都在操场上: 网友 紫色诱惑: 上午看到泰山小学操场上全都是学生.也不像是跑操之类. 打听了下,说是老师在****,据说泰山小学.桃园小学.城中小学.叶挺桥小学的老师都參与了. 网友 好事连连: 事情原由:主要是对教师的相关待遇未能落实到位.该涨的工资未涨,与周边市县区差距甚远.并且多次交涉无果. 瑾萱 今天宝应好多学校罢课,社会舆论较大. 我想说:宝应教

引爆头条视频几百上千粉,月流水十几万玩法

马上就要十一国庆了!国庆之后,那么2017年就会真正是进入倒计时了! 不管你上半年,是偷懒了.还是进入不顺利状态,或者是被生活狠狠摔了个狗啃泥!可能还在啃一桶老坛酸菜泡面,都没事,我觉得只要你内心还存在有那么一丝丝躁动不安奋斗的心 ,就应该此时此刻,立马站起来,撸起袖子大干,2017年短视频火的一塌糊涂,当然了,大公司! 大boss都是去搭建短视频,但是像草根类型的基本都是依附在平台上面引流吸粉变现,要说到引流,吸精准粉!今日头条是不能放过的它的! 特别是现在的头条视频爆粉,很给力的,给力到一个

在VMware Workstation中批量创建上千台虚拟机(上)

VMware Workstation 是我们经常使用的虚拟机软件,其功能强大,性能较好.大多数用户都会在"图形界面"中创建虚拟机.修改虚拟机配置.添加虚拟机参数,或者使用"克隆"功能创建多个虚拟机,这些都无需介绍. 但是你有没有想过 ● 将 VMware Workstation 创建的虚拟机,供网络中其他用户使用呢? ● 如果你想使用模板,创建几十.上百甚至上千个虚拟机,怎样才能做到呢? 本节通过两个具体的案例介绍这些应用. [说明] 这是"使用VMwar

Oracle DBA数据库高级工程师培训套餐(全部)系列60多套+七大阶段+上千案例

Oracle DBA数据库高级工程师培训套餐(系列60多套+七大阶段+上千案例) 描述 Oracle DBA数据库高级工程师培训课程是风哥独自研发的精品实战课程,本路线图主要是让大家快速就业.高薪就业.课程内容以实战为主(占98%),理论为辅(占2%).本课程知识全面系统实用,结合风哥十年Oracle经验,囊括企业用到的所有知识点,课程包含大量实战案例,涉及Oracle核心技术及底层研究,从零开始学习Oracle到高级,让你快速跨入DBA圈子,真正超载OCP/OCM认证. 学习目标 本Oracl

在VMware Workstation中批量创建上千台虚拟机(下)

2 快速克隆100台Workstation虚拟机方法 在上一节的内容中,无论是创建"完全克隆"的虚拟机还是"克隆链接"的虚拟机,都是在VMware Workstation的图形界面中以向导的方式创建的,每次创建一个虚拟机都需要多个步骤才能完成.在创建的虚拟机数量有限的情况下,使用图形界面创建虚拟机还可以接受,如果需要批量创建多台虚拟机,例如创建几十台.上百台甚至上千台虚拟机时,反复的操作会让人"崩溃".本文介绍采用VMware 提供的命令行工具v

《Speed-BI云平台案例应用:P2P网贷行业:成交上千亿的行业,你投资过吗?》数据分析课程开课啦!

曾经一度风头无两的P2P网贷行业,近几年渐渐走下坡路,诈骗.跑路.资金链断链等等丑闻不绝于耳.那究竟要不要继续选择网贷呢?很自然你会想从大局先了解总体行业的发展走势与现状再决定,确定要继续网贷了,再选择有保障的平台进行合作. 可是这种研究性分析去哪里得知呢?哪里的总结才真实可信呢? 再多的行业现状分析都离不开最反映事实的数据分析部分,所以这次的分析我们就直接让数据说话,还原真相,揭露数据背后的信息. 那这一切Speed-BI是怎么实现的呢?赶紧下拉瞧一瞧吧!        讲师介绍:古金莹 现担

从Google Play下载应用并不安全,上千款监视软件伪装其中

如果你认为在官方应用市场里下载app就觉得安全的话,小编可以负责任的回答你:"too young too simple,sometimes native" 今年4月,BankBot 银行木马出现在谷歌Play应用商店中,该木马可以让攻击者获得管理员权限,并执行大量恶意任务,包括窃取银行登录信息. 4月同时,约有2百万Android用户在谷歌Play应用商店里感染了FalseGuide 恶意软件,它隐藏在超过40多个流行的游戏app中,例如Pokémon Go.FIFA Mobile.

Android 上千实例源码分析以及开源分析

Android 上千实例源码分析以及开源分析(百度云分享) 要下载的直接翻到最后吧,项目实例有点多. 首先 介绍几本书籍(下载包中)吧. 01_Android系统概述 02_Android系统的开发综述 03_Android的Linux内核与驱动程序 04_Android的底层库和程序 05_Android的JAVA虚拟机和JAVA环境 06_Android的GUI系统 07_Android的Audio系统 08_Android的Video 输入输出系统 09_Android的多媒体系统 10_

qt的应用层主要是大型3d,vr,管理软件和器械嵌入软件(有上千个下一代软件黑科技项目是qt的,美国宇航局,欧洲宇航局,超级战舰DDG1000)

作者:Nebula.Trek链接:https://www.zhihu.com/question/24316868/answer/118944490来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. qt的应用层主要是大型3d,vr,管理软件和器械嵌入软件.日常生活中所用的qt产品比较少.也就virtual box,google earth,VLC player等.但是大型系统就正好相反,这是c++决定的,而非qt. 除了Maya之外,包括Houdini,斯特拉电车的系