java.net.SocketTimeoutException: Read timed out 问题解决
问题描述:
今天开发时发现,jdbc hive 连接执行 一个 hive sql 查询语句时,总是报org.apache.thrift.transport.TTransportException: java.net.SocketTimeoutException: Read timed out 异常
问题解决方案:
通过一番分析与问题查找,最终通过以下两个步骤解决了问题
步骤一:
在jdbc url 后面追加参数 ,设定各种超时时间参数设置为1800秒,因为hive任务可能会执行比较久,所以超时时间设置长一点
hive.metastore.client.socket.timeout=1800&hive.server.read.socket.timeout=1800&hive.server.write.socket.timeout=1800&hive.server.thrift.socket.timeout=1800&hive.client.thrift.socket.timeout=1800
以下是我追加参数后的url
jdbc:hive2://bigdata-test-4:10000/test?mapreduce.job.queuename=root.users.zhongtai&hive.metastore.client.socket.timeout=1800&hive.server.read.socket.timeout=1800&hive.server.write.socket.timeout=1800&hive.server.thrift.socket.timeout=1800&hive.client.thrift.socket.timeout=1800,username=hdfs,password=hdfs
步骤二:
在通过jdbc 创建 Statement 语句对象时,设置语句对象的查询超时时间为1800秒,由于执行hive sql 比较耗时,所以一定要设置一个合理的时间,等待hive sql 返回结果(此步骤非常关键!!!)
对应的api 方法如下: stmt为 java.sql.Statement 对象实例
stmt.setQueryTimeout(1800);
对应的截图如下:
版权声明:本文为pingweicheng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。