zoukankan      html  css  js  c++  java
  • Hbase的API操作

    1.创建maven工程导入依赖

    	<dependencies>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>3.8.1</version>
    			<scope>test</scope>
    		</dependency>
    		<!-- Apache HBase Client -->
    		<dependency>
    			<groupId>org.apache.hbase</groupId>
    			<artifactId>hbase-client</artifactId>
    			<version>1.3.1</version>
    		</dependency>
    		<dependency>
    			<groupId>cglib</groupId>
    			<artifactId>cglib</artifactId>
    			<version>3.2.5</version>
    		</dependency>
    		<dependency>
    			<groupId>log4j</groupId>
    			<artifactId>log4j</artifactId>
    			<version>1.2.17</version>
    		</dependency>
    	</dependencies>
    

    2.使用cglib动态代理实现在调用方法的前后自动开启关闭连接,下面是目标类。

    import java.io.IOException;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.Cell;
    import org.apache.hadoop.hbase.CellUtil;
    import org.apache.hadoop.hbase.HBaseConfiguration;
    import org.apache.hadoop.hbase.HColumnDescriptor;
    import org.apache.hadoop.hbase.HTableDescriptor;
    import org.apache.hadoop.hbase.TableName;
    import org.apache.hadoop.hbase.client.ConnectionFactory;
    import org.apache.hadoop.hbase.client.Delete;
    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.client.Table;
    import org.apache.hadoop.hbase.filter.Filter;
    import org.apache.hadoop.hbase.filter.RegexStringComparator;
    import org.apache.hadoop.hbase.filter.RowFilter;
    import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
    import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
    import org.apache.hadoop.hbase.util.Bytes;
    import org.apache.hadoop.hbase.client.Admin;
    import org.apache.hadoop.hbase.client.Connection;
    
    public class HbaseTarget {
        public static Connection connection;
        public static Admin admin;
        /**
         * 打开连接
         * @throws IOException
         */
        public static void OpenConnection() throws IOException {
            Configuration conf = HBaseConfiguration.create();
            // zookeeper的配置信息
            conf.set("hbase.zookeeper.quorum", "master,slave1,slave2");// zookeeper节点信息
            conf.set("hbase.zookeeper.property.clientPort", "2181");// zookeeper端口
            connection = ConnectionFactory.createConnection(conf);
            admin = connection.getAdmin();
        }
        /**
         * 关闭连接
         * @throws IOException
         */
        public static void closeConnection() throws IOException {
            if (null != admin) {
                admin.close();
                admin=null;
            }
            if (null != connection) {
                connection.close();
                connection=null;
            }
        }
        
        /**
         * 查看已有表
         * @throws IOException
         */
        public void listTables() throws IOException {
            HTableDescriptor hTableDescriptors[] = admin.listTables();
            for (HTableDescriptor hTableDescriptor : hTableDescriptors) {
                System.out.println(hTableDescriptor.getNameAsString());
            }
        }
        /**
         * 通过列查询
         * @param tableName
         * @param rowKey
         * @throws IOException
         */
        public void scanByCell(String tableName,String rowKey) throws IOException {
    
            // 设置过滤器
            SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes("f"), Bytes.toBytes("Date"),
                    CompareOp.EQUAL, Bytes.toBytes(rowKey));
            // 设置全表扫描封装类
            Scan scan = new Scan();
            // 添加过滤器
            scan.setFilter(filter);
            // 扫描
            Table table = connection.getTable(TableName.valueOf(tableName));
            ResultScanner resultScanner = table.getScanner(scan);
            for (Result result : resultScanner) {
                showCell(result);
            }
            table.close();
        }
    
        /**
         * 通过正则--匹配行键
         * @param tableName
         * @param rowKey
         * @throws IOException
         */
        public void scanByRow(String tableName,String rowKey) throws IOException {
    
            RegexStringComparator re = new RegexStringComparator("^" + rowKey + "");
            Filter filter = new RowFilter(CompareOp.EQUAL, re);
            Scan scan = new Scan();
            // 添加过滤器
            scan.setFilter(filter);
            // 扫描
            Table table = connection.getTable(TableName.valueOf(tableName));
            ResultScanner resultScanner = table.getScanner(scan);
            for (Result result : resultScanner) {
                showCell(result);
    
            }
        }
    
    
        /**
         * 插入数据
         * @param tableName
         * @param rowkey
         * @param colFamily
         * @param col
         * @param val
         * @throws IOException
         */
        public void insterRow(String tableName, String rowkey, String colFamily, String col, String val)
                throws IOException {
            Table table = connection.getTable(TableName.valueOf(tableName));
            Put put = new Put(Bytes.toBytes(rowkey));
            put.addColumn(Bytes.toBytes(colFamily), Bytes.toBytes(col), Bytes.toBytes(val));
            table.put(put);
            // 批量插入
            /*
             * List<Put> putList = new ArrayList<Put>(); putList.add(put);
             * table.put(putList);
             */
            table.close();
        }
    
        /**
         * 格式化输出
         * @param result
         */
        public void showCell(Result result) {
            Cell[] cells = result.rawCells();
            for (Cell cell : cells) {
                System.out.println("RowName:" + new String(CellUtil.cloneRow(cell)) + " ");
                System.out.println("Timetamp:" + cell.getTimestamp() + " ");
                System.out.println("column Family:" + new String(CellUtil.cloneFamily(cell)) + " ");
                System.out.println("row Name:" + new String(CellUtil.cloneQualifier(cell)) + " ");
                System.out.println("value:" + new String(CellUtil.cloneValue(cell)) + " ");
            }
        }
        /**
         * 建表
         * @param tableNmae
         * @param cols
         * @throws IOException
         */
        public void createTable(String tableNmae, String[] cols) throws IOException {
    
            TableName tableName = TableName.valueOf(tableNmae);
    
            if (admin.tableExists(tableName)) {
                System.out.println("talbe is exists!");
            } else {
                HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName);
                for (String col : cols) {
                    HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(col);
                    hTableDescriptor.addFamily(hColumnDescriptor);
                }
                admin.createTable(hTableDescriptor);
            }
    
        }
    
        /**
         * 删表
         * @param tableName
         * @throws IOException
         */
        public void deleteTable(String tableName) throws IOException {
            TableName tn = TableName.valueOf(tableName);
            if (admin.tableExists(tn)) {
                admin.disableTable(tn);
                admin.deleteTable(tn);
            }
        }
    
        /**
         * 删除数据
         * @param tableName
         * @param rowkey
         * @param colFamily
         * @param col
         * @throws IOException
         */
        public void deleRow(String tableName, String rowkey, String colFamily, String col) throws IOException {
            Table table = connection.getTable(TableName.valueOf(tableName));
            Delete delete = new Delete(Bytes.toBytes(rowkey));
            // 删除指定列族
            // delete.addFamily(Bytes.toBytes(colFamily));
            // 删除指定列
            delete.addColumn(Bytes.toBytes(colFamily), Bytes.toBytes(col));
            table.delete(delete);
            // 批量删除
            /*
             * List<Delete> deleteList = new ArrayList<Delete>(); deleteList.add(delete);
             * table.delete(deleteList);
             */
            table.close();
        }
    
        protected HbaseTarget() {
            super();
            // TODO Auto-generated constructor stub
        }
    
    }

    3.编写代理类,在main方法中测试

    import java.io.IOException;
    import java.lang.reflect.Method;
    import net.sf.cglib.proxy.Enhancer;
    import net.sf.cglib.proxy.MethodInterceptor;
    import net.sf.cglib.proxy.MethodProxy;
    
    public class HbaseProxy extends HbaseTarget implements MethodInterceptor {
        //维护目标对象
        private HbaseTarget target;
    
        public HbaseProxy() {
             this.target = new HbaseTarget();
        }
        //给目标对象创建一个代理对象
        public HbaseTarget  getProxyInstance(){
            //1.工具类
            Enhancer en = new Enhancer();
            //2.设置父类
            en.setSuperclass(target.getClass());
            //3.设置回调函数
            en.setCallback(this);
            //4.创建子类(代理对象)
            return (HbaseTarget) en.create();
    
        }
        public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
                target.OpenConnection();
                //执行目标对象的方法
                Object returnValue = method.invoke(target, args);
                target.closeConnection();
                return returnValue; 
        }
        public static void main(String[] args) throws IOException {
            HbaseTarget target = new HbaseProxy().getProxyInstance();
            //target.scanByCell("t_user","1001");
            target.listTables();
        }
    
        
    }

    4.测试结果

  • 相关阅读:
    Swift
    Swift
    Swift
    Swift
    Cocos2d Lua 越来越小样本 内存游戏
    Android组件系列----ContentProvider内容提供商【5】
    看你的门-攻击服务器(4)-HTTP参数注入攻击
    图片缩放中心
    正确lua简单的扩展,可以加速相关C++数据。
    epoll()无论涉及wait队列分析
  • 原文地址:https://www.cnblogs.com/ypsy/p/10001561.html
Copyright © 2011-2022 走看看