1)基本概念
HTablePool
- 3种类型
- PoolType.Reusable(默认)一个实例池,多线程复用,内部是每个table一个ConcurrentLinkedQueue装多个实例
- PoolType.ThreadLocal,很奇怪的实现,每个线程只能有一个实例,感觉在多线程的场景没有意义
- PoolType.RoundRobin(没有被使用,就算设置了该类型也没用,见HTablePool的构造函数)
- PoolMap<String, HTableInterface> tables:用于存放table实例,正如上面提到的默认是每个table对应一个ConcurrentLinkedQueue
- maxSize:pool的最大尺寸
2)样例代码
3)关键点分析
3.1)初始化
HTablePool pool = new HTablePool(conf, 5);
- 实例化PoolMap
- 实例化HTablePool,此时还没有任何HTable实例,tables为空
3.2)获取table实例
pool.getTable(TEST_TABLE_NAME);
- 查看tables是否含有table,如果没有,创建一个HTable实例,HTable的初始化具体的细节见我的博文http://blog.csdn.net/pwlazy/article/details/7417135
- 将返回HTable实例封装成PooledHTable实例返回
- PooledHTable是HTable的一个Wrapper,除了close()不一样,PooledHTable的close会将HTable实例返回到上面提到的tables中
- 所以tables确实存放的是HTable实例,但取出来丢给应用程序的就是PooledHTable实例
3.3)table.get(get);
3.4)table.close();
- 将table归还到HTablePool中,如果此时HTablePool尺寸超过最大尺寸,释放该实例,
- 关于释放HTable实例与释放连接的问题
- HTable实例相关的两个连接,一个是对zookeeper,一个是regionServer
- 如果没有其他HTable实例(在HTablePool尺寸大于0的情况不可能出现这种情况),及没有zookeeper的连接计数为0,此时才会释放zookeeper连接
- regionServer的连接有HBaseClient$Connection这个线程单独维护,与HTable实例基本没啥关系,注意HBaseClient$Connection这个线程绑定了连接
4)总体看HTablePool
- 容纳了多个HTable实例
- 多个HTable实例会共享同一个zookeeper连接
- 多个HTable实例,如果同在一个RegionServer会共享同一个连接HBaseClient$Connection
- 很容易让人误解每个HTable实例都有一个HBaseClient$Connection,就像连接池那样,其实不是
- 虽然HTablePool有最大尺寸,但并没有限制HTable实例不得大于这个尺寸,一旦超过这个尺寸就会实例化,但归还到实例池的时候,如果池满了会弃用,因此HTablePool就是一个对象池而不是连接池
- 使用HTablePool的意义?《HBase-The-Definitive-Guide》 作者是这么说的
- 实例化HTable实例比较耗时,最好启动时初始化(这个理由不是很充分,完全可以使用HTable单例)
- HTable实例线程不安全,特别是在auto flash为false的情况,因为存在本地的write buffer ,即使auto flash为true,也不建议使用(对此作者并没说为什么)
- 建议每个线程一个HTable实例
-
HTablePool存在的问题
- PooledHTable的代码很恶心,PooledHTable作为一个HTable的wrapper,两者的关系应该是包含,但源码中却是继承
- HTablePool并不是连接池,就是直接使用HBaseClient$Connection【如果是同一个region的话就是单线程】来完成网络通讯的,后者的问题在我的博文http://blog.csdn.net/pwlazy/article/details/7417135有提到, 的确存在多个线程使用单个HBaseClient$Connection而带来同步和阻塞的问题,线上使用必须好好的压力测试一下
分享到:
相关推荐
simplehbase是java和hbase之间的轻量级中间件。 主要包含以下功能。 数据类型映射:java类型和hbase的bytes之间的数据转换。 简单操作封装:封装了hbase的put,get,scan等...HTablePool管理。 HTable count和sum功能。
Hbase 基本操作类 static { ... tablePool = new HTablePool(conf, poolsize); logger.debug("create hbase connection success"); // System.out.println("create hbase connection success"); }
基于Linux V4L2视频库、ASLA高级声音框架的远程视频及语音聊天
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
香色闺阁 2.56.1.ipa
基于python实现的智能监考系统,人脸信息采集识别签到+微机电脑录屏+前置摄像头录屏+违法外设检测+源代码+注释说明+演示视频 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。
CGnetsw.exe
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
并行计算简介.pptx
lyra默认地图玩家登录流程
域名防封防报毒网站程序PHP开源源码.rar域名防封防报毒网站程序PHP开源源码.rar
智能监考系统(机试) 人脸信息采集识别签到+微机电脑录屏+前置摄像头录屏+违法外设检测+违法进程检测关闭(含视频).zip 智能监考系统(机试) 人脸信息采集识别签到+微机电脑录屏+前置摄像头录屏+违法外设检测+违法进程检测关闭(含视频).zip 智能监考系统(机试) 人脸信息采集识别签到+微机电脑录屏+前置摄像头录屏+违法外设检测+违法进程检测关闭(含视频).zip 智能监考系统(机试) 人脸信息采集识别签到+微机电脑录屏+前置摄像头录屏+违法外设检测+违法进程检测关闭(含视频).zip 智能监考系统(机试) 人脸信息采集识别签到+微机电脑录屏+前置摄像头录屏+违法外设检测+违法进程检测关闭(含视频).zip 智能监考系统(机试) 人脸信息采集识别签到+微机电脑录屏+前置摄像头录屏+违法外设检测+违法进程检测关闭(含视频).zip 智能监考系统(机试) 人脸信息采集识别签到+微机电脑录屏+前置摄像头录屏+违法外设检测+违法进程检测关闭(含视频).zip 智能监考系统(机试) 人脸信息采集识别签到+微机电脑录屏+前置摄像头录屏+违法外设检测+违法进程检测关闭(含视频).zip
设计一个基于SSM(Spring, Spring MVC, MyBatis)后端框架和Vue.js前端框架的段子发布平台,可以划分为以下几个关键步骤: 1. 项目概述 目标:开发一个用户友好的段子发布、浏览和互动平台。 特点:用户注册、登录、发布段子、浏览段子、点赞、评论、分享等。 2. 技术栈选择 后端:Java(JDK 1.8 或更高版本),SSM框架(Spring Boot 2.x, Spring MVC, MyBatis)。 前端:Vue.js 2.x 或 3.x,Vue Router,Vuex(可选),Axios(用于发送HTTP请求)。 数据库:MySQL 5.7 或更高版本。 开发工具:IntelliJ IDEA 或 Visual Studio Code,Maven(或Gradle)项目管理工具。 3. 需求分析 用户注册与登录:用户需要能够注册新的账号并登录系统。 发布段子:用户应该能够发布包含文本、图片(可选)的段子。 浏览段子:用户可以浏览热门段子、最新段子或特定用户的段子。 点赞与评论:用户可以对段子进行点赞和评论。
REALTEK RTS3901、RTS3901L、RTS3902L芯片应用开发评估板Cadence原理图+PADS PCB图文件
kangle虚拟主机后台管理系统销售管理系统源码.rarkangle虚拟主机后台管理系统销售管理系统源码.rar
基于Qt+C++开发的智力数独游戏+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于Qt+C++开发的智力数独游戏+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于Qt+C++开发的智力数独游戏+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 项目简介: exe为可执行文件,可直接运行 提供计时、暂停、重开、提示、删除、不同难度和关卡选择随机生成数独的功能。
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
HTML源码下载,HTML5源码H5源码,产品官网,落地页,整站官网,论坛网站,电商网站,电商网站网页源码下载。预览地址:https://www.uu2id.com/34998.html