线上问题排查系列-org.apache.thrift.transport.TTransportException:java.net.SocketTimeoutExceptio

本文分享了一次在大数据业务系统中遇到的Hive SQL执行异常问题,主要表现为SocketTimeoutException。问题源于HiveStatement在等待SQL执行结果时,Thrift客户端读取结果超时。解决方案包括业务代码调整、Hive服务器性能优化、配置Thrift客户端超时时间和添加任务重试机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

大家好,我是明哥!

大数据作业异常的排查,往往是个比较棘手的问题。这一方便是因为分布式作业的执行往往需要跨多个网络节点进行通信比较复杂,另一方面也是因为涉及底层框架多(spark, hive, flink, hdfs, hbase, kafka, yarn,zookeeper 等等),排查人员对这些组件各自的运行机制以及组件之间如何交互配合完成最终作业的机制不甚明了,再加上整个作业的执行涉及到各种日志且这些日志散落于集群多个节点多个目录,如何根据时间线跟踪排查各处日志,还原作业执行发生异常时底层究竟发生了什么原因是什么,相比传统的作业异常的排查确实更加困难些。

但正所谓会者不难难者不会,只要大家日积月累勤修内功掌握各个组件的底层原理和运行机制,再加上勤学苦练多多实操查看异常时的各处日志并定期归纳整理,相信大家排查相关问题会越来越得心顺手,成为一名合格的“排坑”专家!在此分享一次真实项目中hive sql作业的异常排查经验,供大家学习参考。

问题现象

某大数据业务系统在每日日终清算环节,会采集上游业务系统rdbms中的业务数据到Hive中,进行hive sql离线计算,然后推送结果数据到下游系统的rdbms中。这些数据采集和推送作业,偶尔会执行失败,此时业务端会收到如下SocketTimeoutException异常:

java.sql.SQLException:org.apache.thrift.transport.TTransportException:java.net.SocketTimeoutException: Read timed out  atorg.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:262)

有的作业还会有个被抑制的异常:Suppressed:java.sql.SQLException: Error while cleaning up the server resources atorg.apache.hive.jdbc.HiveConnection.close(HiveConnection.java:595) Caused by:org.apache.thrift.TApplicationException: CloseSession failed: o

2025-04-03 00:03:39: Starting Hive Metastore Server org.apache.thrift.transport.TTransportException: Could not create ServerSocket on address 0.0.0.0/0.0.0.0:9083. at org.apache.thrift.transport.TServerSocket.<init>(TServerSocket.java:109) at org.apache.thrift.transport.TServerSocket.<init>(TServerSocket.java:91) at org.apache.thrift.transport.TServerSocket.<init>(TServerSocket.java:87) at org.apache.hadoop.hive.metastore.utils.SecurityUtils.getServerSocket(SecurityUtils.java:253) at org.apache.hadoop.hive.metastore.HiveMetaStore.startMetaStore(HiveMetaStore.java:8979) at org.apache.hadoop.hive.metastore.HiveMetaStore.main(HiveMetaStore.java:8854) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.hadoop.util.RunJar.run(RunJar.java:323) at org.apache.hadoop.util.RunJar.main(RunJar.java:236) Caused by: java.net.BindException: Address already in use (Bind failed) at java.net.PlainSocketImpl.socketBind(Native Method) at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:513) at java.net.ServerSocket.bind(ServerSocket.java:375) at org.apache.thrift.transport.TServerSocket.<init>(TServerSocket.java:106) ... 11 more Exception in thread "main" org.apache.thrift.transport.TTransportException: Could not create ServerSocket on address 0.0.0.0/0.0.0.0:9083. at org.apache.thrift.transport.TServerSocket.<init>(TServerSocket.java:109) at org.apache.thrift.transport.TServerSocket.<init>(TServerSocket.java:91) at org.apache.thrift.transport.TServerSocket.<init>(TServerSocket.java:87) at org.apache.hadoop.hive.metastore.utils.SecurityUtils.getServerSocket(SecurityUtils.java:253) at org.apache.hadoop.hive.metastore.HiveMetaStore.startMetaStore(HiveMetaStore.java:8979) at org.apache.hadoop.hive.metastor
最新发布
04-04
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

明哥的IT随笔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值