zoukankan      html  css  js  c++  java
  • Hbase2.0的Java API

    以表的操作和单条记录的增删改查为基础。

    批量操作,需要进行进一步封装。

    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.*;
    import org.apache.hadoop.hbase.client.*;
    import org.apache.hadoop.hbase.filter.BinaryComparator;
    import org.apache.hadoop.hbase.filter.RowFilter;
    import org.apache.hadoop.hbase.security.User;
    import org.apache.hadoop.hbase.util.Bytes;
    import org.apache.hadoop.security.UserGroupInformation;
    
    import java.io.IOException;
    
    
    public class HBaseUtils {
        public static void main(String[] args) {
    
        }
        // 判断表是否存在
        public boolean tableExists(String tableName) throws IOException {
            Configuration conf = HBaseConfiguration.create();
            conf.set("hbase.zookeeper.quorum","ambari-1,ambari-2");
            conf.set("hbase.zookeeper.property.clientPort","2181");
            Connection connection = ConnectionFactory.createConnection(conf);
            Admin admin = connection.getAdmin();
            boolean test = admin.tableExists(TableName.valueOf("test"));
            admin.close();
            connection.close();
            System.out.println(test);
            return test;
        }
        //创建表,,表明,,和做个列族
        public void  creatTable(String tableName, String... cfs) throws IOException {
            Configuration conf = HBaseConfiguration.create();
            conf.set("hbase.zookeeper.quorum","ambari-1,ambari-2");
            conf.set("hbase.zookeeper.property.clientPort","2181");
            //指定用户名为hbase的用户去访问hbase服务
            UserGroupInformation userGroupInformation = UserGroupInformation.createRemoteUser("hbase");
            Connection connection = ConnectionFactory.createConnection(conf, User.create(userGroupInformation));
            // 不指定用户
            // Connection connection = ConnectionFactory.createConnection(conf);
            Admin admin = connection.getAdmin();
            admin.disableTable(TableName.valueOf(tableName));
            admin.deleteTable(TableName.valueOf(tableName));
            admin.close();
            connection.close();
        }
        //删除表
        public void deleteTable(String tableName) throws IOException {
            if(this.tableExists(tableName)){
                return;
            }
            Configuration conf = HBaseConfiguration.create();
            conf.set("hbase.zookeeper.quorum","ambari-1,ambari-2");
            conf.set("hbase.zookeeper.property.clientPort","2181");
            //指定用户名为hbase的用户去访问hbase服务
            UserGroupInformation userGroupInformation = UserGroupInformation.createRemoteUser("hbase");
            Connection connection = ConnectionFactory.createConnection(conf, User.create(userGroupInformation));
            // 不指定用户
            // Connection connection = ConnectionFactory.createConnection(conf);
            Admin admin = connection.getAdmin();
            admin.disableTable(TableName.valueOf(tableName));
            admin.deleteTable(TableName.valueOf(tableName));
            admin.close();
            connection.close();
        }
        //增加数据,, 增加一行数据,修改同此操作
        public void putData(String tableName,String rowKey, String cf, String columName, String value) throws IOException {
            Configuration conf = HBaseConfiguration.create();
            conf.set("hbase.zookeeper.quorum","ambari-1,ambari-2");
            conf.set("hbase.zookeeper.property.clientPort","2181");
            //指定用户名为hbase的用户去访问hbase服务
            UserGroupInformation userGroupInformation = UserGroupInformation.createRemoteUser("hbase");
            Connection connection = ConnectionFactory.createConnection(conf,User.create(userGroupInformation));
    
            Table table=connection.getTable(TableName.valueOf(tableName));
            Put put=new Put(rowKey.getBytes());
            put.addColumn(cf.getBytes(), Bytes.toBytes(columName),value.getBytes());
            table.put(put);
    
            connection.close();
        }
        // 删除单条记录
        public void deleteRow(String tableName,String rowkey,String cf1, String column) throws IOException{
            Configuration conf = HBaseConfiguration.create();
            conf.set("hbase.zookeeper.quorum","ambari-1,ambari-2");
            conf.set("hbase.zookeeper.property.clientPort","2181");
            //指定用户名为hbase的用户去访问hbase服务
            UserGroupInformation userGroupInformation = UserGroupInformation.createRemoteUser("hbase");
            Connection connection = ConnectionFactory.createConnection(conf,User.create(userGroupInformation));
    
            Table table=connection.getTable(TableName.valueOf(tableName));
            Delete delete = new Delete(rowkey.getBytes());
            // 可以作循环
            // 删除最近一个版本,上个版本依然有效存在仍会进行查询
            delete.addColumn(cf1.getBytes(),column.getBytes());
            // 删除所有版本
            delete.addColumns(cf1.getBytes(),column.getBytes());
            table.delete(delete);
            connection.close();
        }
        // 全表扫描
        public void scanTable(String tableName) throws IOException {
            Configuration conf = HBaseConfiguration.create();
            conf.set("hbase.zookeeper.quorum","ambari-1,ambari-2");
            conf.set("hbase.zookeeper.property.clientPort","2181");
            //指定用户名为hbase的用户去访问hbase服务
            UserGroupInformation userGroupInformation = UserGroupInformation.createRemoteUser("hbase");
            Connection connection = ConnectionFactory.createConnection(conf,User.create(userGroupInformation));
    
            Table table=connection.getTable(TableName.valueOf(tableName));
            Scan scan = new Scan();
            ResultScanner scanner = table.getScanner(scan);
            for (Result result : scanner) {
                String rowKey = new String(result.getRow());
                System.out.println(rowKey);
                Cell[] cells = result.rawCells();
                for (Cell cell : cells) {
                    // 方式一
                    System.out.println("RowKey: "+Bytes.toString(CellUtil.cloneRow(cell))
                            +",CF: "+Bytes.toString(CellUtil.cloneFamily(cell))
                            +",CN: "+Bytes.toString(CellUtil.cloneQualifier(cell))
                            +",Value: "+Bytes.toString(CellUtil.cloneValue(cell)));
                    //方式二
                    String family=Bytes.toString(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength());
                    String qualifier=Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());
                    String row=Bytes.toString(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());
                    String value1=Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
                    System.out.println(row+","+family+","+qualifier+","+value1+"
    ");
                }
            }
            connection.close();
        }
        // 全表扫描,指定列族和列名
        public void scanTableWithCF(String tableName, String cf1, String column) throws IOException {
            Configuration conf = HBaseConfiguration.create();
            conf.set("hbase.zookeeper.quorum","ambari-1,ambari-2");
            conf.set("hbase.zookeeper.property.clientPort","2181");
            //指定用户名为hbase的用户去访问hbase服务
            UserGroupInformation userGroupInformation = UserGroupInformation.createRemoteUser("hbase");
            Connection connection = ConnectionFactory.createConnection(conf,User.create(userGroupInformation));
    
            Table table=connection.getTable(TableName.valueOf(tableName));
            Scan scan = new Scan();
            scan.addColumn(cf1.getBytes(),column.getBytes());
            scan.setFilter(new RowFilter(CompareOperator.EQUAL,new BinaryComparator("aa".getBytes())));
            ResultScanner scanner = table.getScanner(scan);
    
    //        ResultScanner scanner = table.getScanner(cf1.getBytes(),column.getBytes());
            for (Result result : scanner) {
                String rowKey = new String(result.getRow());
                System.out.println(rowKey);
                Cell[] cells = result.rawCells();
                for (Cell cell : cells) {
                    // 方式一
                    System.out.println("RowKey: "+Bytes.toString(CellUtil.cloneRow(cell))
                            +",CF: "+Bytes.toString(CellUtil.cloneFamily(cell))
                            +",CN: "+Bytes.toString(CellUtil.cloneQualifier(cell))
                            +",Value: "+Bytes.toString(CellUtil.cloneValue(cell)));
                    //方式二
                    String family=Bytes.toString(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength());
                    String qualifier=Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());
                    String row=Bytes.toString(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());
                    String value1=Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
                    System.out.println(row+","+family+","+qualifier+","+value1+"
    ");
                }
            }
            connection.close();
        }
        // get方式
        public void getData(String tableName,String rowKey, String cf, String column) throws IOException {
            Configuration conf = HBaseConfiguration.create();
            conf.set("hbase.zookeeper.quorum","ambari-1,ambari-2");
            conf.set("hbase.zookeeper.property.clientPort","2181");
            //指定用户名为hbase的用户去访问hbase服务
            UserGroupInformation userGroupInformation = UserGroupInformation.createRemoteUser("hbase");
            Connection connection = ConnectionFactory.createConnection(conf,User.create(userGroupInformation));
    
            Table table=connection.getTable(TableName.valueOf(tableName));
            Get get = new Get(rowKey.getBytes());
            get.addColumn(cf.getBytes(),column.getBytes());
            Result result = table.get(get);
            Cell[] cells = result.rawCells();
            for (Cell cell : cells) {
                System.out.println("RowKey: "+Bytes.toString(CellUtil.cloneRow(cell))
                        +",CF: "+Bytes.toString(CellUtil.cloneFamily(cell))
                        +",CN: "+Bytes.toString(CellUtil.cloneQualifier(cell))
                        +",Value: "+Bytes.toString(CellUtil.cloneValue(cell)));
    
    
                //方式二
                String family=Bytes.toString(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength());
                String qualifier=Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());
                String row=Bytes.toString(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());
                String value1=Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
                System.out.println(row+","+family+","+qualifier+","+value1+"
    ");
            }
    
            connection.close();
        }
    
        //filter 参考:https://www.cnblogs.com/xiguage119/p/10605721.html
    }
    View Code
    有朝一日同风起,扶摇直上九万里
  • 相关阅读:
    iOS开发之Masonry框架源码解析
    iOS开发针对对Masonry下的FPS优化讨论
    React-native Android环境搭建
    Android中ListView使用总结
    Android开发布局方式
    轮播图
    大文件断点下载
    基于第三方库FMDB的数据库的二次封装
    md5加密
    AssignToObject文件(字典转模型、字典数组转模型数组)
  • 原文地址:https://www.cnblogs.com/wind-man/p/14530649.html
Copyright © 2011-2022 走看看