package hbaseapi; import com.google.inject.internal.util.$AsynchronousComputationException; import com.sun.tools.internal.xjc.reader.xmlschema.BindYellow; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.*; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.util.Bytes; import sun.rmi.transport.tcp.TCPConnection; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class HbaseTest { static Configuration conf; static Connection connection = null; static HBaseAdmin admin = null; static { try { conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum","bigdata166"); conf.set("hbase.zookeeper.property.clientport","2181"); connection = ConnectionFactory.createConnection(conf); admin = (HBaseAdmin) connection.getAdmin(); } catch (IOException e) { e.printStackTrace(); } } /** * 判断表是否存在 * @param tableName * @return * @throws IOException */ public static boolean isTableExist(String tableName) throws IOException { return admin.tableExists(tableName); } /** * 列族建议小于3个 * @param tableName * @param columnFamily * @throws Exception */ public static void createTable(String tableName,String... columnFamily)throws Exception{ if (isTableExist(tableName)) { System.out.println("表已经存在"); }else{ //表描述器 HTableDescriptor desc = new HTableDescriptor(TableName.valueOf(tableName)); for (String cf : columnFamily) { HColumnDescriptor hcd = new HColumnDescriptor(cf); desc.addFamily(hcd); } admin.createTable(desc); System.out.println("表创建成功"+tableName); } } public static void droptable(String tableName) throws Exception{ if (isTableExist(tableName)){ admin.disableTable(tableName); admin.deleteTable(tableName); System.out.println("表已删除"); }else{ System.out.println("表不存在"); } } public static void addRowData(String tableName,String rowKey,String columnFamily,String column,String value) throws IOException { if (isTableExist(tableName)){ // HTable hTable = new HTable(conf, tableName); Table hTable = connection.getTable(TableName.valueOf(tableName)); // 新API,老API代码量多的时候可能出现线程不安全 // 往put中放入数据 Put put = new Put(Bytes.toBytes(rowKey)); put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column),Bytes.toBytes(value));//第一种方法 // put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column),Bytes.toBytes(value)); //第二种方法 hTable.put(put); hTable.close(); System.out.println("数据插入成功");}else{ System.out.println("表不存在"); } } public static void deleteMultiRow(String tableName,String... rows) throws IOException { // HTable hTable = new HTable(conf, tableName); Table hTable = connection.getTable(TableName.valueOf(tableName)); // 新API,老API代码量多的时候可能出现线程不安全 List<Delete> deleteList = new ArrayList<>(); // 用于打包删除 for (String row : rows) { Delete delete = new Delete(Bytes.toBytes(row)); deleteList.add(delete); System.out.println("删除行成功"); } hTable.delete(deleteList); hTable.close(); } public static void getAllRows(String tableName) throws IOException { // HTable hTable = new HTable(conf, tableName); Table hTable = connection.getTable(TableName.valueOf(tableName)); // 新API,老API代码量多的时候可能出现线程不安全 Scan scan = new Scan(); ResultScanner resultScanner= hTable.getScanner(scan); for (Result result : resultScanner) { Cell[] cells = result.rawCells(); for (Cell cell : cells) { System.out.println("RK:"+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))); } } } /////////////////////////////////////////////////////////////////////////////////////////////////// /** * 获得某一行数据 * * @param tableName * @param rowKey * @throws IOException */ public static void getRow(String tableName, String rowKey) throws IOException { Table table = connection.getTable(TableName.valueOf(tableName)); Get get = new Get(Bytes.toBytes(rowKey)); 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()); } } /** * 获得某一个value的值 * * @param tableName * @param rowKey * @throws IOException */ public static void getRowQualifier(String tableName, String rowKey, String family, String qualifier) throws IOException { Table table = connection.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))); System.out.println("时间戳:" + cell.getTimestamp()); } } /** * 初始化命名空间 * * @param namespace 命名空间的名字 * @throws Exception */ public static void initNameSpace(String namespace) throws Exception { //命名空间描述器 NamespaceDescriptor nd = NamespaceDescriptor .create(namespace) .addConfiguration("AUTHOR", "andy") .build(); //通过admin对象来创建命名空间 admin.createNamespace(nd); System.out.println("已初始化命名空间"); //关闭两个对象 close(admin, connection); } /** * 关闭admin对象和connection对象 * * @param admin 关闭admin对象 * @param connection 关闭connection对象 * @throws IOException IO异常 */ private static void close(Admin admin, Connection connection) throws IOException { if (admin != null) { admin.close(); } if (connection != null) { connection.close(); } } public static void main(String[] args) throws Exception { // boolean flage = isTableExist("student"); // System.out.println(flage); // createTable("ShallTable2","cf1","cf2","cf3"); // droptable("Shalltable2"); addRowData("student","1007","cf1","xinAPIideacolumn2","这是来自idea的数据"); //插入不存在的列族名,会报错 // addRowData("student","1006","cf2","ideacolumn","这是来自idea的数据"); // deleteMultiRow("student","1006"); getAllRows("student"); } }