HTable和HTablePool都是HBase客户端API的一部分,可以使用它们对HBase表进行CRUD操作。下面结合在项目中的应用情况,对二者使用过程中的注意事项做一下概括总结。
HTable
HTable是HBase客户端与HBase服务端通讯的Java API对象,客户端可以通过HTable对象与服务端进行CRUD操作(增删改查)。它的创建很简单:
Configuration conf = HBaseConfiguration.create(); HTable table = new HTable(conf, "tablename"); //TODO CRUD Operation……
HTable使用时的一些注意事项:
1. 规避HTable对象的创建开销
因为客户端创建HTable对象后,需要进行一系列的操作:检查.META.表确认指定名称的HBase表是否存在,表是否有效等等,整个时间开销 比较重,可能会耗时几秒钟之长,因此最好在程序启动时一次性创建完成需要的HTable对象,如果使用Java API,一般来说是在构造函数中进行创建,程序启动后直接重用。
2. HTable对象不是线程安全的
HTable对象对于客户端读写数据来说不是线程安全的,因此多线程时,要为每个线程单独创建复用一个HTable对象,不同对象间不要共享 HTable对象使用,特别是在客户端auto flash被置为false时,由于存在本地write buffer,可能导致数据不一致。
3. HTable对象之间共享Configuration
HTable对象共享Configuration对象,这样的好处在于:
- 共享ZooKeeper的连接:每个客户端需要与ZooKeeper建立连接,查询用户的table regions位置,这些信息可以在连接建立后缓存起来共享使用;
- 共享公共的资源:客户端需要通过ZooKeeper查找-ROOT-和.META.表,这个需要网络传输开销,客户端缓存这些公共资源后能够减少后续的网络传输开销,加快查找过程速度。
因此,与以下这种方式相比:
HTable table1 = new HTable("table1"); HTable table2 = new HTable("table2");
下面的方式更有效些:
Configuration conf = HBaseConfiguration.create(); HTable table1 = new HTable(conf, "table1"); HTable table2 = new HTable(conf, "table2");
备注:即使是高负载的多线程程序,也并没有发现因为共享Configuration而导致的性能问题;如果你的实际情况中不是如此,那么可以尝试不共享Configuration。
HTablePool
HTablePool可以解决HTable存在的线程不安全问题,同时通过维护固定数量的HTable对象,能够在程序运行期间复用这些HTable资源对象。
Configuration conf = HBaseConfiguration.create(); HTablePool pool = new HTablePool(conf, 10);
1. HTablePool可以自动创建HTable对象,而且对客户端来说使用上是完全透明的,可以避免多线程间数据并发修改问题。
2. HTablePool中的HTable对象之间是公用Configuration连接的,能够可以减少网络开销。
HTablePool的使用很简单:每次进行操作前,通过HTablePool的getTable方法取得一个HTable对象,然后进行 put/get/scan/delete等操作,最后通过HTablePool的putTable方法将HTable对象放回到HTablePool中。
下面是个使用HTablePool的简单例子:
public void createUser(String username, String firstName, String lastName, String email, String password, String roles) throws IOException { HTable table = rm.getTable(UserTable.NAME); Put put = new Put(Bytes.toBytes(username)); put.add(UserTable.DATA_FAMILY, UserTable.FIRSTNAME, Bytes.toBytes(firstName)); put.add(UserTable.DATA_FAMILY, UserTable.LASTNAME, Bytes.toBytes(lastName)); put.add(UserTable.DATA_FAMILY, UserTable.EMAIL, Bytes.toBytes(email)); put.add(UserTable.DATA_FAMILY, UserTable.CREDENTIALS, Bytes.toBytes(password)); put.add(UserTable.DATA_FAMILY, UserTable.ROLES, Bytes.toBytes(roles)); table.put(put); table.flushCommits(); rm.putTable(table); }
【转自】http://www.cnblogs.com/panfeng412/archive/2012/07/11/htable-and-htablepool-apply-notes.html
相关推荐
simplehbase是java和hbase之间的轻量级中间件。 主要包含以下功能。 数据类型映射:java类型和hbase的bytes之间的数据转换。 简单操作封装:封装了hbase的put,get,scan等操作为简单的java...HTable count和sum功能。
htable2csv 将HTML表转换为.csv文件
wmic qfe list full /format:htable。是直接转换为html网页的存在 然后可以调用写到本地。但是无法取出来作为判断 于是我想到用超文本浏览器取打开这个html 。去读取文字 然后使用正则表达式获取补丁版本都有那些...
3、在该代码的基础上进行更加深入的研究,实现前沿的处理、匹配和搜索算法。 4、入门的三角匹配算法,为指纹匹配(1:1)研究奠基 5、入门的指纹图像索引搜索算法,为指纹搜索(1:N)奠基 一个指纹的完整处理过程可以...
wmic qfe list full /format:htable 是直接转换为html网页的存在 然后可以调用写到本地 但是无法取出来作为判断 于是我想到用超文本浏览器取打开这个html 去读取文字 然后使用正则表达式获取补丁版本都有那些 再去...
这个用于 Apache Storm 的连接器使用 AsyncHBase 客户端将原始数据和 Trident 状态保存到 Apache HBase。 好处 AyncHBase 客户端是 Apache HBase 的完全异步和线程安全的客户端。 与传统的 HBase 客户端 (HTable) ...
HTable C. HBaseAdmin D. PutList Answer: C 2.在MapReduce的应用程序开发中,下列哪个JAVA类负责管理和运行一个计算任务? A. lob B. Context C. FileSystem D. Configuration Answer: A 3.Fusionlnsight HD中...
可以从终端一次运行,也可以通过嵌入式交互式shell(可以使用kamcli shell启动-参见相应部分)来一次运行。 使用kamcli的原型是: kamcli [options] command [arguments] 可以将用于kamcli的新命令实现为插件,每...
为什么需要HBase HTable的逻辑组织 HBase的运行机制 HBase与 HDFS HBase的对外接口
asynchbase...这个 HBase 客户端跟 HBase 的客户端 HTable 有着很大的区别,不需要重写所有的 HBase API 交互代码,原生异步,而且使用一些线程就可以跟 HBase 进行高效的交互。 标签:Asynchronous
HTable table = new HTable(conf, "testtable"); // vv PutListExample List<Put> puts = new ArrayList(); // co PutListExample-1-CreateList Create a list that holds the Put instances. Put put1 = new ...
HBase 提供了强一致性的基于行和区域的 ACID 操作支持,但是牺牲了在跨区域操作的支持。这就要求应用开发者花很大力气来确保区域边界上操作的一致性。而 Tephra 提供了全局事务支持,可以夸区域、跨表以及多个 RPC ...
句法: htable = treeTable (pnContainer, headers, data, 'PropName',PropValue, ...) 输入参数: pnContainer - 容器 uipanel 或图形的可选句柄(默认值:gcf) headers - 列标题字符串的可选元胞数组数据-数据值...
网上的HBase书都比较老了,这是目前为止最新版本的HBase电子书。... Chapter 18: Using the HTable Class Part VI: Administration Chapter 19: Using the HBase Shell Chapter 20: Bulk Loading Data
端点协处理器:就像数据库的“存储过程”一样,这种类型的协处理器必须通过“ HTableInterface”(或HTable)的“ CoprocessorService()”方法显式触发。 协处理器不是为最终用户设计的,而是由开发人员使用的。 ...
该库的灵感来自David Santiago的并直接从他的库中取消了对HTable管理功能的支持。 发行版保留在clojars中。 最新版本是: com.compasslabs/clojure-hbase-schemas "0.90.4"描述引入了两个主要功能:模式和约束。 ...
wmic qfe list full /format:htable 是直接转换为html网页的存在然后可以调用写到本地 但是无法取出来作为判断 于是我想到用超文本浏览器取打开这个html 去读取文字 然后使用正则表达式获取补丁版本都有那些
文章目录HBASE 工具类HBASE 高可用搭建 ...import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.util.Bytes; import java.io.IO