为了账号安全,请及时绑定邮箱和手机立即绑定

Hue的Impala模块没有释放连接的问题解决

标签:
Hadoop

最近在研究Impala的准入控制这块,其中一个参数是限制一个池中的最大并行执行的查询数,假设这个值是20,那么当提交一个查询到impala,而集群中已经有20个查询正在执行了,那么这个新加入的查询就会被加入到一个等待队列中,直到正在执行的查询执行完毕,并释放资源。

这个参数可以有效的缓解Impala的Memory Limit Exceeded问题。但是有一个问题,有两种情况hue会长时间占用查询资源,导致其他查询不得不等待。

webp

我们用的Hue版本是3.11.0,如上图所示:

第一个查询是hue进行配置校验的时候发起的,查询执行成功,但没有取出结果并关闭连接。

第二个是在hue中执行impala查询时,界面上先加载100条,当我们向下滚动到底部时候继续加载剩下的数据。数据没拿完,查询不关闭似乎也说的过去。

接着做了一个实验,在hue上执行 SELECT 'hello' ,可以看到页面发送了一个execute请求,和三个fetch_result_data请求,其中后面两次fetch_result_data的返回都是空的,并且has_more为false,因为我们的查询只有一行返回。

webp

webp

现在我们在同一个窗口在执行一遍刚才的查询,发现比上次多发送了一个close_statement请求。hue会保证一个会话窗口只创建一个impala连接,当同一个窗口提交新的查询时会强制关闭上一个查询。

当查询结果没有拿完之前不关闭连接是可以理解的,但是为什么我的结果都已经拿完了,还不释放连接呢,其实是hue有一个数据下载功能要复用当前连接。如果关闭连接的话,会导致下载失败。即便

如此,我还是希望fetch完所有数据后立即关闭连接,因为大多数查询都只会返回少量数据,并且不需要下载的。当有大量数据需要下载时,只有不把页面滑动到数据的最末端对下载是没有影响的。

webp

经过以上实验,我们总结出hue的两个问题

1.配置校验没有释放连接,是bug 还是 我们自己的环境问题?

2.能否在fetch完所有数据后关闭impala连接?

带着这两个问题,下载了hue的源码https://github.com/cloudera/hue

看到hue/apps/impala/src/impala/conf.py 文件发现确实没有fetch和close这样的操作

webp

这个问题在最新的版本中已经修正了。

webp

现在我希望在fetch_result_data返回所有数据后(及result.has_more 为false时)自动发起一次close_statement请求。通过一番搜索找到fetch_result_data请求的处理函数

在 hue/desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js 文件,修改如下:

webp

修改过我们再次执行 SELECT 'hello',可以看到第二fetch_result_data之后跟了一个close_statement请求。并且在impala后台可以看到连接已经成功释放了。虽然后面还跟了一个错误的fetch_result_data,但是无伤大雅。

webp



作者:Caoyun
链接:https://www.jianshu.com/p/77eb494ca52e


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消