[解决] HiveServer2中使用jdbc访问hbase时导致ZooKeeper连接持续增加的解决
最近在监控中发现HiveServer2连接到zookeeper里的连接持续上涨,很奇怪,虽然知道HiveServer2支持并发连接,使用ZooKeeper来管理Hive表的读写锁,但我们的环境并不需要这些,我们已经关闭并发功能,以下是线上的配置,甚至把这些值都改成final了。
但是zookeeper连接依然会涨。后来想想,我们要访问的表是hive去映射的hbase,hiveserver2什么时候去连接zookeeper,它连接zookeeper干么,先从日志下手,将线上日志级别改为了debug,然后在hiveserver2.log发现了如下信息:
2016-02-23 14:03:30,271 DEBUG [HiveServer2-Background-Pool: Thread-598-SendThread(hadoop002:2181)]: zookeeper.ClientCnxn (ClientCnxn.java:readResponse(717)) - Got ping response for sessionid: 0x252fd37100600d2 after 0ms
2016-02-23 14:03:30,325 DEBUG [HiveServer2-Background-Pool: Thread-797-SendThread(hadoop003:2181)]: zookeeper.ClientCnxn (ClientCnxn.java:readResponse(717)) - Got ping response for sessionid: 0x352fd3707b600e3 after 0ms
2016-02-23 14:03:30,626 DEBUG [HiveServer2-Background-Pool: Thread-1138-SendThread(hadoop003:2181)]: zookeeper.ClientCnxn (ClientCnxn.java:readResponse(717)) - Got ping response for sessionid: 0x352fd3707b600e8 after 0ms
2016-02-23 14:03:30,768 DEBUG [HiveServer2-Background-Pool: Thread-730-SendThread(hadoop001:2181)]: zookeeper.ClientCnxn (ClientCnxn.java:readResponse(717)) - Got ping response for sessionid: 0x152fd3707c800db after 0ms
2016-02-23 14:03:32,751 DEBUG [HiveServer2-Background-Pool: Thread-461-SendThread(hadoop001:2181)]: zookeeper.ClientCnxn (ClientCnxn.java:readResponse(717)) - Got ping response for sessionid: 0x152fd3707c800d5 after 0ms
2016-02-23 14:03:33,057 DEBUG [HiveServer2-Background-Pool: Thread-1211-SendThread(hadoop002:2181)]: zookeeper.ClientCnxn (ClientCnxn.java:readResponse(717)) - Got ping response for sessionid: 0x252fd37100600dd after 0ms
这是个线程池,由SessionManager创建,但它是在何时创建的,从日志里一时不好看出来,所以在我们测试环境里对HiveServer2搞了个远程调试,启用远程调试步骤:
在/etc/hive/conf/conf.server下hive-env.sh里上方添加:#add by lidong for remote debug
export HADOOP_OPTS="$HADOOP_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8888 -XX:NewRatio=12 -XX:MaxHeapFreeRatio=40 -XX:MinHeapFreeRatio=15 -XX:-UseGCOverheadLimit"
又经过近2天的折腾,终于搞明白了这个zookeeper连接是在Hive工程里的MapRedTask的execute(DriverContext driverContext) 方法里创建的:
...
if (!runningViaChild) { //这句很重要,解决就靠它了
// we are not running this mapred task via child jvm
// so directly invoke ExecDriver
return super.execute(driverContext);//就是这句,会调用hadoop里的JobClient去submitJob(job); 然后zookeeper连接就产生了
}
...
后面也再没去清理zookeeper的连接,导致就留下了
原因都清楚了,我选择了更为简单的处理办法,让控制runningViaChild的参数为true,让每个job在hiveserver2里都是子进程去提交,子进程结束,所有的资源都释放了
解决办法就是:
在hive-site.xml里,把
hive.exec.submitviachild 设置为true
调试的堆栈信息留个纪念:
[解决] HiveServer2中使用jdbc访问hbase时导致ZooKeeper连接持续增加的解决相关推荐
- 在Spring中使用JDBC访问关系数据
在Spring中使用JDBC访问关系数据 本指南将引导您完成使用Spring访问关系数据的过程. 你会建立什么 您将构建一个使用Spring JdbcTemplate访问存储在关系数据库中的数据的应用 ...
- struts2和servlet同时用(访问servlet时被struts2过滤器拦截问题的解决)
struts2和servlet同时用(访问servlet时被struts2过滤器拦截问题的解决) 参考文章: (1)struts2和servlet同时用(访问servlet时被struts2过滤器拦截 ...
- php位值,解决 PHP 中 usort 在值相同时改变原始位置的问题
从 PHP 4.1.0 后,usort 在比较的值相同时,原始位置可能会改变,文档中是这样说的: If two members compare as equal, their order in the ...
- 解决Git中打开gitk图形界面时中文部分乱码
解决Git中打开gitk图形界面时中文部分乱码 gitri图形日志gitk打开时,看到中文时乱码,不用着急按照下面方法立刻解决! 分析:这大部分是因为编码格式的问题,建议使用utf-8 without ...
- ios系统微信浏览器、safari浏览器中h5页面上拉下滑导致悬浮层脱离窗口的解决方法
ios系统微信浏览器.safari浏览器中h5页面上拉下滑导致悬浮层脱离窗口的解决方法 参考文章: (1)ios系统微信浏览器.safari浏览器中h5页面上拉下滑导致悬浮层脱离窗口的解决方法 (2) ...
- HiveServer2中使用jdbc客户端用户运行mapreduce
最近做了个web系统访问hive数据库,类似于官方自带的hwi.安居客的hwi改进版和大众点评的polestar(github地址)系统,但是和他们的实现不一样,查询Hive语句走的不是cli而是通过 ...
- phoenix hbase java_java jdbc访问hbase phoenix
上面直接介绍了druid访问hbase phoenix的案例hbase Phoenix整合mybatis DruidDataSource 这里还是贴一下jdbc直接访问的方式.public stati ...
- 解决centos中vim粘贴yml代码时缩进错乱的问题
背景描述 随着微服务的使用,在linux上使用vim或者vi命令编辑yml文件的时候,会自动缩进,导致文件根本 无法使用. 解决办法 粘贴前先执行如下命令: :set paste 再粘贴的时候,里面的 ...
- 服务器一拷贝文件就死机,u盘拷贝文件时导致电脑死机怎么办【解决方法】
使用u盘存储.拷贝文件在我们的日常工作生活中已是很常用的移动存储设备,而随着技术的发展,大容量u盘也随之而来,而使用 u盘拷贝文件导致死机 也是我们会遇到的问题,那么遇到这种 u盘导致电脑死机 的问题 ...
最新文章
- codeception (4)Yii2下创建Acceptance Tests(验收测试)
- python基础教程:Counter类
- 卷积神经网络之 - VGGNet
- AJAX——AJAX请求递归
- 深度阅读之《Mastering Go》
- jwt token注销_辩证的眼光搞懂 JWT 这个知识点
- exxi6.7如何传文件到win7_比QQ直传快100倍!它让PC、安卓、iPhone光速互传文件
- 在配置静态IP的时候遇到 :bringing up interface eth0 : error unknown connection
- C语言 printf 函数 - C语言零基础入门教程
- mysql5.7.19不好用_Mysql 5.7.19 免安装版遇到的坑(收藏)
- 【GRE协议】CentOS配置GRE隧道
- Gradle下载及安装以及Idea项目配置
- arduino和轮毂电机接线_Arduino六足机器人第一部分—机制与接线
- bsd协议开源框架tcp服务器,BSD协议栈架构浅析
- 【光学】基于矩阵法和等效界面法分析光学薄
- python鸢尾花数据集_鸢尾花经典机器学习分类Python实现案例
- 如何区分自己mac电脑的CUP型号
- php7 开发框架,Lin是一套基于php7.2的全新web框架
- APE格式文件全攻略
- 自定义NavigationBar的思路