HBase Client使用注意点:
1 HTable线程不安全。
建议使用HTablePool,或者每次new一个HTable出来。
2 HTable和HConnection的关系。
注意HTable对象之间通过Configuration共享HConnection。
好吧,我偷懒了,实际上是通过HConnectionKey来共享HConnection的。
因此,相同的Configuration(更精准的说法是连接相关参数相同,参阅HConnectionKey)实际上使用的是同一个HConnection。
HConnectionKey可以查看源码。
3 HTable ResultScanner等等记着close。
这个没有什么好说的,java世界里面,凡是有close方法的类型,使用结束后,调用close是合情合理的操作。
4 HTablePool。
大部分应用都会使用HTablePool来管理HTable。
注意这个Pool和一般的Pool有些不一样。
超出pool maxsize时,一样可以得到HTable的引用,分别在于close时,如果未超出maxsize,htable返回给pool,如果超出maxsize,就close掉了事,和pool没有关系了。
注意:PooledHTable多次close有问题。同一HTable有可能超过pool大小被close掉,同时,有其他引用被保留在pool中。
5 HTable的构建性能
由于HTable和HConnection的关系,因此,无论是自己new Htable出来,还是使用HTablePool,都是第一次得到HConnection时比较耗时,后续相同的Configuration获取HTable时,
都是很高效的,可以认为是一个快速操作。
当然凡事有例外(很少见),当HConnectionImplementation的cachedRegionLocations中EMPTY_START_ROW的缓存被冲掉的时候,由于构造HTable,默认会定位一下该row所在的HRegionLocation,
这个时候构建一个HTable又变慢了。
6 HTablePool的maxSize设置。
从性能角度来看,由于pool的特性,不会使用maxSize来限制可以获得HTable的数量,因此,maxSize大小无关。
因此,该问题就变成了,应用中使用HTable的数量对应用有什么影响。
7 HTable的数量。
从内存角度看,由于HTable中有writeBuffer(不论autoFlush设置为true或者false,autoFlush只是影响flush的时机),默认2M,太多的HTable并发,对内存有一定的压力。
从线程角度,由于每个HTable中都有ExecutorService pool,因此HTable的数量会影响到应用线程的多少,线程的多少,反过来又影响内存,性能。
8 HTable的批量方法
可以使用批量方法的地方尽量使用批量方法。性能比较好,原因是底层RPC次数少。
9 HTable的autoflush
实时应用建议设置为true(默认值),设置为false时性能较好,但是注意有可能丢数据。
HBase ORM framework simplehbase除了以下ORM的功能外,提供了HTablePool的管理功能。
1 可以配置autoflush为false时,定时commit writebuffer的当前cache内容。
2 另外,支持HTable的ExecutorService灵活配置,可以多个HTable使用同一个ExecutorService。
simplehbase功能简介
https://github.com/zhang-xzhi/simplehbase
数据类型映射:java类型和hbase的bytes之间的数据转换。
简单操作封装:封装了hbase的put,get,scan等操作为简单的java操作方式。
hbase query封装:封装了hbase的filter,可以使用sql-like的方式操作hbase。
动态query封装:类似于myibatis,可以使用xml配置动态语句查询hbase。
insert,update支持: 建立在hbase的checkAndPut之上。
hbase多版本支持:提供接口可以对hbase多版本数据进行查询,映射。
HTablePool管理。
分享到:
相关推荐
在使用HbaseClient时,需要注意以下几点: 1. 调整客户端配置:根据实际需求调整客户端的缓存大小、超时时间等参数,以优化性能和稳定性。 2. 适当批量操作:尽量减少单次请求的数据量,采用批量操作可以提高整体...
在部署这个版本时,用户需要注意以下几点: 1. **环境准备**:确保已经安装了Java运行环境(JRE)和Hadoop。HBase依赖于Java,而Hadoop则提供了HBase所需的分布式存储基础。 2. **解压安装**:下载的“hbase-...
完成以上配置后,在主服务器上启动 Hadoop 服务,使用命令 `start-all.sh`,然后在 HBase 的 `bin` 目录下使用 `start-hbase.sh` 命令来启动 HBase。 ##### 5. 验证服务状态 最后,通过 `jps` 命令来验证 Hadoop ...
### Hadoop和Hbase安装使用教程 #### 一、准备工作 在正式开始Hadoop和HBase的安装之前,我们需要做一些准备工作。这些准备包括了安装必要的软件环境,例如虚拟机环境和SSH客户端,以及对虚拟机的基本配置。 ####...
注意,你需要替换`localhost:9090`为实际的HBase Thrift服务器地址和端口。 `hbase_t.go`文件可能包含了实现HBase操作的具体函数,如`exist`、`get`、`put`和`delete`。这些函数会使用上述创建的客户端与HBase交互...
文件名可能为`zookeeper-3.4.6.jar`(请注意,HBase 1.2.6可能依赖的是Zookeeper 3.4.x版本)。 6. **Apache Commons**: HBase和Hadoop使用了一些Apache Commons库,如Commons Lang、Commons Codec等。确保导入对应...
注意,由于HBase不支持日期类型,我们通常将日期转换为长整型(以毫秒为单位)进行存储。 总结,通过上述步骤,我们可以成功地将MySQL中的数据导入到HBase。在实际项目中,可能需要考虑更多因素,例如数据清洗、...
下面,我们将深入探讨如何配置DbVisualizer以连接到HBase,以及需要注意的关键点。 首先,连接HBase需要在DbVisualizer中设置正确的JDBC驱动。HBase通常通过HBase Thrift服务器提供JDBC访问,因此你需要确保已经...
- **C/C++ Apache HBase Client**:提供 C/C++ 开发者使用的 HBase 客户端接口。 #### 十二、HBase 性能调优 - **操作系统**:指导如何调整操作系统设置以优化 HBase 性能。 - **网络**:说明网络配置如何影响 ...
《Phoenix与HBase的深度解析:基于phoenix...但使用时也需注意其与HBase的交互机制,以及如何优化查询以适应分布式环境。通过深入理解和实践,开发者可以充分利用这两个强大的工具,构建出高效、易用的大数据解决方案。
同时,开发过程中需要注意版本兼容性,确保所使用的jar包与Hadoop和HBase集群的版本一致。 6. 性能优化:在实际部署中,还需要关注Hadoop和HBase的性能优化,如设置合适的Block Size、副本数量、内存分配等参数,...
注意替换上述代码中的IP地址、端口、表名和行键以匹配你的Hbase实例。 5. **启动服务端** 在Hadoop和Hbase环境中,确保已经启动了Hadoop集群、Hbase以及Thrift服务。对于Hadoop,可以通过`bin/start-all.sh`命令...
1. **HBase连接器(Connection)**:是访问HBase集群的入口点,负责管理和创建表、RegionServer等的链接。 2. **表(Table)**:代表了HBase中的一个表,提供了用于执行操作如put、get、scan等的方法。 3. **Put**...
### 大数据工具篇之Hive与HBase整合完整教程 ...需要注意的是,在实际操作中可能会遇到一些兼容性问题,特别是当使用的版本与其他教程或文档所使用的版本不一致时。因此,在实践过程中,应根据具体情况灵活调整配置。
注意这里使用了通配符`*`来指代所有的jar文件,确保不要遗漏这个符号。 通过这种方式,Hadoop就能够正确识别到所需的类库,从而避免找不到类的错误。 --- #### 二、HBase Master启动报错:无法归档文件 **报错...
2. **建立连接**: 使用配置创建`HConnection`对象,但请注意,从HBase 0.96版本开始,推荐使用`Connection`代替。 ```java Connection connection = ConnectionFactory.createConnection(config); ``` 3. **操作表...
- **HBase Client**:提供给应用程序的接口,用于插入、查询和更新数据。客户端可以是任何与HBase交互的应用,它们通过HBase API与Master和RegionServer通信,执行读写操作。 **不可变页面信息** 文档提到的“不可...