HBase工具类的定义
这里面使用了ThreadLocal保证线程安全,关于ThreadLocal的详解,参见连接:
https://blog.csdn.net/lufeng20/article/details/24314381
package com.nice.bigdata.util;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
public class HBaseUtil {
//ThreadLocal:每个线程单独一个实例,保证线程安全
private static ThreadLocal<Connection> connHolder = new ThreadLocal<Connection>();
private HBaseUtil(){}
// public static Connection conn = null;
/**
* 获取Hbase连接对象
* @return
* @throws Exception
*/
public static void makeBaseConnection()throws Exception{
//connHolder就是线程的缓存
//将该线程中的缓存取出来
Connection conn = connHolder.get();
if (conn == null){
//缓存空间没数据,则创建
Configuration conf = HBaseConfiguration.create();
conn = ConnectionFactory.createConnection(conf);
connHolder.set(conn);
}
}
public static void insertData(String tableName, String rowKey, String columnFamily,
String columnm, String value) throws IOException {
Connection conn = connHolder.get();
Table table = conn.getTable(TableName.valueOf(tableName));
Put put = new Put(Bytes.toBytes(rowKey));
put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(columnm),
Bytes.toBytes(value));
table.put(put);
table.close();
}
public static void close() throws IOException {
Connection conn = connHolder.get();
if (conn != null){
conn.close();
//丢弃该线程的存储空间,也删除了该线程的缓存对象
connHolder.remove();
}
}
}