最近在监控中发现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连接持续增加的解决相关推荐

  1. 在Spring中使用JDBC访问关系数据

    在Spring中使用JDBC访问关系数据 本指南将引导您完成使用Spring访问关系数据的过程. 你会建立什么 您将构建一个使用Spring JdbcTemplate访问存储在关系数据库中的数据的应用 ...

  2. struts2和servlet同时用(访问servlet时被struts2过滤器拦截问题的解决)

    struts2和servlet同时用(访问servlet时被struts2过滤器拦截问题的解决) 参考文章: (1)struts2和servlet同时用(访问servlet时被struts2过滤器拦截 ...

  3. php位值,解决 PHP 中 usort 在值相同时改变原始位置的问题

    从 PHP 4.1.0 后,usort 在比较的值相同时,原始位置可能会改变,文档中是这样说的: If two members compare as equal, their order in the ...

  4. 解决Git中打开gitk图形界面时中文部分乱码

    解决Git中打开gitk图形界面时中文部分乱码 gitri图形日志gitk打开时,看到中文时乱码,不用着急按照下面方法立刻解决! 分析:这大部分是因为编码格式的问题,建议使用utf-8 without ...

  5. ios系统微信浏览器、safari浏览器中h5页面上拉下滑导致悬浮层脱离窗口的解决方法

    ios系统微信浏览器.safari浏览器中h5页面上拉下滑导致悬浮层脱离窗口的解决方法 参考文章: (1)ios系统微信浏览器.safari浏览器中h5页面上拉下滑导致悬浮层脱离窗口的解决方法 (2) ...

  6. HiveServer2中使用jdbc客户端用户运行mapreduce

    最近做了个web系统访问hive数据库,类似于官方自带的hwi.安居客的hwi改进版和大众点评的polestar(github地址)系统,但是和他们的实现不一样,查询Hive语句走的不是cli而是通过 ...

  7. phoenix hbase java_java jdbc访问hbase phoenix

    上面直接介绍了druid访问hbase phoenix的案例hbase Phoenix整合mybatis DruidDataSource 这里还是贴一下jdbc直接访问的方式.public stati ...

  8. 解决centos中vim粘贴yml代码时缩进错乱的问题

    背景描述 随着微服务的使用,在linux上使用vim或者vi命令编辑yml文件的时候,会自动缩进,导致文件根本 无法使用. 解决办法 粘贴前先执行如下命令: :set paste 再粘贴的时候,里面的 ...

  9. 服务器一拷贝文件就死机,u盘拷贝文件时导致电脑死机怎么办【解决方法】

    使用u盘存储.拷贝文件在我们的日常工作生活中已是很常用的移动存储设备,而随着技术的发展,大容量u盘也随之而来,而使用 u盘拷贝文件导致死机 也是我们会遇到的问题,那么遇到这种 u盘导致电脑死机 的问题 ...

最新文章

  1. codeception (4)Yii2下创建Acceptance Tests(验收测试)
  2. python基础教程:Counter类
  3. 卷积神经网络之 - VGGNet
  4. AJAX——AJAX请求递归
  5. 深度阅读之《Mastering Go》
  6. jwt token注销_辩证的眼光搞懂 JWT 这个知识点
  7. exxi6.7如何传文件到win7_比QQ直传快100倍!它让PC、安卓、iPhone光速互传文件
  8. 在配置静态IP的时候遇到 :bringing up interface eth0 : error unknown connection
  9. C语言 printf 函数 - C语言零基础入门教程
  10. mysql5.7.19不好用_Mysql 5.7.19 免安装版遇到的坑(收藏)
  11. 【GRE协议】CentOS配置GRE隧道
  12. Gradle下载及安装以及Idea项目配置
  13. arduino和轮毂电机接线_Arduino六足机器人第一部分—机制与接线
  14. bsd协议开源框架tcp服务器,BSD协议栈架构浅析
  15. 【光学】基于矩阵法和等效界面法分析光学薄
  16. python鸢尾花数据集_鸢尾花经典机器学习分类Python实现案例
  17. 如何区分自己mac电脑的CUP型号
  18. php7 开发框架,Lin是一套基于php7.2的全新web框架
  19. APE格式文件全攻略
  20. 自定义NavigationBar的思路

热门文章

  1. 投资数据中心所考虑的重要因素
  2. shell 日志统计常用脚本
  3. opencv 任意角度旋转图像
  4. LeetCode 109. 有序链表转换二叉搜索树
  5. Hashmap扩容时出现循环链表(jdk1.8把头插法换成了尾插法的原因)
  6. 360私有云平台-HULK 5岁啦~
  7. 20190520算法题存档
  8. html记仇表情包源码,写小本本记仇表情包
  9. dockerfile 与 docker-compose的区别
  10. swiper根据图片切换不同的背景色