zoukankan      html  css  js  c++  java
  • HBase API(新版本)

    以下API均为HBase API 3.0版本

    API3.0与API2.0对比

    Put、Delete、Scan类的API没有发生太多改变

    HTableDescriptor类被TableDescriptorBuilder替代,HColumnDescriptor被ColumnFamilyDescriptor替代,CellUtil类被淘汰。

    Hbase的import

    参考https://blog.csdn.net/qq_38899342/article/details/97540118。

    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.Cell;
    import org.apache.hadoop.hbase.HBaseConfiguration;
    import org.apache.hadoop.hbase.HTableDescriptor;
    import org.apache.hadoop.hbase.TableName;
    import org.apache.hadoop.hbase.TableNotFoundException;
    import org.apache.hadoop.hbase.client.Admin;
    import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
    import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
    import org.apache.hadoop.hbase.client.Connection;
    import org.apache.hadoop.hbase.client.ConnectionFactory;
    import org.apache.hadoop.hbase.client.Delete;
    import org.apache.hadoop.hbase.client.Get;
    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.Table;
    import org.apache.hadoop.hbase.client.TableDescriptor;
    import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
    import org.apache.hadoop.hbase.client.coprocessor.Batch.Call;
    import org.apache.hadoop.hbase.util.Bytes;
    

    连接HBase

    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;
        //建立连接
        public static void init(){
            configuration  = HBaseConfiguration.create();
            configuration.set("hbase.master", "master:60000");
            configuration.set("hbase.zookeeper.quorum", "master");
            configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");
            try{
                connection = ConnectionFactory.createConnection(configuration);
                admin = connection.getAdmin();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    

    创建表

    public static void createTable(String tableName,String[] fields) throws IOException {
    
            init();
            TableName tablename = TableName.valueOf(tableName);
    
            if(admin.tableExists(tablename)){
                System.out.println("table is exists!");
                admin.disableTable(tablename);
                admin.deleteTable(tablename);//删除原来的表
            }
    
            TableDescriptorBulider tableDescriptor = TableDescriptorBuilder.newBuilder(tablename);
            for(String str : fields){
                tableDescriptor.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(str)).build());
            admin.createTable(tableDescriptor.build());
    

    添加数据Put

    public static void putData(String tableName,String rowKey,String colFamily,String col,String val) throws IOException {
            init();
            //获取表对象
            Table table = connection.getTable(TableName.valueOf(tableName));
            //创建Put对象
            Put put = new Put(Bytes.toBytes(rowKey));
            put.addColumn(Bytes.toBytes(colFamily), Bytes.toBytes(col), Bytes.toBytes(val));
            table.put(put);
            table.close();
            close();
        }
    

    删除操作Delete

    public static void deleteData(String tableName,String rowKey,String colFamily,String col) throws IOException {
            init();
            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);
            table.close();
            close();
        }
    

    全表扫描

    scan可以扫描多条记录。

    public static void scanData(String tableName)throws  IOException{
            init();
            Table table = connection.getTable(TableName.valueOf(tableName));
            Scan scan = new Scan();
            ResultScanner scanner = table.getScanner(scan);//获取行的遍历器
            for (Result result:scanner){
                printRecoder(result);
            }
            close();
        }
    

    Cell输出

    通过Result.rawCells()可以得到Cell,一个RowKey有多个单元格,一个单元格一个Cell。

    public  static void printRecoder(Result result)throws IOException{
            for(Cell cell:result.rawCells()){
                System.out.print("行健: "+new String(Bytes.toString(cell.getRowArray(),cell.getRowOffset(), cell.getRowLength())));
                System.out.print("列簇: "+new String( Bytes.toString(cell.getFamilyArray(),cell.getFamilyOffset(), cell.getFamilyLength()) ));
                System.out.print(" 列: "+new String(Bytes.toString(cell.getQualifierArray(),cell.getQualifierOffset(), cell.getQualifierLength())));
                System.out.print(" 值: "+new String(Bytes.toString(cell.getValueArray(),cell.getValueOffset(), cell.getValueLength())));
                System.out.println("时间戳: "+cell.getTimestamp());
                /*
                CellUtil在HBase2.0被弃用,在HBase3.0被移除,因此它的cloneRow,cloneFamily等都被淘汰
                System.out.print("行健: "+new String(CellUtil.cloneRow(cell)));
                System.out.print("列簇: "+new String(CellUtil.cloneFamily(cell)));
                System.out.print(" 列: "+new String(CellUtil.cloneQualifier(cell)));
                System.out.print(" 值: "+new String(CellUtil.cloneValue(cell)));
                System.out.println("时间戳: "+cell.getTimestamp());
                */
            }
        }
    

    指定列族的信息

    get获取一个单元格的多个版本信息

    public static void getData(String tableName)throws  IOException{
            init();
            Table table = connection.getTable(TableName.valueOf(tableName));
            //创建一个Get对象
            Get get = new Get(Bytes.toBytes(rowKey));
            //获取数据的操作
            Result result = table.get(get);
            Cell[] cells = result.rawCells();
            for (Cell cell:cells){
                print(cell);
            }
            close();
        }
    

    Admin接口

    Admin接口用于管理HBase数据库的表信息,包括创建删除表,列出表等。

    返回值 方法 介绍
    void createTable(TableDescriptor tabledescriptor) 创建表
    void deleteTable(TableName tableName) 删除表
    void disableTable(TableName tableName) 使表无效
    boolean tableExists(TableName tableName) 检查表是否存在
    TableDescriptor listTableDescriptors() 列出所有表

    TableDescriptorBuilder接口

    该接口用于构建TableDescriptorBuilder类,主要方法如下:

    返回值 方法 介绍
    TableDescriptor build() 构建TableDescriptor
    TableDescriptorBuilder newBuilder(byte[] name) 构建TableDescriptorBuilder
    TableDescriptorBuilder setColumnFamily(ColumnFamilyDescriptor family) 设置某个列族
    TableDescriptorBuilder removeColumnFamily(byte[] name) 删除某个列族

    ColumnFamilyDescriptor接口

    该接口用于构建ColumnFamilyDescriptor,其主要方法如下:

    返回值 方法 介绍
    ColumnFamilyDescriptor build() 构建ColumnFamilyDescriptor
    ColumnFamilyDescriptorBuilder newBuilder(byte[] name) 构建ColumnFamilyDescriptorBuilder
  • 相关阅读:
    Path Sum II
    Convert Sorted Array to Binary Search Tree
    Construct Binary Tree from Inorder and Postorder Traversal
    Construct Binary Tree from Preorder and Inorder Traversal
    Maximum Depth of Binary Tree
    Binary Tree Zigzag Level Order Traversal
    Binary Tree Level Order Traversal
    Same Tree
    Validate Binary Search Tree
    Binary Tree Inorder Traversal
  • 原文地址:https://www.cnblogs.com/chenshaowei/p/12465091.html
Copyright © 2011-2022 走看看