当前位置: 首页 > 知识库问答 >
问题:

hiveserver2 org.apache.thrift.transport.tTransportException在一分钟不活动后运行第二个查询时出错

古彦
2023-03-14

我从我的SQL工具(即Squirrel SQL、Oracle SQL Developer)与端口10000的HiveServer2(运行在远程服务器上)建立了一个JDBC连接。

我能够成功地运行一些查询。然后在1-2分钟内执行其他操作(不在SQL工具中),然后返回SQL工具并尝试运行查询,但我得到以下错误:org.apache.thrift.transport.ttransportException:java.net.socketException:Software caused connection abort:socket write error

如果我现在断开连接并在我的SQL工具中重新连接,我可以再次运行查询。但是有人知道我应该更改什么HiveServer2设置来防止错误吗?我假设hive-site.xml中有些东西

从下面的hiveserver2日志中,可以看到从30分钟到31stmin发生断开的时间间隔为1分钟。

2018-04-05T03:30:41,706  INFO [HiveServer2-Handler-Pool: Thread-36] session.SessionState: Resetting thread name to  HiveServer2-Handler-Pool: Thread-36
2018-04-05T03:30:41,712  INFO [HiveServer2-Handler-Pool: Thread-36] session.SessionState: Updating thread name to c81ec0f9-7a9d-46b6-9708-e7d78520a48a HiveServer2-Handler-Pool: Thread-36
2018-04-05T03:30:41,712  INFO [HiveServer2-Handler-Pool: Thread-36] session.SessionState: Resetting thread name to  HiveServer2-Handler-Pool: Thread-36
2018-04-05T03:30:41,718  INFO [HiveServer2-Handler-Pool: Thread-36] session.SessionState: Updating thread name to c81ec0f9-7a9d-46b6-9708-e7d78520a48a HiveServer2-Handler-Pool: Thread-36
2018-04-05T03:30:41,719  INFO [HiveServer2-Handler-Pool: Thread-36] session.SessionState: Resetting thread name to  HiveServer2-Handler-Pool: Thread-36
2018-04-05T03:31:41,232  INFO [HiveServer2-Handler-Pool: Thread-36] thrift.ThriftCLIService: Session disconnected without closing properly.
2018-04-05T03:31:41,233  INFO [HiveServer2-Handler-Pool: Thread-36] thrift.ThriftCLIService: Closing the session: SessionHandle [c81ec0f9-7a9d-46b6-9708-e7d78520a48a]
2018-04-05T03:31:41,233  INFO [HiveServer2-Handler-Pool: Thread-36] service.CompositeService: Session closed, SessionHandle [c81ec0f9-7a9d-46b6-9708-e7d78520a48a], current sessions:0
2018-04-05T03:31:41,233  INFO [HiveServer2-Handler-Pool: Thread-36] session.SessionState: Updating thread name to c81ec0f9-7a9d-46b6-9708-e7d78520a48a HiveServer2-Handler-Pool: Thread-36
2018-04-05T03:31:41,233  INFO [HiveServer2-Handler-Pool: Thread-36] session.SessionState: Resetting thread name to  HiveServer2-Handler-Pool: Thread-36
2018-04-05T03:31:41,233  INFO [HiveServer2-Handler-Pool: Thread-36] session.SessionState: Updating thread name to c81ec0f9-7a9d-46b6-9708-e7d78520a48a HiveServer2-Handler-Pool: Thread-36
2018-04-05T03:31:41,233  INFO [HiveServer2-Handler-Pool: Thread-36] session.HiveSessionImpl: Operation log session directory is deleted: /var/hive/hs2log/tmp/c81ec0f9-7a9d-46b6-9708-e7d78520a48a
2018-04-05T03:31:41,233  INFO [HiveServer2-Handler-Pool: Thread-36] session.SessionState: Resetting thread name to  HiveServer2-Handler-Pool: Thread-36
2018-04-05T03:31:41,236  INFO [HiveServer2-Handler-Pool: Thread-36] session.SessionState: Deleted directory: /var/hive/scratch/tmp/anonymous/c81ec0f9-7a9d-46b6-9708-e7d78520a48a on fs with scheme file
2018-04-05T03:31:41,236  INFO [HiveServer2-Handler-Pool: Thread-36] session.SessionState: Deleted directory: /var/hive/ec2-user/c81ec0f9-7a9d-46b6-9708-e7d78520a48a on fs with scheme file
2018-04-05T03:31:41,236  INFO [HiveServer2-Handler-Pool: Thread-36] hive.metastore: Closed a connection to metastore, current connections: 1

环境:

  • 配置单元2.1.1,其中hive.server2.transport.mode设置为二进制(示例JDBC字符串为JDBC:hive2:/remotehost:10000/default)
  • Hadoop 2.8.3
  • 使用MySQL转移
  • Java 8

共有1个答案

蔺山
2023-03-14
  1. 将AWS ELB的默认超时时间从1分钟更改为20分钟
  2. 将SimbaHive驱动程序与Squirrel一起使用(无超时),或将标准apache hive2驱动程序与IBM data studio一起使用(无超时)
 类似资料:
  • 在插入新记录之前,我正在验证记录的存在性。但是,代码不会跳入insert块。在Reader.Close之后跳转到finally block 我怀疑我一定是做错了什么,因为没有例外,而且每次RecordsInfacted=-1

  • 我在一个活动中有一个列表视图,在自定义适配器中有一个信息图标。当用户点击该信息按钮时,下一个活动将打开,当用户点击更新按钮时,在下一个活动中标记出勤率后,第二个活动应该完成,第一个活动列表视图应该更新。 我成功地做了什么:我已经成功地标记了出席情况并更改了listview的颜色,但我在关闭第二个活动并重新启动第一个活动后这样做了。通过这种方式,由于再次开始活动,listview会得到更新。 我无法

  • 问题内容: 我需要查询每一分钟到该分钟为止的总行数。 到目前为止,我能取得的最好成绩并不能解决问题。它返回每分钟的计数,而不是每分钟的总计数: 问题答案: 仅返回活动的分钟数 最短的 使用,它恰好返回您需要的内容。 不要包含在查询中,因为您希望记录切片。 通常用作简单的聚合函数。附加子句使其成为窗口函数。在窗口定义中忽略-您希望 对所有 行进行 运行计数 。默认情况下,按定义从当前行的第一行到最后

  • 假设我有一条这样的路线 我想在第二个查询中使用一些数据,这些数据将由第一个查询返回。但是现在我不能这样做,因为根据我的理解(如果我错了,请纠正我),这两个查询都是promise的,并且是异步工作的,所以它不会等待第一个查询的完成来执行第二个查询。 我将如何重写这一点,使第一个查询的执行总是在执行第二个查询之前首先完成?

  • 我想按下mainactivity中的一个按钮,该按钮将启动一个包含片段的新活动的意图。我写了一个主要的活动。带有main活动和第二个_活动按钮的xml。带有片段的xml。当我单击按钮时,第二个活动将由于xml中的片段而崩溃。我已经添加了一个标志,但它没有帮助。该应用程序的想法是通过按下主活动中的按钮,在第二个活动中获取谷歌地图。 我希望你能帮助我:/ 主要活动: 亚活性: activity_mai

  • 问题内容: 如标题所示,方案是:首次使用该应用程序时,显示屏幕A。完成屏幕A后,该按钮将引导您进入屏幕B。从现在开始,直到永远,屏幕B始终是主屏幕“启动应用程序时,屏幕上显示“屏幕(活动?)”。我正在尝试这2天,但我收不到。有人请解释一些细节,甚至最好给我扔一个code.rar,这样我就可以研究它。我为此感到疯狂!!! 问题答案: 只需在AndroidManifest.xml中将您的Activit