Java操作Hbase

    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");  

        }  
    }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章