hbase创建预切割-开启多线程实现大批量插入

本文介绍了如何在HBase中通过创建表时进行预切割,以避免数据倾斜问题,并探讨了利用多线程实现大批量数据插入的方法,以提高效率。

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

创建表同时预切割区域 可以防止数据倾斜

------------------

$hbase>create 'ns1:t3', 'f1', SPLITS => ['row3000000', 'row600000']

/**
	 * 添加批量数据
	 */
	public void bigput(int start , int end) throws Exception {
		DecimalFormat df = new DecimalFormat("000000") ;
		//
		Configuration conf = HBaseConfiguration.create();
		Connection conn = ConnectionFactory.createConnection(conf);
		HTable table = (HTable) conn.getTable(TableName.valueOf("ns1:t3"));
		//关闭自动清理缓冲区
		table.setAutoFlushTo(false);
		for (int i = start; i < end; i++) {
			byte[] rowkey = Bytes.toBytes("row" + df.format(i));
			Put put = new Put(rowkey);
			put.setWriteToWAL(false);
			put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("id"), Bytes.toBytes(i));
			put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("name"), Bytes.toBytes("tom" + i));
			put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("age"), Bytes.toBytes(i % 100));
			table.put(put);
			if (i % 2000 == 0) {
				//清理提交
				table.flushCommits();
			}
		}
		//清理提交
		table.flushCommits();
		table.close();
		//System.out.println(System.currentTimeMillis() - start);
	}

	@Test
	public void testBigInsertMulti() throws InterruptedException {
		long start = System.currentTimeMillis() ;
		Thread t1 = new Thread(){
			public void run() {
				try {
					bigput(0, 300000) ;
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		};
		Thread t2 = new Thread(){
			public void run() {
				try {
					bigput(300000, 600000) ;
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		};
		Thread t3 = new Thread(){
			public void run() {
				try {
					bigput(600000, 1000000) ;
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		};

		t1.start();
		t2.start();
		t3.start();

		t1.join();
		t2.join();
		t3.join();

		System.out.println(System.currentTimeMillis() - start);
	}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值