• HBase总结(十二)Java API 与HBase交互实例



    HBase提供了Java Api的訪问接口,掌握这个就跟Java应用使用RDBMS时须要JDBC一样重要


    import java.io.IOException;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.HBaseConfiguration;
    import org.apache.hadoop.hbase.HColumnDescriptor;
    import org.apache.hadoop.hbase.HTableDescriptor;
    import org.apache.hadoop.hbase.KeyValue;
    import org.apache.hadoop.hbase.client.Delete;
    import org.apache.hadoop.hbase.client.Get;
    import org.apache.hadoop.hbase.client.HBaseAdmin;
    import org.apache.hadoop.hbase.client.HTable;
    import org.apache.hadoop.hbase.client.HTablePool;
    import org.apache.hadoop.hbase.client.Put;
    import org.apache.hadoop.hbase.client.Result;
    import org.apache.hadoop.hbase.client.ResultScanner;
    import org.apache.hadoop.hbase.client.Scan;
    import org.apache.hadoop.hbase.util.Bytes;
    
    public class Hbase {
        // 声明静态配置
        static Configuration conf = null;
        static {
            conf = HBaseConfiguration.create();
            conf.set("hbase.zookeeper.quorum", "localhost");
        }
    
        /*
         * 创建表
         * 
         * @tableName 表名
         * 
         * @family 列族列表
         */
        public static void creatTable(String tableName, String[] family)
                throws Exception {
            HBaseAdmin admin = new HBaseAdmin(conf);
            HTableDescriptor desc = new HTableDescriptor(tableName);
            for (int i = 0; i < family.length; i++) {
                desc.addFamily(new HColumnDescriptor(family[i]));
            }
            if (admin.tableExists(tableName)) {
                System.out.println("table Exists!");
                System.exit(0);
            } else {
                admin.createTable(desc);
                System.out.println("create table Success!");
            }
        }
    
        /*
         * 为表加入数据(适合知道有多少列族的固定表)
         * 
         * @rowKey rowKey
         * 
         * @tableName 表名
         * 
         * @column1 第一个列族列表
         * 
         * @value1 第一个列的值的列表
         * 
         * @column2 第二个列族列表
         * 
         * @value2 第二个列的值的列表
         */
        public static void addData(String rowKey, String tableName,
                String[] column1, String[] value1, String[] column2, String[] value2)
                throws IOException {
            Put put = new Put(Bytes.toBytes(rowKey));// 设置rowkey
            HTable table = new HTable(conf, Bytes.toBytes(tableName));// HTabel负责跟记录相关的操作如增删改查等//
                                                                        // 获取表
            HColumnDescriptor[] columnFamilies = table.getTableDescriptor() // 获取全部的列族
                    .getColumnFamilies();
    
            for (int i = 0; i < columnFamilies.length; i++) {
                String familyName = columnFamilies[i].getNameAsString(); // 获取列族名
                if (familyName.equals("article")) { // article列族put数据
                    for (int j = 0; j < column1.length; j++) {
                        put.add(Bytes.toBytes(familyName),
                                Bytes.toBytes(column1[j]), Bytes.toBytes(value1[j]));
                    }
                }
                if (familyName.equals("author")) { // author列族put数据
                    for (int j = 0; j < column2.length; j++) {
                        put.add(Bytes.toBytes(familyName),
                                Bytes.toBytes(column2[j]), Bytes.toBytes(value2[j]));
                    }
                }
            }
            table.put(put);
            System.out.println("add data Success!");
        }
    
        /*
         * 依据rwokey查询
         * 
         * @rowKey rowKey
         * 
         * @tableName 表名
         */
        public static Result getResult(String tableName, String rowKey)
                throws IOException {
            Get get = new Get(Bytes.toBytes(rowKey));
            HTable table = new HTable(conf, Bytes.toBytes(tableName));// 获取表
            Result result = table.get(get);
            for (KeyValue kv : result.list()) {
                System.out.println("family:" + Bytes.toString(kv.getFamily()));
                System.out
                        .println("qualifier:" + Bytes.toString(kv.getQualifier()));
                System.out.println("value:" + Bytes.toString(kv.getValue()));
                System.out.println("Timestamp:" + kv.getTimestamp());
                System.out.println("-------------------------------------------");
            }
            return result;
        }
    
        /*
         * 遍历查询hbase表
         * 
         * @tableName 表名
         */
        public static void getResultScann(String tableName) throws IOException {
            Scan scan = new Scan();
            ResultScanner rs = null;
            HTable table = new HTable(conf, Bytes.toBytes(tableName));
            try {
                rs = table.getScanner(scan);
                for (Result r : rs) {
                    for (KeyValue kv : r.list()) {
                        System.out.println("row:" + Bytes.toString(kv.getRow()));
                        System.out.println("family:"
                                + Bytes.toString(kv.getFamily()));
                        System.out.println("qualifier:"
                                + Bytes.toString(kv.getQualifier()));
                        System.out
                                .println("value:" + Bytes.toString(kv.getValue()));
                        System.out.println("timestamp:" + kv.getTimestamp());
                        System.out
                                .println("-------------------------------------------");
                    }
                }
            } finally {
                rs.close();
            }
        }
    
        /*
         * 遍历查询hbase表
         * 
         * @tableName 表名
         */
        public static void getResultScann(String tableName, String start_rowkey,
                String stop_rowkey) throws IOException {
            Scan scan = new Scan();
            scan.setStartRow(Bytes.toBytes(start_rowkey));
            scan.setStopRow(Bytes.toBytes(stop_rowkey));
            ResultScanner rs = null;
            HTable table = new HTable(conf, Bytes.toBytes(tableName));
            try {
                rs = table.getScanner(scan);
                for (Result r : rs) {
                    for (KeyValue kv : r.list()) {
                        System.out.println("row:" + Bytes.toString(kv.getRow()));
                        System.out.println("family:"
                                + Bytes.toString(kv.getFamily()));
                        System.out.println("qualifier:"
                                + Bytes.toString(kv.getQualifier()));
                        System.out
                                .println("value:" + Bytes.toString(kv.getValue()));
                        System.out.println("timestamp:" + kv.getTimestamp());
                        System.out
                                .println("-------------------------------------------");
                    }
                }
            } finally {
                rs.close();
            }
        }
    
        /*
         * 查询表中的某一列
         * 
         * @tableName 表名
         * 
         * @rowKey rowKey
         */
        public static void getResultByColumn(String tableName, String rowKey,
                String familyName, String columnName) throws IOException {
            HTable table = new HTable(conf, Bytes.toBytes(tableName));
            Get get = new Get(Bytes.toBytes(rowKey));
            get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName)); // 获取指定列族和列修饰符相应的列
            Result result = table.get(get);
            for (KeyValue kv : result.list()) {
                System.out.println("family:" + Bytes.toString(kv.getFamily()));
                System.out
                        .println("qualifier:" + Bytes.toString(kv.getQualifier()));
                System.out.println("value:" + Bytes.toString(kv.getValue()));
                System.out.println("Timestamp:" + kv.getTimestamp());
                System.out.println("-------------------------------------------");
            }
        }
    
        /*
         * 更新表中的某一列
         * 
         * @tableName 表名
         * 
         * @rowKey rowKey
         * 
         * @familyName 列族名
         * 
         * @columnName 列名
         * 
         * @value 更新后的值
         */
        public static void updateTable(String tableName, String rowKey,
                String familyName, String columnName, String value)
                throws IOException {
            HTable table = new HTable(conf, Bytes.toBytes(tableName));
            Put put = new Put(Bytes.toBytes(rowKey));
            put.add(Bytes.toBytes(familyName), Bytes.toBytes(columnName),
                    Bytes.toBytes(value));
            table.put(put);
            System.out.println("update table Success!");
        }
    
        /*
         * 查询某列数据的多个版本号
         * 
         * @tableName 表名
         * 
         * @rowKey rowKey
         * 
         * @familyName 列族名
         * 
         * @columnName 列名
         */
        public static void getResultByVersion(String tableName, String rowKey,
                String familyName, String columnName) throws IOException {
            HTable table = new HTable(conf, Bytes.toBytes(tableName));
            Get get = new Get(Bytes.toBytes(rowKey));
            get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName));
            get.setMaxVersions(5);
            Result result = table.get(get);
            for (KeyValue kv : result.list()) {
                System.out.println("family:" + Bytes.toString(kv.getFamily()));
                System.out
                        .println("qualifier:" + Bytes.toString(kv.getQualifier()));
                System.out.println("value:" + Bytes.toString(kv.getValue()));
                System.out.println("Timestamp:" + kv.getTimestamp());
                System.out.println("-------------------------------------------");
            }
            /*
             * List<?> results = table.get(get).list(); Iterator<?> it =
             * results.iterator(); while (it.hasNext()) {
             * System.out.println(it.next().toString()); }
             */
        }
    
        /*
         * 删除指定的列
         * 
         * @tableName 表名
         * 
         * @rowKey rowKey
         * 
         * @familyName 列族名
         * 
         * @columnName 列名
         */
        public static void deleteColumn(String tableName, String rowKey,
                String falilyName, String columnName) throws IOException {
            HTable table = new HTable(conf, Bytes.toBytes(tableName));
            Delete deleteColumn = new Delete(Bytes.toBytes(rowKey));
            deleteColumn.deleteColumns(Bytes.toBytes(falilyName),
                    Bytes.toBytes(columnName));
            table.delete(deleteColumn);
            System.out.println(falilyName + ":" + columnName + "is deleted!");
        }
    
        /*
         * 删除指定的列
         * 
         * @tableName 表名
         * 
         * @rowKey rowKey
         */
        public static void deleteAllColumn(String tableName, String rowKey)
                throws IOException {
            HTable table = new HTable(conf, Bytes.toBytes(tableName));
            Delete deleteAll = new Delete(Bytes.toBytes(rowKey));
            table.delete(deleteAll);
            System.out.println("all columns are deleted!");
        }
    
        /*
         * 删除表
         * 
         * @tableName 表名
         */
        public static void deleteTable(String tableName) throws IOException {
            HBaseAdmin admin = new HBaseAdmin(conf);
            admin.disableTable(tableName);
            admin.deleteTable(tableName);
            System.out.println(tableName + "is deleted!");
        }
    
        public static void main(String[] args) throws Exception {
    
            // 创建表
            String tableName = "blog2";
            String[] family = { "article", "author" };
            // creatTable(tableName, family);
    
            // 为表加入数据
    
            String[] column1 = { "title", "content", "tag" };
            String[] value1 = {
                    "Head First HBase",
                    "HBase is the Hadoop database. Use it when you need random, realtime read/write access to your Big Data.",
                    "Hadoop,HBase,NoSQL" };
            String[] column2 = { "name", "nickname" };
            String[] value2 = { "nicholas", "lee" };
            addData("rowkey1", "blog2", column1, value1, column2, value2);
            addData("rowkey2", "blog2", column1, value1, column2, value2);
            addData("rowkey3", "blog2", column1, value1, column2, value2);
    
            // 遍历查询
            getResultScann("blog2", "rowkey4", "rowkey5");
            // 依据row key范围遍历查询
            getResultScann("blog2", "rowkey4", "rowkey5");
    
            // 查询
            getResult("blog2", "rowkey1");
    
            // 查询某一列的值
            getResultByColumn("blog2", "rowkey1", "author", "name");
    
            // 更新列
            updateTable("blog2", "rowkey1", "author", "name", "bin");
    
            // 查询某一列的值
            getResultByColumn("blog2", "rowkey1", "author", "name");
    
            // 查询某列的多版本号
            getResultByVersion("blog2", "rowkey1", "author", "name");
    
            // 删除一列
            deleteColumn("blog2", "rowkey1", "author", "nickname");
    
            // 删除全部列
            deleteAllColumn("blog2", "rowkey1");
    
            // 删除表
            deleteTable("blog2");
    
        }
    }


  • 相关阅读:
    108. Convert Sorted Array to Binary Search Tree
    How to check if one path is a child of another path?
    Why there is two completely different version of Reverse for List and IEnumerable?
    在Jenkins中集成Sonarqube
    如何查看sonarqube的版本 how to check the version of sonarqube
    Queue
    BFS广度优先 vs DFS深度优先 for Binary Tree
    Depth-first search and Breadth-first search 深度优先搜索和广度优先搜索
    102. Binary Tree Level Order Traversal 广度优先遍历
    How do I check if a type is a subtype OR the type of an object?
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5264327.html
Copyright © 2020-2023  润新知