大数据问题排查系列 - TDH大数据平台中 HIVE作业长时间无法执行结束

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 大数据问题排查系列 - TDH大数据平台中 HIVE作业长时间无法执行结束

大数据问题排查系列 - TDH大数据平台中 HIVE作业长时间无法执行结束

前言

大家好,我是明哥!

本片博文是“大数据问题排查系列”之一,讲述某星环 TDH 大数据平台中,研发同学提交的 Hive 作业在成功提交后,客户端长时间收不到任何结果信息也收不到任何报错信息问题的排查。

以下是正文。

问题现象

研发同学反馈,提交的很多 Hive 作业在成功提交后,客户端长时间收不到任何结果信息也收不到任何报错信息,如下图所示,有的作业在提交 1.7h 后都没有执行结束,客户端没有收到任何结果信息,也没有收到任何报错信息。

image.png

问题初步分析

熟悉 CDH/HDP 大数据平台 或 apache 原生版 hive 的同学,有的可能遇到过上述 hive 作业长时间都没有执行结束且没有任何报错信息的情况,这通常是因为作业提交到的 yarn 队列没有足够的资源,hive 作业无法申请到足够的 yarn container 从而长时间无法执行结束。只要确保整个 yarn 集群和作业对应的 yarn 队列资源足够,且作业提交到了正确的 yarn 队列中,一般都可以修复问题。(当然,作业申请到了资源后,执行结果是成功还是失败是另外一回事)。

但是在 TDH 中,以上论断是不成立的。事实上,在 TDH 中,hive 作业跟本就不是运行在 YARN上的,跟本就不消耗任何 YARN 资源!

背景知识 - TDH 中,hive 作业的运行机制

星环的 TDH 大数据平台中的 HIVE,其正式名称是 Inceptor, 是基于早期的某个版本的开源的 Apache hive 改造得来的,其在底层做了大量魔改和优化,也 cherry pick 了开源 apache hive后续版本的很多先进功能,但其一致秉持的是闭源的路线,跟开源的 apache hive 的任何一个版本都没有严格的对应关系了!事实上,二者的很多参数都是不通用的,在底层的作业执行机制上也是不同的。

在 TDH 中,Inceptor 作业不是运行在 YARN 上,而是运行在 Inceptor 后台的一个 spark 集群中,且该 spark 集群是一个 standalone 模式的 spark 集群,本身也不占用任何 YARN资源!事实上,TDH 中在启动 Inceptor 服务时,就在背后将该 spark集群启动起来了,后续所有提交给 Inceptor 的作业都是运行在该 spark 集群中的!由于省去了提交作业后,申请资源,启动分布式多个JVM,执行作业,再销毁分布式多个JVM的时间开销,所以 Inceptor 中作业的执行速度会比 cdh/hdp/apache hive 中快很多,特别是在 SQL 底层对应大量小作业时更是如此。(当然了,双刃剑的另一面是,TDH中 inceptor 作业之间的资源隔离没有 cdh/hdp/apache hive中做的好)。

从原理上想想,这其实也是对空间换时间和预计算的一种实现吧。

如下图所示,Inceptor 底层有多个服务角色:

image.png

Inceptor 底层有服务角色跟开源版本的服务角色的对应关系,如下表所示:

TDH服务角色 开源版对应服务角色 说明
Inceptor metastore hive metastore 元数据服务,底层数据库使用RDBMS如mysql,Inceptor中底层数据库是基于mysql的TxSql
Inceptor server HiveServer2 + spark driver beeline 或其它客户端提交sql到该服务
Inceptor Executor spark executor 执行sql作业底层任务的worker
Inceptor Compactor NA 可选,负责后台小文件合并

问题原因

知道了 TDH 中 Inceptor 作业的执行机制,我们就知道应该查看哪些 WEB UI,应该查看哪些服务角色的日志了。

首先查看 Inceptor server 的 webui, 熟悉 Spark 的小伙伴会发现,该 webui 跟 spark 的 webui 很像, 如下图所示:

image.png

细心的小伙伴能够发现,上图中 executors 页面只有一个driver, 没有任何 executor! 我们对比下正常的 Inceptor server 的 webui 中 executors 页面,是可以看到注册成功的 executors 的。

image.png


我们接下来查看下该集群中都安装了哪些服务角色,如下图所示,可以看到该集群中安装了两个 inceptor metastore, 两个 Inceptor server, 两个 Inceptor executor, 和一个 Inceptor compactor:

image.png

接着查看 Inceptor server 日志,发现有报错信息:Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient memory, 即作业没有获得任何资源!

image.png

接着查看 Inceptor executor 日志,可以发现两个 executor 都注册到了tdh-02节点!

image.png


至此,问题就比较清晰了: 集群中安装了两个 Inceptor server(对应hiveserver2+spark deriver),分别在tdh-02和tdh-03节点;然后集群中只有两个 Inceptor executor (对应 spark executor) 且都注册到了 tdh-02 节点的 Inceptor server, 所以 tdh-03 节点的 Inceptor server 没有掌控任何 Inceptor executor, 刚好用户提交 SQL 到了 tdh-03 节点的 Inceptor server,所以因没有任何 executor 资源而长时间无法执行且没有任何报错!

事实上,熟悉 spark 的小伙伴们,会留意到,当 spark standalone 集群中只有 master 没有 worker时(比如 worker进程因故障异常退出),客户端是能够成功提交作业的,但提交的作业一样会因为申请不到 executors 资源而长时间无法运行结束且不会返回任何信息,跟上述现象是一致的。

问题解决

知道了以上的机制和原理,其实问题的解决就很简单了:让用户提交 SQL 到有inceptor executor 资源的 inceptor server 中即可!为避免混淆和简单起见,我们一般在 TDH 集群中只安装一个 Inceptor server!

所以我们删除了多余的 Inceptor server 服务角色,然后重启了 Inceptor 服务,此后作业成功执行,且仅仅花了几十毫秒!

image.png

ps. 我们知道 CDH 中是支持部署多个 HiveServer2 的,甚至可以结合 HA PROXY 做多个 hiveserver2 之间的 load balance,从而做到高可用和较高的并发相应;而从上述问题现象中可以看出,TDH 中似乎不能很好地处理这种部署多个 Inceptor server 的情况,因为 Inceptor Server 需要背后有 Inceptor executor才能正常对外提供服务,没有 Inceptor executor 的 Inceptor server 不但不能对外提供服务,反而容易引起用户混淆从而造成问题。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
1月前
|
SQL 存储 分布式计算
ODPS技术架构深度剖析与实战指南——从零开始掌握阿里巴巴大数据处理平台的核心要义与应用技巧
【10月更文挑战第9天】ODPS是阿里巴巴推出的大数据处理平台,支持海量数据的存储与计算,适用于数据仓库、数据挖掘等场景。其核心组件涵盖数据存储、计算引擎、任务调度、资源管理和用户界面,确保数据处理的稳定、安全与高效。通过创建项目、上传数据、编写SQL或MapReduce程序,用户可轻松完成复杂的数据处理任务。示例展示了如何使用ODPS SQL查询每个用户的最早登录时间。
95 1
|
1月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
37 0
|
3月前
|
分布式计算 搜索推荐 物联网
大数据及AI典型场景实践问题之通过KafKa+OTS+MaxCompute完成物联网系统技术重构如何解决
大数据及AI典型场景实践问题之通过KafKa+OTS+MaxCompute完成物联网系统技术重构如何解决
|
3月前
|
人工智能 分布式计算 架构师
大数据及AI典型场景实践问题之基于MaxCompute构建Noxmobi全球化精准营销系统如何解决
大数据及AI典型场景实践问题之基于MaxCompute构建Noxmobi全球化精准营销系统如何解决
|
3月前
|
机器学习/深度学习 搜索推荐 算法
飞天大数据平台产品问题之AIRec在阿里巴巴飞天大数据平台中的功能如何解决
飞天大数据平台产品问题之AIRec在阿里巴巴飞天大数据平台中的功能如何解决
|
3月前
|
存储 机器学习/深度学习 数据采集
深入解析大数据核心概念:数据平台、数据中台、数据湖与数据仓库的异同与应用
深入解析大数据核心概念:数据平台、数据中台、数据湖与数据仓库的异同与应用
|
3月前
|
SQL 存储 分布式计算
MaxCompute 入门:大数据处理的第一步
【8月更文第31天】在当今数字化转型的时代,企业和组织每天都在产生大量的数据。有效地管理和分析这些数据变得至关重要。阿里云的 MaxCompute(原名 ODPS)是一个用于处理海量数据的大规模分布式计算服务。它提供了强大的存储能力以及丰富的数据处理功能,让开发者能够快速构建数据仓库、实时报表系统、数据挖掘等应用。本文将介绍 MaxCompute 的基本概念、架构,并演示如何开始使用这一大数据处理平台。
561 0
|
3月前
|
SQL 分布式计算 大数据
"大数据计算难题揭秘:MaxCompute中hash join内存超限,究竟该如何破解?"
【8月更文挑战第20天】在大数据处理领域,阿里云的MaxCompute以高效稳定著称,但复杂的hash join操作常导致内存超限。本文通过一个实例解析此问题:数据分析师小王需对两个共计300GB的大表进行join,却遭遇内存不足。经分析发现,单个mapper任务内存默认为2GB,不足以支持大型hash表的构建。为此,提出三种解决方案:1) 提升mapper任务内存;2) 利用map join优化小表连接;3) 实施分而治之策略,将大表分割后逐一处理再合并结果。这些方法有助于提升大数据处理效率及稳定性。
86 0
|
3月前
|
SQL 分布式计算 大数据
"揭秘MaxCompute大数据秘术:如何用切片技术在数据海洋中精准打捞?"
【8月更文挑战第20天】在大数据领域,MaxCompute(曾名ODPS)作为阿里集团自主研发的服务,提供强大、可靠且易用的大数据处理平台。数据切片是其提升处理效率的关键技术之一,它通过将数据集分割为小块来优化处理流程。使用MaxCompute进行切片可显著提高查询性能、支持并行处理、简化数据管理并增强灵活性。例如,可通过SQL按时间或其他维度对数据进行切片。此外,MaxCompute还支持高级切片技术如分区表和分桶表等,进一步加速数据处理速度。掌握这些技术有助于高效应对大数据挑战。
116 0
|
4月前
|
分布式计算 运维 大数据
混合云模式下 MaxCompute + Hadoop 混搭大数据架构实践。
除了资源效率和成本的优势外,混合云模式还为斗鱼带来了可量化的成本、增值服务以及额外的专业服务。阿里云的专业团队可以为斗鱼提供技术咨询和解决方案,帮助斗鱼解决业务难题。此外,计算资源的可量化也使得斗鱼能够清晰地了解资源使用情况,为业务决策提供依据。