如何在Hbase中快速插入10万条数据

 我们知道每一条put操作实际上都是一个rpc操作,它将客户端数据传送到服务器然后返回。这只是折小数据量的操作,如果有一个应用需要插入十万行数据

到hbase表中,这样处理就太不合适了。

hbase的api配备了一个客户端的些缓冲区,缓冲区负责手机put操作,然后调用rpc一次性将put送往服务器。

下面是一个插入十万行到一个表的代码:


  1. import org.apache.hadoop.conf.Configuration;
  2. import org.apache.hadoop.hbase.HBaseConfiguration;
  3. import org.apache.hadoop.hbase.TableName;
  4. import org.apache.hadoop.hbase.client.HBaseAdmin;
  5. import org.apache.hadoop.hbase.client.HTable;
  6. import org.apache.hadoop.hbase.client.Put;
  7. import org.apache.hadoop.hbase.util.Bytes;
  8. public class AddTest {
  9. static Configuration conf = null;
  10. static {
  11. conf = HBaseConfiguration.create();
  12. }
  13. public static void main(String args[]){
  14. String tableName = "testtable1";
  15. String familie1 = "colfam1";
  16. String familie2 = "colfam2";
  17. String[] column = {"col-5","col-33","k"};
  18. String[] values = {"wellcome","my house","yes"};
  19. try {
  20. //检查制定的表是否存在
  21. HBaseAdmin admin=new HBaseAdmin(conf);
  22. if(!admin.tableExists(Bytes.toBytes(tableName)))
  23. {
  24. System.err.println("the table "+tableName+" is not exist");
  25. System.exit(1);
  26. }
  27. admin.close();
  28. //创建表连接
  29. HTable table=new HTable(conf,TableName.valueOf(tableName));
  30. //将数据自动提交功能关闭
  31. table.setAutoFlush(false);
  32. //设置数据缓存区域
  33. table.setWriteBufferSize(128*1024);
  34. //然后开始写入数据
  35. int i = 0;
  36. while(i <100000){
  37. Put put=new Put(Bytes.toBytes("row"+i));
  38. put.add(Bytes.toBytes(familie1),Bytes.toBytes(column[0]),Bytes.toBytes(values[0]));
  39. //put.add(Bytes.toBytes(familie2),Bytes.toBytes(column[1]),Bytes.toBytes(values[1]));
  40. table.put(put); i++;
  41. System.out.println(i);
  42. //刷新缓存区
  43. }
  44. table.flushCommits();
  45. //关闭表连接
  46. table.close();
  47. } catch (Exception e) {
  48. // TODO: handle exception
  49. e.printStackTrace();
  50. }
  51. System.out.println("success");
  52. }
  53. }


在我的虚拟机集群中测试证明只需要几秒就可以插入十万行数据,这比单独的put语句运行十万次快多了,另外缓冲区的大小设定也会效率。

这里我整理了一套大数据的学习视频免费分享给大家,从入门到实战都有,大家可以加微信:Lxiao_28获取,还可以入微信群交流!(备注领取资料,真实有效)。 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值