Hbase学习

1. 因为hbase的数据库是以行为原子的,所以当许多客户端需要同时修改同一行数据时就会产生问题。解决办法就是尽量使用批量处理来减少单独操作同一行数据的次数。

2. 因为在创建HTable实例的时候,会扫描.META.表,这样会很耗时,所以推荐只创建一次HTable实例,而且是每个线程创建一个,然后在客户端应用的生存期内复用这个对象。

3. 如果需要使用多个HTable实例,就要考虑使用HTablePool,他提供了一个复用多个实例的便捷方式。

put:hbase的put都是以byte的数据进行put,所以所有的数据在存储之前都要用toByte进行转换。

1. 单行put:

1.1 创建所需的配置

1.2 实例化一个新的客户端,也就是建立一个table,同时要提供table名称

1.3 新建一个put,在这个时候要提供一个rowkey,指定一行来创建一个put

1.4 在put中添加列,提供列簇名称和列的名称,“colfam1:qual1”、“colfam1:qual2”

1.5 将这一行存储到hbase表中,也就是把这个put放进table里面:table.put(put);

2. hbase配置:

2.1 hbase的conf需要提供机器集群地址:quorum

2.2 提供节点的位置信息:parent

2.3 如果使用hbasepool,还需要给定poolsize信息

这些信息可以在config文件中进行配置,这样就可以在程序启动的时候对这些基础信息进行设置。

3. 在写入的过程中可以设置时间戳,如果不设置时间戳将会调用写入系统的时候,这个时候就要保证所有机器的时间都一致,否则就会造成数据的时间戳差异。

4. 通过version可以查到同一个rowkey不同时间写入的信息。

5. 提升写入速度的方法:

5.1 Write Buffer Size

HTable htable = new HTable(config, tablename); 
htable.setWriteBufferSize(6 * 1024 * 1024);
htable.setAutoFlush(false);  

* 必须禁止auto flush。

* 6MB是经验值,可以上下微调以适应不同的写场景。

5.2 禁止在写得时候写WAP

5.3 减少独立RPC调用的关键是限制往返时间,另一个就是要限制传输大小,

5.4 使用tablepool进行批量写入,这样的速度就更快。

6. 写入的时候也可以用batch进行写入,batch写入的时候有两种方法:

1. void batch(list<row> action, object[] results); 

2. object[] batch(list<row> action);

    第一种方法可以得到部分结果,第二种方法不行。第二种方法只会返回成功或者返回null。

    使用batch的方法和get(LIST<GET>)的区别是,batch直接访问服务器进行数据的写入和读取操作,但是list的方法则是会采用缓存的方式进行。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值