hive-jdbc版本:2.3.9
报错信息如下:
问题定位:客户端的socket连接读超时,默认超时时间为30秒,需要在应用端增大读超时时间。
解决方案:
1)hiveConnection在使用socket连接时,设置了超时时间为30秒,超时时间较短,在运行稍微复杂点的SQL时,就会导致超时。如下图。
2) hiveConnection的socket超时时间通过loginTimeout进行设置,而loginTimeout读取的DriverManager的超时时间,因此,在创建hive连接时需要设置DriverManage的loginTimeout属性。如下图。
3) hiveConnection通常使用数据库连接池进行创建和管理,系统使用的连接池为:Hikari。在数据库连接池创建时都会设置datasource的loginTimeout,并且会重置DriverManager的loginTimeout属性。如下图。
因此,需要使用connectionTimeout间接设置loginTimeout属性,如下。
config.setConnectionTimeout(1000 * 60 * 15);
总结:hive中执行SQL的耗时较长,需要增大网络读超时时间的值,如果使用Hikari数据库连接池管理hive连接,可以通过配置连接超时时间来改变hive的读超时时间。文章来源:https://www.toymoban.com/news/detail-607078.html
另外:网上有很多解决方案,通过设置 DriverManager.setLoginTimeout() 增大hive读超时的时间。不能盲目跟随,需要结合各自应用进行配置。文章来源地址https://www.toymoban.com/news/detail-607078.html
到了这里,关于hive read time out的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!