设为首页 加入收藏

TOP

如何在hbase中快速插入10万条数据
2019-02-22 13:44:05 】 浏览:105
Tags:何在 hbase 快速 插入 10万条数据

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

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

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

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

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;

public class AddTest {
	static Configuration conf = null;  
    static {  
        conf = HBaseConfiguration.create();  
         
    }  
	public static void main(String args[]){
		String tableName = "testtable1";
		String familie1 = "colfam1";
		String familie2 = "colfam2";
		String[] column = {"col-5","col-33","k"};
		String[] values = {"wellcome","my house","yes"};
		try {  
            //检查制定的表是否存在  
        	
            HBaseAdmin admin=new HBaseAdmin(conf);  
            if(!admin.tableExists(Bytes.toBytes(tableName)))  
            {  
                System.err.println("the table "+tableName+" is not exist");  
                System.exit(1);  
            }  
            admin.close();
            //创建表连接  
            HTable table=new HTable(conf,TableName.valueOf(tableName));  
            //将数据自动提交功能关闭  
            table.setAutoFlush(false);  
            //设置数据缓存区域  
            table.setWriteBufferSize(128*1024);   
            //然后开始写入数据
            int i = 0;
            while(i <100000){
                Put put=new Put(Bytes.toBytes("row"+i));  
                put.add(Bytes.toBytes(familie1),Bytes.toBytes(column[0]),Bytes.toBytes(values[0])); 
                //put.add(Bytes.toBytes(familie2),Bytes.toBytes(column[1]),Bytes.toBytes(values[1]));
                table.put(put);  i++;
                System.out.println(i);
            //刷新缓存区 
            } 
            table.flushCommits();
            //关闭表连接  
            table.close();  
        } catch (Exception e) {  
            // TODO: handle exception  
            e.printStackTrace();  
        }
        System.out.println("success");
    }
	
}

在我的虚拟机集群中测试证明只需要几秒就可以插入十万行数据,这比单独的put语句运行十万次快多了,另外缓冲区的大小设定也会效率。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇HBase的Region机制 下一篇HBase表增加snappy压缩

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目