大数据(三十二)HBASE【Hbase JavaAPI访问HBase】

来源:互联网 发布:微信淘宝客开源系统 编辑:程序博客网 时间:2024/05/16 13:58

这里介绍使用java api来访问和操作HBase,例如create、delete、select、update等操作。

1.HBase配置

配置HBase使用的zookeeper集群地址和端口。

复制代码
private static Configuration configuration;static {    configuration = HBaseConfiguration.create();    configuration.set("hbase.zookeeper.property.clientPort", "2181");    configuration.set("hbase.zookeeper.quorum", "ZK1,ZK2,ZK3");}
复制代码

2.创建表

复制代码
// 创建表public static boolean create(String tableName, String columnFamily) {    HBaseAdmin admin = null;    try {        admin = new HBaseAdmin(configuration);        if (admin.tableExists(tableName)) {            System.out.println(tableName + " exists!");            return false;        } else {            // 逗号分隔,可以有多个columnFamily            String[] cfArr = columnFamily.split(",");            HColumnDescriptor[] hcDes = new HColumnDescriptor[cfArr.length];            for (int i = 0; i < cfArr.length; i++) {                hcDes[i] = new HColumnDescriptor(cfArr[i]);            }            HTableDescriptor tblDes = new HTableDescriptor(TableName.valueOf(tableName));            for (HColumnDescriptor hc : hcDes) {                tblDes.addFamily(hc);            }            admin.createTable(tblDes);            System.out.println(tableName + " create successfully!");            return true;        }    } catch (IOException e) {        e.printStackTrace();        return false;    }}
复制代码

3.插入数据

指定表名、rowkey、cf、qualifier和value,插入数据到HBase。

复制代码
public static boolean put(String tableName, String rowkey, String columnFamily, String qualifier, String value) {    try {        HTable table = new HTable(configuration, tableName);        Put put = new Put(rowkey.getBytes());        put.add(columnFamily.getBytes(), qualifier.getBytes(), value.getBytes());        table.put(put);        System.out.println("put successfully! " + rowkey + "," + columnFamily + "," + qualifier + "," + value);    } catch (IOException e) {        e.printStackTrace();        return false;    }    return true;}
复制代码

 

4.查询数据

4.1.查询指定rowkey的整条记录,返回Result对象。

复制代码
// 查询public static Result getResult(String tableName, String rowkey) {    System.out.println("get result. table=" + tableName + " rowkey=" + rowkey);    try {        HTable table = new HTable(configuration, tableName);        Get get = new Get(rowkey.getBytes());        return table.get(get);    } catch (IOException e) {        e.printStackTrace();        return null;    }}
复制代码

 

4.2.展现Result内容

复制代码
// Result转换成Map形式,便于输出private static Map<String, Object> result2Map(Result result) {    Map<String, Object> ret = new HashMap<String, Object>();    if (result != null && result.listCells() != null) {        for (Cell cell : result.listCells()) {            String key = Bytes.toString(CellUtil.cloneQualifier(cell));            String value = Bytes.toString(CellUtil.cloneValue(cell));            System.out.println(key + " => " + value);            ret.put(key, value);        }    }    return ret;}
复制代码

 

4.3.指定qualifier查询数据

复制代码
// 查询public static byte[] get(String tableName, String rowkey, String qualifier) {    System.out.println("get result. table=" + tableName + " rowkey=" + rowkey + " qualifier=" + qualifier);    Result result = getResult(tableName, rowkey);    if (result != null && result.listCells() != null) {        for (Cell cell : result.listCells()) {            String key = Bytes.toString(CellUtil.cloneQualifier(cell));            if (key.equals(qualifier)) {                String value = Bytes.toString(CellUtil.cloneValue(cell));                System.out.println(key + " => " + value);                return CellUtil.cloneValue(cell);            }        }    }    return null;}
复制代码

 

5.查看全表数据

如下只要指定表名,就可以通过Scan来查看全表数据。

复制代码
// 查看全表public static List<Map<String, Object>> scan(String tableName) {    System.out.println("scan table " + tableName);    try {        HTable table = new HTable(configuration, tableName);        Scan scan = new Scan();        ResultScanner rs = table.getScanner(scan);        List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();        for (Result r : rs) {            Map<String, Object> m = result2Map(r);            StringBuilder sb = new StringBuilder();            for(String k : m.keySet()) {                sb.append(k).append("=>").append(m.get(k)).append(" ");            }            System.out.println(sb.toString());            resList.add(m);        }        return resList;    } catch (IOException e) {        e.printStackTrace();        return null;    }}
复制代码

 

6.列出HBase中所有表名

复制代码
// 列出所有表public static List<String> list() {    System.out.println("list tables.");    try {        HBaseAdmin admin = new HBaseAdmin(configuration);        TableName[] tableNames = admin.listTableNames();        List<String> tblArr = new ArrayList<String>();        for (int i = 0; i < tableNames.length; i++) {            tblArr.add(tableNames[i].getNameAsString());            System.out.println("Table: " + tableNames[i].getNameAsString());        }        return tblArr;    } catch (IOException e) {        e.printStackTrace();        return null;    }}
复制代码

 

7.删除指定qualifier内容

复制代码
// 指定qualifier删除内容public static boolean deleteQualifier(String tableName, String rowkey, String columnFamily, String qualifier) {    System.out.println("delete qualifier. table=" + tableName            + " rowkey=" + rowkey + " cf=" + columnFamily + " qualifier=" + qualifier);    try {        HBaseAdmin admin = new HBaseAdmin(configuration);        if (admin.tableExists(tableName)) {            HTable table = new HTable(configuration, tableName);            Delete delete = new Delete(rowkey.getBytes());            delete.deleteColumn(columnFamily.getBytes(), qualifier.getBytes());            table.delete(delete);        }        return true;    } catch (IOException e) {        e.printStackTrace();        return false;    }}
复制代码

 

8.删除指定rowkey的记录

复制代码
// 指定rowkey删除记录public static boolean deleteRow(String tableName, String rowkey) {    System.out.println("delete row. table=" + tableName + " rowkey=" + rowkey);    try {        HBaseAdmin admin = new HBaseAdmin(configuration);        if (admin.tableExists(tableName)) {            HTable table = new HTable(configuration, tableName);            Delete delete = new Delete(rowkey.getBytes());            table.delete(delete);        }        System.out.println(tableName + ", " + rowkey + " delete successfully!");        return true;    } catch (IOException e) {        e.printStackTrace();        return false;    }}
复制代码

 

9.删除指定column family

复制代码
// 删除columnfamilypublic static boolean deleteColumnFamily(String tableName, String columnFamily) {    System.out.println("delete column family. table=" + tableName + " cf=" + columnFamily);    try {        HBaseAdmin admin = new HBaseAdmin(configuration);        if (admin.tableExists(tableName)) {            admin.disableTable(tableName);            admin.deleteColumn(tableName, columnFamily);            admin.enableTable(tableName);        }        return true;    } catch (IOException e) {        e.printStackTrace();        return false;    }}
复制代码

 

 

 

10.删除表

删除指定表名。

复制代码
// 删除表public static boolean delete(String tableName) {    System.out.println("delete table " + tableName);    try {        HBaseAdmin admin = new HBaseAdmin(configuration);        if (admin.tableExists(tableName)) {            admin.disableTable(tableName);            admin.deleteTable(tableName);        }        return true;    } catch (IOException e) {        e.printStackTrace();        return false;    }}
复制代码

 

11.一个测试案例

复制代码
public class HBaseTest {public static void main(String[] args) {        HBaseUtils.create("test1", "cf1,cf2,cf3");        HBaseUtils.put("test1", "row1", "cf1", "field1", "value1");        HBaseUtils.put("test1", "row1", "cf1", "field2", "value2");        HBaseUtils.put("test1", "row1", "cf2", "field3", "value3");        HBaseUtils.put("test1", "row2", "cf1", "field4", "value4");        HBaseUtils.list();        HBaseUtils.get("test1", "row1");        HBaseUtils.get("test1", "row2", "cf1");        HBaseUtils.deleteRow("test1", "row2");        HBaseUtils.scan("test1");//        HBaseUtils.delete("test1");        HBaseUtils.list();    }}
原创粉丝点击