Hbase For Java详解大数据

package cn.hwadee.wuyang.hbase.utils; 
 
import java.io.IOException; 
import java.util.Iterator; 
import java.util.List; 
 
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.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 HbaseUtil { 
    static Configuration conf=null; 
    static{ 
        conf = HBaseConfiguration.create(); 
        //conf.set("hbase.rootdir", "hdfs://centos201:9000/hbase");   
        conf.set("hbase.zookeeper.quorum", "centos201"); //必须加这个,不然无法定位 
        //conf.set("hbase.zookeeper.property.clientPort", "2181"); 
    } 
 
    /*   
     * 创建表   
     *    
     * @tableName 表名   
     *    
     * @family 列族列表   
     */   
    public static Boolean creatTable(String tableName, String[] family)   
            throws Exception {   
        @SuppressWarnings({ "resource", "deprecation" }) 
        HBaseAdmin admin = new HBaseAdmin(conf); 
        @SuppressWarnings("deprecation") 
        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!");   
            return false; 
        } else {   
            admin.createTable(desc);   
            System.out.println("create table Success!"); 
            return true; 
        }   
    } 
 
 
    /*   
     * 为表添加数据(适合知道有多少列族的固定表)   
     *    
     * @rowKey rowKey   
     *    
     * @tableName 表名   
     *    
     * @column1 第一个列族列表   
     *    
     * @value1 第一个列的值的列表   
     *    
     * @column2 第二个列族列表   
     *    
     * @value2 第二个列的值的列表   
     */   
    @SuppressWarnings({ "resource", "deprecation" }) 
    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("familytest1")) { // familytest1列族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("familytest2")) { // familytest2列族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 表名   
     */   
    @SuppressWarnings({ "deprecation", "resource" }) 
    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 表名   
     */   
    @SuppressWarnings({ "deprecation", "resource" }) 
    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 表名   
     */   
    @SuppressWarnings({ "resource", "deprecation" }) 
    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   
     */   
    @SuppressWarnings({ "resource", "deprecation" }) 
    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 更新后的值   
     */   
    @SuppressWarnings({ "resource", "deprecation" }) 
    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 列名   
     */   
    @SuppressWarnings({ "resource", "deprecation" }) 
    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 列名   
     */   
    @SuppressWarnings({ "deprecation", "resource" }) 
    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   
     */   
    @SuppressWarnings({ "resource", "deprecation" }) 
    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 表名   
     */   
    @SuppressWarnings({ "resource", "deprecation" }) 
    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!");   
    }   
 
} 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/bigdata/9073.html

(0)
上一篇 2021年7月19日 09:11
下一篇 2021年7月19日 09:11

相关推荐

发表回复

登录后才能评论