`
punishzhou
  • 浏览: 142910 次
社区版块
存档分类
最新评论

HTable的使用

 
阅读更多

当前一般HBase的读写(删除也认为是写)都是通过HTable对象来操作的。

 

首先看官方的注释

 

 

 * <p>Used to communicate with a single HBase table.

 *

 * <p>This class is not thread safe for reads nor write.

 * 

 * <p>In case of writes (Put, Delete), the underlying write buffer can

 * be corrupted if multiple threads contend over a single HTable instance.

多线程操作同一个HTable实例的时候write buffer会混乱。也就是说HTable不是线程安全的。

具体体现在两个方面:

1.写的时候会把数据写到一个writebuffer里面,多线程的话全部写入到同一个buffer会导致数据紊乱

2. wirteBuffer清空的时候也有问题,不知道哪些数据已经写成功,哪些还未写成功。

基于这两个方面我们可以认为写的时候用同一个HTable实例时不推荐的。

 

有人可能会提出HTablePool是线程安全的,那用pool会如何。

实际上HTabePool的作用我认为是为了控制客户端对HTable的滥用。

其官方说明

/*Get areference to the specified table from the pool。*/

得到的仅仅是一个HTable的引用,如果当前pool中没有该table的HTable对象那么会new一个。

记住操作完以后要把该引用放回去,否则你每次去getTable都是去new一个新的对象,这是一个很大的开销。

 

接着来看看scan的几个参数:

1. caching  

对于这个重要的参数,api上尽然说明不多。。

这个值可以大幅减少rpc时间,也就是说,如果你要求100条数据,如果你的caching是10,那么rpc通信次数只有10次,如果你的caching设置为1,那么rpc次数是100,这是一个极大地开销,不过这个值也不能设置的太大,否则对服务器端和客户端都是灾难性的。

2. batch

每个result上的kv数。

3.maxResultSize

Result的最大值

 

简单来说,

caching是一次从服务器端返回对少个Result对象,batch是每个Result上的kv数目,MaxResultSize是单个Result的最大值。

batch和MaxResultSize都是为了防止单个Result过大,将单个过大的Result拆开成几个返回防止客户端oom。。

 

 

 

 

 

 

分享到:
评论
1 楼 di1984HIT 2014-10-10  
学习了~~~

相关推荐

    HBASE使用注意事项

    ### HBASE使用注意事项详解 #### 一、表设计注意事项 **1.... - **背景**:HBase依赖于...此外,对于Java API的使用也需要注意资源管理和HTable实例的有效管理。遵循这些原则将有助于提高HBase系统的稳定性和性能。

    Java代码通过API操作HBase的最佳实践.pdf

    首先,避免直接使用`HTable`实例化。通常,开发人员可能会直接通过`new HTable(config, tablename)`创建`HTable`对象,但这不是推荐的方式,因为它涉及到了昂贵的初始化过程,包括检查表的存在性和可用性。这种初始...

    eclipse构建HBase开发环境并运行实例对Hbase建表增删改查

    2. 增操作:使用HTable类可以实现增操作。首先需要创建一个HTable对象,然后使用Put对象将数据写入到HBase中。 ```java public static void put(String tablename, String row, String columnFamily, String column,...

    htable2csv:将HTML表转换为.csv文件

    "htable2csv"工具的工作原理可能包括以下步骤: 1. **解析HTML**:首先,该工具会解析输入的HTML文件或网页内容,找到其中的`&lt;table&gt;`元素。HTML解析库如BeautifulSoup或html.parser在Python中被广泛应用来实现这一...

    Hbase调用JavaAPI实现批量导入操作.docx

    批量导入操作需要使用 HTable 类,通过 put() 方法将数据写入 Hbase 表中。代码如下: ```java public static void put(String tableName, String row, String columnFamily, String column, String data) throws ...

    Java操作Hbase进行建表、删表以及对数据进行增删改查

    使用 HTable 对象进行增删改查操作: ```java HTable table = new HTable(configuration, "wuji"); Put put = new Put("rowkey"); put.add("cf", "qualifier", "value"); table.put(put); Get get = new Get(...

    hbase访问方式之javaapi共3页.pdf.zip

    对于并发控制,可以使用HTable的`checkAndPut()`和`checkAndDelete()`方法。 九、优化与性能 优化HBase Java API的使用,可以考虑以下几点:批量操作、使用BufferedMutator、调整缓存设置、选择合适的分区策略等。 ...

    HBaseClientDemo

    3. `HTable`: 表示与HBase表的连接,通过`HTable.getTableName()`获取表名,`HTable.getTableDescriptor()`获取表的描述符,`HTable.put()`和`HTable.get()`分别用于写入和读取数据。 4. `Put` 和 `Get`: 这两个类...

    hadoop 分布式云计算 课程设计报告

    5. HBase的连接池管理和HTable的使用。 6. HBase中Scan类的运用,用于数据的扫描和查询。 这样的课程设计有助于学生理解Hadoop生态系统的实际应用,以及如何在实际项目中结合不同的数据库技术进行数据管理。同时,...

    如何使用Java API操作Hbase(基于0.96新的api)

    创建`HTable`实例来操作表,并使用`Put`对象插入数据: ```java HTable table = new HTable(config, "MyTable"); byte[] rowKey = Bytes.toBytes("row1"); Put put = new Put(rowKey); put.add(Bytes.toBytes(...

    Hbase几种入库方式

    Hbase 入库方式比较 ...预先生成 HFile 入库适合大规模数据集,通过 MapReduce 入库适合需要批量处理数据的场景,使用 HTable.put() 方法入库适合小规模数据集,多线程入库适合需要高效写入的场景。

    Hbase 练习

    - **使用Scan**:当需要扫描表中的一部分或全部数据时,可以使用Scan。 示例代码如下: ```java public void testGet() throws IOException { HTable table = new HTable(conf, "peoples"); Get get = new Get...

    Hbase调用JavaAPI实现批量导入操作

    批量导入通常使用`HTable`的`put`方法或者`batch`方法。`put`方法用于插入单条记录,而`batch`方法则可以处理多条记录,提高了效率。批量操作将所有待写入的数据先放入内存,然后一次性提交到HBase,减少了网络传输...

    Mapinfo常用函数及用法

    本篇文章将详细探讨MapInfo中的一些常见函数及其用法,这对于MapInfo的开发和高级使用至关重要。 1. **SelectByExpression()**: 这个函数用于根据指定的表达式选择表中的记录。例如,`SelectByExpression("AREA &gt;...

    hbase资料api

    HTable table = new HTable(hbaseConfig, tablename); Get get = new Get(row.getBytes()); get.addColumn(family.getBytes(), column.getBytes()); if (num &gt; 1) { get.setTimestamp(time); } if (time != 0...

    hadoop中安装hbase及创建表等.docx

    在大数据领域,分布式数据库HBase是处理海量结构化半结构化数据的重要工具,尤其是在与Hadoop结合使用时,能够提供高效、可扩展的数据存储和查询能力。本文将详细讲解如何在Hadoop环境中安装HBase以及如何使用Java ...

    某大数据公司内部Hbase性能测试详细设计文档及用例

    通过调用HTable.setAutoFlush(false)方法可以将HTable写客户端的自动flush关闭,这样可以批量写入数据到HBase,而不是有一条put就执行一次更新,只有当put填满客户端写缓存时,才实际向HBase服务端发起写请求。...

    HBASE性能调优方法1

    批量读取也是同样的原理,使用`HTable.get(List)`可以高效获取多行数据。 6. 多线程并发写入: 在客户端开启多个写线程,每个线程负责一个HTable对象的flush操作,结合定时flush和写缓冲区,能够在数据量变化时灵活...

    hivestu.zip

    4. **查询数据**:使用 `HTable` 的 `get()` 方法获取特定行的数据,或者使用 `Scanner` 对象进行扫描操作,遍历表中的多行数据。 5. **删除表和数据**:`HBaseAdmin` 提供了 `deleteTable()` 方法删除整个表,而 `...

    利用Hbase相关的API,包括对HBase的增删改查等操作

    3. **插入数据**:使用`HTable`接口插入数据到HBase。首先创建一个`Put`对象,然后添加行键和列族/列标识符及对应的值。 ```java HTable table = new HTable(config, "myTable"); byte[] rowKey = Bytes.toBytes(...

Global site tag (gtag.js) - Google Analytics