大数据集群HIVESQL经常执行失败问题调查
创始人
2024-04-22 21:27:18
0

一、背景

        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 12021-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 12021-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.MapredLocalTaskat 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.MapredLocalTaskat 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、量变引起质变,在量少的情况下是优化的操作,等到量大时没准就会出问题,所以性能优化不是一成不变的,需要具体情况具体分析。

 

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...