HBase 数据入库(3)-Put批量入表

本文介绍了如何使用HBase的Java API进行数据写入,特别是通过Table.put()方法进行Put对象或Put集合的批量入库操作。讨论了入库机制,包括单独插入与批量插入时的提交策略,并详细讲解了创建Put对象的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HBase 将数据写入,javaAPI操作

数据写入Hbase这里采用Table.put(putList) 的方式 ,数据的格式为Put类型,put方法传参既可以是一个Put对象也可以是一个List<Put>集合,集合情况下为批量入库

入库机制:类似于关系型数据库,如果是一条一条入库,则region每次都会进行一次提交;批量入库,则在数据量达到一定阈值时提交一次,在Table关闭时还会提交一次,批量入库时也可以类似与关系型数据库那样支持手动提交。

创建Put:

Put put = new Put(Bytes.toBytes(rowkey)); // 创建时需要添加RowKey
put.setDurability(durability.SKIP_WAL); // 不写WAL日志——可以视自己情况定
put.addColumn(Bytes.toBytes(ColumnFamily),Bytes.toBytes(Field), Timestamp, Bytes.toBytes(Data));
// ColumnFamily 列族名 Field 字段名 Timestamp 时间戳精确到毫秒,可以不要,数据里的timestamp为入表的时间戳,设置了就是自己设定的这个时间戳 Data 数据
可以创建多个Put,将其放入一个List<Put>集合中,进行批量入库

创建链接:

Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum",zookeeperHosts);  
conf.set("hbase.zookeeper.property.clientPort", zookeeperPort);  
conf.set("zookeeper.znode.parent","/hbase-unsecure"); // 适用hdp集群  
// 创建Connection
Connection conn = ConnectionFactory.createConnection(conf);  
// 创建 Admin
Admin hbaseAdmin = conn.getAdmin();  
批量入库:

public boolean put(String tablename, List<Put> putList)
{
     Table table = null;
     try
     {
         TableName tName = TableName.valueOf(tablename);
         table = conn.getTable(tName);
         table.put(putList); // 数据量达到某个阈值时提交,不达到不提交
         return true;
     }
     catch(Exception e)
     { 
         e.printStackTrace();
         return false;
     }
     finally
     {
          try
          {
             if(table != null)table.close(); // 提交一次
          }
          catch(Exception e)
          {
              e.printStackTrace();
          }
     }
} 
手动提交式批量入库:

public boolean put(String tablename, List<Put> putList)
{
    BufferedMutator mutator = null;
    TableName tName = TableName.valueOf(tablename);
    BufferedMutatorParams params = new BufferedMutatorParams(tName);
    params.writeBufferSize(5*1024*1024); // 可以自己设定阈值 5M 达到5M则提交一次
    try
    {
         mutator = conn.getBufferedMutator(params);
         mutator.mutate(putList); // 数据量达到5M时会自动提交一次
         mutator,flush(); // 手动提交一次
    }
    catch(Exception e)
    {
        e.printStackTrace();
        return false;
    }
    finally
    {
        try
        {
            if(mutator != null)mutator.close();  // 提交一次
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}
手动提交,增大数据阈值,能减少提交次数,提高入库效率

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值