工具类HbaseUtil: /** * hbase操纵工具类 */ public class HbaseUtil { //ThreaLocal private static ThreadLocal<Connection> connHolder = new ThreadLocal<Connection>(); private HbaseUtil() { } /** * 获取Hbase连接对对对象 * * @return */ public static void makeConnection() throws IOException { Connection conn = connHolder.get(); if (conn == null) { Configuration conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "hadoop102,hadoop103,hadoop104"); conf.set("hbase.zookeeper.property.clientPort", "2181"); conn = ConnectionFactory.createConnection(conf); connHolder.set(conn); } } /** * 判断表是否存在 * * @param tableName * @return * @throws IOException */ public static boolean isTableExist(String tableName) throws IOException { Connection conn = connHolder.get(); Admin admin = conn.getAdmin(); return admin.tableExists(TableName.valueOf(tableName)); } /** * 创建表 * * @param tableName * @param columnFamily * @throws IOException */ public static void createTable(String tableName, String... columnFamily) throws IOException { Connection conn = connHolder.get(); Admin admin = conn.getAdmin(); //判断表是否存在 if (HbaseUtil.isTableExist(tableName)) { System.out.println("表" + tableName + "已存在"); } else { //创建表属性对象,表名需要转字节 HTableDescriptor descriptor = new HTableDescriptor(TableName.valueOf(tableName)); //创建多个列族 for (String cf : columnFamily) { descriptor.addFamily(new HColumnDescriptor(cf)); } //根据对表的配置,创建表 admin.createTable(descriptor); System.out.println("表" + tableName + "创建成功!"); } } /** * 删除表 * * @param tableName * @throws IOException */ public static void dropTable(String tableName) throws IOException { Connection conn = connHolder.get(); Admin admin = conn.getAdmin(); TableName tb = TableName.valueOf(tableName); if (isTableExist(tableName)) { admin.disableTable(tb); admin.deleteTable(tb); System.out.println("表" + tableName + "删除成功!"); } else { System.out.println("表" + tableName + "不存在!"); } } /** * 插入数据 */ public static void insertData(String tableName, String rowKey, String famliy, String column, 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(famliy), Bytes.toBytes(column), Bytes.toBytes(value)); table.put(put); table.close(); } /** * 批量插入数据 */ public static void insertBatchData(String tableName, ArrayList<HashMap<String, String>> listMap) throws IOException { Connection conn = connHolder.get(); Table table = conn.getTable(TableName.valueOf(tableName)); ArrayList<Put> puts = new ArrayList<Put>(); for (HashMap<String, String> map : listMap) { String rowKey = map.get("rowKey"); String famliy = map.get("famliy"); String column = map.get("column"); String value = map.get("value"); Put put = new Put(Bytes.toBytes(rowKey)); put.addColumn(Bytes.toBytes(famliy), Bytes.toBytes(column), Bytes.toBytes(value)); puts.add(put); if (puts.size() == 3000 || listMap.indexOf(map) == listMap.size() - 1) { table.put(puts); puts.clear(); } } table.close(); } /** * 批量删除数据 * * @param tableName * @param rows * @throws IOException */ public static void deleteMultiRow(String tableName, String... rows) throws IOException { Connection conn = connHolder.get(); Table table = conn.getTable(TableName.valueOf(tableName)); List<Delete> deleteList = new ArrayList<Delete>(); for (String row : rows) { Delete delete = new Delete(Bytes.toBytes(row)); deleteList.add(delete); } table.delete(deleteList); table.close(); } /** * scan表 * * @param tableName * @throws IOException */ public static void scanTable(String tableName) throws IOException { Connection conn = connHolder.get(); Table table = conn.getTable(TableName.valueOf(tableName)); //得到用于扫描region的对象 Scan scan = new Scan(); //使用HTable得到resultcanner实现类的对象 ResultScanner resultScanner = table.getScanner(scan); for (Result result : resultScanner) { Cell[] cells = result.rawCells(); for (Cell cell : cells) { //得到rowkey System.out.println("行键:" + Bytes.toString(CellUtil.cloneRow(cell))); //得到列族 System.out.println("列族" + Bytes.toString(CellUtil.cloneFamily(cell))); System.out.println("列:" + Bytes.toString(CellUtil.cloneQualifier(cell))); System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell))); } } } /** * 获取指定rowKey的数据 * * @param tableName * @param rowKey * @throws IOException */ public static void getRow(String tableName, String rowKey) throws IOException { Connection conn = connHolder.get(); Table table = conn.getTable(TableName.valueOf(tableName)); Get get = new Get(Bytes.toBytes(rowKey)); //get.setMaxVersions();//显示所有字段最新版本 get.setTimeStamp(Long.parseLong("1584799555750"));//显示指定时间戳的版本(显示单个字段或多个字段在这一时间戳的值) Result result = table.get(get); for (Cell cell : result.rawCells()) { System.out.println("行键:" + Bytes.toString(result.getRow())); System.out.println("列族" + Bytes.toString(CellUtil.cloneFamily(cell))); System.out.println("列:" + Bytes.toString(CellUtil.cloneQualifier(cell))); System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell))); System.out.println("时间戳:" + cell.getTimestamp()); } } /** * 获取指定rowKey单个字段的值 * @param tableName * @param rowKey * @param family * @param qualifier * @throws IOException */ public static void getRowQualifier(String tableName, String rowKey, String family, String qualifier) throws IOException { Connection conn = connHolder.get(); Table table = conn.getTable(TableName.valueOf(tableName)); Get get = new Get(Bytes.toBytes(rowKey)); get.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier)); Result result = table.get(get); for (Cell cell : result.rawCells()) { System.out.println("行键:" + Bytes.toString(result.getRow())); System.out.println("列族" + Bytes.toString(CellUtil.cloneFamily(cell))); System.out.println("列:" + Bytes.toString(CellUtil.cloneQualifier(cell))); System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell))); } } /** * 关闭连接 * * @throws IOException */ public static void close() throws IOException { Connection conn = connHolder.get(); if (conn == null) { conn.close(); connHolder.remove(); } } }
测试类:
package com.wjy.bigdata.hbase; import com.wjy.bigdata.hbase.utils.HbaseUtil; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; public class TestHbaseAPI { public static void main(String[] args) throws IOException { //创建连接 HbaseUtil.makeConnection(); //插入数据 //HbaseUtil.insertData("wjy:student","1003","cf","name","haha"); //批量插入 //ArrayList<HashMap<String, String>> maps = new ArrayList<HashMap<String, String>>(); //for(int i=0;i<=100;i++){ // HashMap<String, String> map = new HashMap<String, String>(); // map.put("rowKey","rowKey"+i); // map.put("famliy","cf"); // map.put("column","name"); // map.put("value","stu"+i+1); // maps.add(map); //} //HbaseUtil.insertBatchData("wjy:student",maps); //判断表是否存在 //boolean tableExist = HbaseUtil.isTableExist("wjy:student1"); //System.out.println(tableExist); //创建表 //HbaseUtil.createTable("wjy:student1","cf1","cf2","cf3"); //删除表 //HbaseUtil.dropTable("wjy:student1"); //删除数据 //HbaseUtil.deleteMultiRow("wjy:student","rowKey0","rowKey1","rowKey10"); //查询表scan //HbaseUtil.scanTable("wjy:student"); //查询指定rowKey的数据 //HbaseUtil.getRow("wjy:student","rowKey100"); //查询单个字段的值 HbaseUtil.getRowQualifier("wjy:student","rowKey100","cf","age"); //关闭连接 HbaseUtil.close(); } }