使用jdbc查询impala时的超时问题

背景

项目中应用服务直接通过jdbc连接impala做数据查询,其他遇到一个问题,查询impala时因为没有设置查询超时,有些大sql一直占用连接,同时这个sql在impala集群中执行着,也占用了impala集群的资源,这样挤压了其他sql的响应。所以这时候设置查询超时,让连接断开,空闲出集群资源能够很大程度上提升服务的稳定性。

解决过程

连接impala的jdbc主要有cloudera jdbc和hive jdbc。因为需要使用kerberos认证来连接impala,最开始同事为了简单话选择了hive jdbc,配置kerberos也方便(官方推荐 Cloudera JDBC Connector)。开始用的很爽,但后面发现并不能设置查询超时(Statement.setQueryTime()无效,但是如果通过hive jdbc连接查询hive的话是能够生效的---HIVE-4924,查询impala却不行)。最后想查询下hive jdbc是否还有其他参数能够设置,通过几天的寻找,最终却无果。
后来把目光放在了cloudera jdbc上,通过文档中的参数,发现一个SocketTimeout参数,并在本地尝试了cloudera jdbc配置上SocketTimeout这个参数,在自测过程上都出现了大的查询没有执行完,因为SocketTimeout时间到了而断开并抛出socket timeout exception,当时很开心,以为问题解决了,当把这个拿给同事时,同事试了几次,有时候会timeout断开,有时候却根本不断开,直到sql执行成功返回,基本宣布这个参数失败。
再一次失败后,都快觉得这个问题搞不定了,我觉得不太可能是官方定义了一个不靠谱的参数,更可能是自己理解上面的错误,后来又反复查看了这个参数的解释(The number of seconds after which Impala closes the connection with the client application if the connection is idle),一旦连接空闲超过这个时长,impala就会关闭应该客户端的连接。什么叫connection is idle,以及它为何叫socketTimeout却不是查询超时的英文呢?socket是网络层,而且在参数定义中,说连接空闲,而不是连接占用的时间。有了这些疑问后,又搜索查询了一番,最终在一篇文章中,很详细的解释了jdbc中的各种timeout

Timeout 类别

The higher level timeout is dependent on the lower level timeout. The higher level timeout will operate normally only if the lower level timeout operates normally as well. If the JDBC driver socket timeout does not work properly, then higher level timeouts such as statement timeout and transaction timeout will not work properly either.
Even after the statement timeout was configured, the application still did not recover from the error because the statement timeout did not work at the time of network failure.

Timeout for Each Levels

什么是JDBC的socket timeout?

第4种类型的JDBC使用socket与数据库连接,数据库并不对应用与数据库间的连接超时进行处理。
JDBC的socket timeout在数据库被突然停掉或是发生网络错误(由于设备故障等原因)时十分重要。由于TCP/IP的结构原因,socket没有办法探测到网络错误,因此应用也无法主动发现数据库连接断开。如果没有设置socket timeout的话,应用在数据库返回结果前会无期限地等下去,这种连接被称为dead connection。
为了避免dead connections,socket必须要有超时配置。socket timeout可以通过JDBC设置,socket timeout能够避免应用在发生网络错误时产生无休止等待的情况,缩短服务失效的时间。
不推荐使用socket timeout来限制statement的执行时长,因此socket timeout的值必须要高于statement timeout,否则,socket timeout将会先生效,这样statement timeout就变得毫无意义,也无法生效。

什么是Statement Timeout?

statement timeout用来限制statement的执行时长,timeout的值通过调用JDBC的java.sql.Statement.setQueryTimeout(int timeout) API进行设置。不过现在开发者已经很少直接在代码中设置,而多是通过框架来进行设置。
不同的关系型数据库,以及不同的JDBC驱动,其statement timeout处理过程会有所不同。

通过这篇文章的讲解,我知道我之前在hive jdbc配置的Statement.setQueryTime()是statement timeout,它是依赖于更低基本的socket timeout, impala没有生效的原因很大可能是对于impala的查询statement并没有去处理超时(Statement Timeout Execution Process for JDBC Driver),而对hive查询却做了处理。
而cloudera jdbc提供了socket timeout参数,也在statement timeout提供了超时的处理,即statement查询超时后会中断查询并抛出java.sql.SQLTimeoutException。所以配置上Statement.setQueryTime(),就能够在查询超过timeout值后抛出异常,关闭连接。
最后讲queryTimeOut配置入DataSource,与orm结合,查询超时问题算告一段落。

参考

cloudera jdbc: https://www.cloudera.com/documentation/enterprise/5-11-x/topics/impala_jdbc.html#jdbc_driver_choice
query timeout: https://www.cubrid.org/blog/understanding-jdbc-internals-and-timeout-configuration
带有kerberos验证连接impala: http://blog.csdn.net/tlqfreedom/article/details/75220058

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容