HBase插入数据编程

0、概述

(1)数据通过put对象进行发送,每put一次发送一次,发送时以mutator形式,

(2)每次发送都将对象封装成linkedList,再进行一次flush,即一次rpc通信

1、每次put一条数据

public void putData1() throws Exception {
    //初始化HBase 的conf
    Configuration conf = HBaseConfiguration.create();
    //通过连接工厂创建连接
    Connection conn = ConnectionFactory.createConnection(conf);
    //通过连接获得表对象
    Table table = conn.getTable(TableName.valueOf("test:t1"));
    //设置数据格式
    DecimalFormat df = new DecimalFormat("000");
    for(int i = 1; i < 100; i++){
        //将数据格式化
        String str = df.format(i);
        //插入数据
        Put put = new Put(Bytes.toBytes("row" + str));
        put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("name"), Bytes.toBytes("ma" + str));
        put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("id"), Bytes.toBytes(str));
        table.put(put);
    }
    //关闭资源
    table.close();
    conn.close();
}

2、优化,先将多个put对象封装成一个集合,然后发送一个put对象的集合

public void putData2() throws Exception {
    //初始化HBase 的conf
    Configuration conf = HBaseConfiguration.create();
    //通过连接工厂创建连接
    Connection conn = ConnectionFactory.createConnection(conf);
    //通过连接获得表对象
    Table table = conn.getTable(TableName.valueOf("test:t1"));
    //设置数据格式
    DecimalFormat df = new DecimalFormat("000");
    //创建put对象的集合
    List list = new LinkedList();
    for(int i = 1; i < 100; i++){
        //将数据格式化
        String str = df.format(i);
        //创建put对象
        Put put = new Put(Bytes.toBytes("row" + str));
        put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("name"), Bytes.toBytes("ma" + str));
        put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("id"), Bytes.toBytes(str));
        //将put对象添加到集合中
        list.add(put);
    }
    //将put对象的集合一次性发送,插入数据
    table.put(list);
    //关闭资源
    table.close();
    conn.close();
}

3、优化,关闭自动刷写(即自动提交),底层也是封装成一个LinkList,最后手动刷写一次即可

public void putData3() throws Exception {
    //初始化HBase 的conf
    Configuration conf = HBaseConfiguration.create();
    //通过连接工厂创建连接
    Connection conn = ConnectionFactory.createConnection(conf);
    //通过连接获得表对象
    //强转为HTable类型,才可以设置自动刷写的属性
    HTable htable = (HTable) conn.getTable(TableName.valueOf("test:t1"));
    //关闭自动刷写
    htable.setAutoFlush(false,false);
    //设置数据格式
    DecimalFormat df = new DecimalFormat("000");
    for(int i = 1; i < 100; i++){
        //将数据格式化
        String str = df.format(i);
        //插入数据
        Put put = new Put(Bytes.toBytes("row" + str));
        put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("name"), Bytes.toBytes("ma" + str));
        put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("id"), Bytes.toBytes(str));
        htable.put(put);
    }
    //手动提交,插入数据
    htable.flushCommits();
    //关闭资源
    htable.close();
    conn.close();
}

 

你可能感兴趣的:(HBase插入数据编程)