大数据集群HIVESQL经常执行失败问题调查

一、背景

        BI集群,有60多个节点,2P+数据,机器都已经运行了3年以上

二、现象

        提交hive任务会经常失败,有时候能成功,上午失败概率大,下午成功的概率大。

        异常日志:

        日志1、

2021-09-30 08:28:35.451 [AMRM Callback Handler Thread] INFO com.aaa.lever.master.RMCallbackHandler.onContainersCompleted(RMCallbackHandler.java:77)  -->  got container status for containerID=container_e155_1632330508050_62782_01_000002, state=COMPLETE, exitStatus=1, diagnostics=Exception from container-launch.
Container id: container_e155_1632330508050_62782_01_000002
Exit code: 1
Stack trace: ExitCodeException exitCode=1: 
	at org.apache.hadoop.util.Shell.runCommand(Shell.java:538)
	at org.apache.hadoop.util.Shell.run(Shell.java:455)
	at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:715)
	at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:211)
	at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302)
	at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:82)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)


Container exited with a non-zero exit code 1

2021-09-30 08:28:35.602 [main] INFO com.aaa.lever.master.LeverMasterManipulator.finish(LeverMasterManipulator.java:185)  --> Application completed. Stopping running containers
2021-09-30 08:28:35.614 [main] INFO com.aaa.lever.master.LeverMasterManipulator.finish(LeverMasterManipulator.java:189)  --> Application completed. Signalling finish to RM
2021-09-30 08:28:35.722 [main] INFO com.aaa.lever.master.LeverMaster.main(LeverMaster.java:58)  --> Application Master failed:Exception from container-launch.
Container id: container_e155_1632330508050_62782_01_000002
Exit code: 1
Stack trace: ExitCodeException exitCode=1: 
	at org.apache.hadoop.util.Shell.runCommand(Shell.java:538)
	at org.apache.hadoop.util.Shell.run(Shell.java:455)
	at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:715)
	at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:211)
	at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302)
	at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:82)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)


Container exited with a non-zero exit code 1

2021-09-30 08:28:35.723 [main] INFO com.aaa.lever.master.LeverMaster.main(LeverMaster.java:59)  --> exiting now

        日志2、

Exception in thread "main" java.lang.RuntimeException: java.sql.SQLException: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask
	at com.aaa.lever.task.SyncTask.call(SyncTask.java:58)
	at com.aaa.lever.action.SqlActionMain.executeSql(SqlActionMain.java:119)
	at com.aaa.lever.action.SqlActionMain.main(SqlActionMain.java:86)
Caused by: java.sql.SQLException: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask
	at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:296)
	at org.apache.hive.jdbc.HiveStatement.executeUpdate(HiveStatement.java:406)
	at org.apache.hive.jdbc.HivePreparedStatement.executeUpdate(HivePreparedStatement.java:119)
	at com.aaa.lever.task.SqlExecutorTask.doTask(SqlExecutorTask.java:110)
	at com.aaa.lever.task.SyncTask.call(SyncTask.java:45)
	... 2 more

三、调查思路

        1、怀疑跟之前hadoop集群的异常一样,是因为单个节点问题导致的,结果节点问题修复以后,hive的问题依然存在。

qingchen:hadoop集群异常问题排查记录3 赞同 · 0 评论文章

        2、根据日志1进行分析,调查各种exit dode = 1的问题

        因为这个日志没有具体表现,所以还需要找更具体的日志才是真正的原因。

        3、根据日志2进行分析,搜索到的大多数是

Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask“

这个异常,说是yarn集群资源不足或者权限的问题,

而我们这个问题的异常是

“Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask“

一个MapRedTask,一个MapredLocalTask,

MapredLocalTask是跟本地任务有关,hive为了提高效率会自动把common join改为map join,这样任务会在本地运行join操作,如果本地内存不够,就会报错。

每天凌晨到上午这个时间段,集群运行任务较多,内存占用率高,个别机器内存处于满负荷状态,如果在这些负载高的机器上进行本地操作的话,内存是不够用的,所以报错的概率大。

下午的时候,集群任务少,比较空闲,负载低,所以大多数任务都能成功。

参考:

org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask_choulanlan_51CTO博客

hive任务return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask错误

四、解决方案

        把hive.auto.convert.join和hive.auto.convert.join.noconditionaltask参数值改为false

        这样不会自动转化join为map join,不会在某个节点本地执行join任务,但是会牺牲一部分性能。

五、结论

        1、日志很重要,一定要找对异常日志。

        2、量变引起质变,在量少的情况下是优化的操作,等到量大时没准就会出问题,所以性能优化不是一成不变的,需要具体情况具体分析。

 

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您好!对于大数据项目,Spark和Hive是非常常用的工具。Spark是一个快速、通用的大数据处理引擎,它提供了丰富的API和内置库,支持在大规模数据集上进行高性能的分布式计算。Hive是一个建立在Hadoop之上的数据仓库工具,它提供了类似于SQL的查询语言HQL,可以方便地对存储在Hadoop集群上的数据进行查询和分析。 在一个大数据项目中,通常会使用Spark进行数据处理和计算,而Hive则用于数据的存储和查询。下面是一个基本的大数据项目流程: 1. 数据采集:从各种数据源(如传感器、日志、数据库等)收集原始数据,并进行清洗和预处理。 2. 数据存储:将处理后的数据存储到合适的存储系统中,如Hadoop分布式文件系统(HDFS)或云存储服务。 3. 数据处理:使用Spark进行数据处理和计算,可以使用Spark的DataFrame和SQL API对数据进行转换、过滤、聚合等操作。 4. 数据分析:使用Hive进行数据的查询和分析,可以通过HQL语言编写复杂的查询,从存储在Hadoop上的数据中提取有用信息。 5. 数据可视化:将分析结果可视化展示,可以使用图表、仪表板等方式呈现数据分析结果,帮助用户理解和决策。 这只是一个简单的大数据项目流程示例,实际项目中可能还涉及到数据清洗、特征工程、机器学习等其他环节。希望能对您有所帮助!如果您有更具体的问题,欢迎提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轻尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值