大数据线上问题排查系列 - 同样的HQL,在CDH与TDH平台执行效率差异巨大的根本原因与业务侧应对方案

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 大数据线上问题排查系列 - 同样的HQL,在CDH与TDH平台执行效率差异巨大的根本原因与业务侧应对方案

前言

大家好,我是明哥!

公众号已经运维有一段时间了,也写了不少博文,其中很多是从自己解决真实线上问题的实战经历出发,写的经验总结和IT感悟。但由于前期摸索过程中,文风不统一且排版不太好,各篇博文之间也欠缺呼应,不太方便大家分类阅读学习,所以后续博文会尽量归类到对应的系列下。

本片博文是“大数据线上问题排查系列”大类别之一,以下是正文。

问题概述

某日测试团队同学跟我反馈了一个问题,即某大数据应用系统中HIVE离线计算作业脚本在CDH大数据平台跟TDH大数据平台的执行效率相差很大,经过验证该脚本在TDH大概需要 13 seconds,在CDH大概需要8 min 25 seconds,相差确实很大。

由于该大数据应用系统是是产品化的发包方案,在不同客户不同平台性能差异如此巨大,是不利于统一部署和运维的。所以需要对对该性能差异的背后原因,业务系统安装配置需注意的地方,以及业务代码侧潜在的应对方案,进行详尽的分析。

问题分析

问题分析的思路,仍然是查看相关大数据组件的WEB UI (在这里是 HIVE SERVER2 UI,和 YARN WEB UI), 业务系统及各中间件的日志 (涉及到业务系统日志,业务系统使用的到二方包三方包的日志,调度系统日志等),以及相关大数据组件的日志 (在这里是 HIVE SERVER2, HIVE METASTORE, YARN RESOURCE MANAGER, YARN TASK MANAGER等日志)。

顺着上述思路,该问题的原因很轻松就找到了: 通过 HIVE SERVER2 WEBUI 和 YARN WEB UI,发现该 HIVE 离线计算作业脚本在底层对应了多个SQL语句,这些SQL语句在CDH平台上是以 MR 任务的形式运行在 YARN 上的 (而不是预期的TEZ或SPARK)!

熟悉 MR/TEZ/SPARK 的小伙伴们,一般都有个笼统的印象,即 SPARK 比 MR 的速度一般是要快很多的,特别是在 SQL 底层对应多个子任务的时候。该问题的根本原因,其实就跟这个有关。

问题根本原因

  • 同样的 HIVE SQL 在 CDH 与 TDH平台性能差异的根本原因,是作业执行机制的不同,在SQL底层对应大量小任务时该性能差异尤其明显,其实这也是星环对inceptor最引以为豪的地方;
  • 在TDH中,sql 作业是以 hive on spark的模式运行的:sql经 hiveserver2解析编译优化一般会生成 spark任务,这些spark任务是在spark集群中执行的,该 spark 集群是在inceptor 集群启动时就启动好了的,而不是在有 spark 任务需要执行时再动态启动,且该spark集群 不受 yarn 资源管理框架的管控,默认的资源配置也很高(JVM堆空间是32G);
  • 而在CDH中,sql作业是以 hive on mr/tez/spark的模式运行的:sql 经hiveserver2解析编译优化生成 mr/tez/spark任务,这些 mr/tez/spark 任务在执行时,首先需要向 yarn申请资源,然后在申请获得的多个 yarn container中启动多个 Jvm虚拟机,此后才可以在这些container中执行任务。由于向yarn申请资源需要花费时间,且jvm虚拟机的启动和销毁也需要花费时间,再加上作业默认配置的spark 资源需求不高,所以作业执行速度较TDH会有差异,在SQL底层对应多个小任务时,该差异尤其明显;
  • 所以,HIVE SQL 在CDH中以MR引擎运行,跟TDH平台的速度差异特别大;当经过配置在CDH中以SPARK引擎运行时,跟TDH平台的速度差异会比MR引擎小,但仍会跟TDH平台有差异;
  • 在我们的上述测试环境中,上述SQL脚本对应了29个底层任务,在CDH中是以 hive on mr的方式运行的,最小/最大/平均执行时间分别是8.8/48.2/18.5秒,在tdh中最小/最大/平局执行时间分别是177ms/2.98s/512ms,这其实是典型的大量小任务,所以性能差异比较明显。
  • 从本质上来讲,TDH 是采用了预计算和空间换时间的思想,提前启动了 SPARK 集群,且改SPARK集群是以 STANDALONE 模式运行的跟YARN不会存在资源竞争,再加上该 SPARK 集群的 driver/excutor的memory和cpu等资源参数默认都比较高,所以作业执行效率会比CDH平台高。

问题解决方案

  • 业务系统安装配置注意点:
  • 我们无法改变CDH的执行机制,但由于 hive on spark有session的概念,且在同一个session内的所有sql底层的所有spark 任务都会复用同一个spark集群,所以配置使用hive on spark 而不是 hive on mr/tez,能尽量减少向yarn频繁申请资源的时间开销,以及虚拟机频繁启动和销毁的时间开销;(set hive.execution.engine=spark)
  • 另外,配置业务系统使用用户指定的/合适的YARN资源队列而不是默认的资源队列,也是需要注意的地方;(set mapred.job.queue.name=xxx;或set mapreduce.job.queuename=xx)
  • Spark任务的资源配置,需要针对不同客户的数据量和yarn队列资源数,以及该任务的复杂性,合理进行配置;(由于调度系统是以SQL脚本为单位进行调度的且很多调度系统都支持设置资源相关参数,建议在SQL脚本级别配置spark任务的具体资源参数,这些参数对sql脚本内部的多个sql语句都是有效的;如果多个SQL语句对资源有不同需求,建议划分到不同的SQL脚本中)
  • 业务代码侧潜在的应对方案:
  • 如果采用以上方案后,仍达不到客户的性能要求,业务代码测潜在的应对方案是,进一步拆分SQL脚本增大业务系统总体的并行度(一个SQL脚本中的多个SQL,是串行提交的,结合业务逻辑进一步拆分SQL语句到多个脚本,并并行提交这些SQL脚本,能提高业务系统整体的并行度,更大化地利用YARN集群资源 – 前提是yarn队列资源要够)

问题总结

同样的HQL,在CDH与TDH平台执行效率差异巨大的根本原因,是因为 TDH 采用了预计算和空间换时间的思想,提前启动了 SPARK 集群,且改SPARK集群是以 STANDALONE 模式运行的跟YARN不会存在资源竞争,再加上该 SPARK 集群的 driver/excutor的memory和cpu等资源参数默认都比较高,所以作业执行效率会比CDH平台高。

话说回来,凡事有利就有弊,TDH 将所有作业都运行在同一个 spark 集群中,作业相互之间就有资源的竞争相互之间会有影响;而在CDH中,不同客户端提交的SQL属于不同的 SESSION,每个SESSION都会有自己的SPARK ON YARN集群,相互之间资源隔离处理的更好影响也更小。

新的问题

抛出个问题,HIVE ON SPARK 模式下,各个SESSION背后的 SAARK 集群何时启动?何时关闭?会不会有处理不慎资源泄露,造成SPARK集群不能及时关闭浪费YARN资源,甚至极端情况下因YARN 集群资源被浪费没有新的资源新的作业无法提交的风险?

笔者确实在线上遇到了这种情况,后续会通过另一篇博文讲述下相关知识。小伙伴们可先行思考下。STAY TUNED.

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
8天前
|
SQL 存储 分布式计算
ODPS技术架构深度剖析与实战指南——从零开始掌握阿里巴巴大数据处理平台的核心要义与应用技巧
【10月更文挑战第9天】ODPS是阿里巴巴推出的大数据处理平台,支持海量数据的存储与计算,适用于数据仓库、数据挖掘等场景。其核心组件涵盖数据存储、计算引擎、任务调度、资源管理和用户界面,确保数据处理的稳定、安全与高效。通过创建项目、上传数据、编写SQL或MapReduce程序,用户可轻松完成复杂的数据处理任务。示例展示了如何使用ODPS SQL查询每个用户的最早登录时间。
29 1
|
13天前
|
消息中间件 监控 数据可视化
大数据-79 Kafka 集群模式 集群监控方案 JavaAPI获取集群指标 可视化监控集群方案: jconsole、Kafka Eagle
大数据-79 Kafka 集群模式 集群监控方案 JavaAPI获取集群指标 可视化监控集群方案: jconsole、Kafka Eagle
37 2
|
2月前
|
运维 算法 数据可视化
【2021 高校大数据挑战赛-智能运维中的异常检测与趋势预测】2 方案设计与实现-Python
文章详细介绍了参加2021高校大数据挑战赛中智能运维异常检测与趋势预测任务的方案设计与Python实现,包括问题一的异常点和异常周期检测、问题二的异常预测多变量分类问题,以及问题三的多变量KPI指标预测问题的算法过程描述和代码实现。
63 0
|
5天前
|
机器学习/深度学习 监控 搜索推荐
电商平台如何精准抓住你的心?揭秘大数据背后的神秘推荐系统!
【10月更文挑战第12天】在信息爆炸时代,数据驱动决策成为企业优化决策的关键方法。本文以某大型电商平台的商品推荐系统为例,介绍其通过收集用户行为数据,经过预处理、特征工程、模型选择与训练、评估优化及部署监控等步骤,实现个性化商品推荐,提升用户体验和销售额的过程。
19 1
|
14天前
|
存储 NoSQL 大数据
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
25 3
|
13天前
|
SQL 分布式计算 大数据
大数据-108 Flink 快速应用案例 重回Hello WordCount!方案1批数据 方案2流数据(一)
大数据-108 Flink 快速应用案例 重回Hello WordCount!方案1批数据 方案2流数据(一)
29 0
|
13天前
|
大数据 流计算
大数据-108 Flink 快速应用案例 重回Hello WordCount!方案1批数据 方案2流数据(二)
大数据-108 Flink 快速应用案例 重回Hello WordCount!方案1批数据 方案2流数据(二)
35 0
|
2月前
|
机器学习/深度学习 数据采集 大数据
2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 问题一建模方案及代码实现详解
本文详细介绍了2022年第三届MathorCup高校数学建模挑战赛大数据竞赛赛道B的题目——北京移动用户体验影响因素研究,提供了问题一的建模方案、代码实现以及相关性分析,并对问题二的建模方案进行了阐述。
79 0
2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 问题一建模方案及代码实现详解
|
2月前
|
搜索推荐 OLAP 流计算
OneSQL OLAP实践问题之基于 Flink 打造流批一体的数据计算平台如何解决
OneSQL OLAP实践问题之基于 Flink 打造流批一体的数据计算平台如何解决
48 1
|
2月前
|
机器学习/深度学习 数据采集 大数据
2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 问题二建模方案及代码实现详解
本文详细介绍了2022年第三届MathorCup高校数学建模挑战赛大数据竞赛赛道B的问题二的建模方案和Python代码实现,包括数据预处理、特征工程、模型训练以及预测结果的输出,旨在通过数据分析与建模方法帮助中国移动北京公司提升客户满意度。
66 2