• 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
  • 相关阅读:
    离线安装SharePoint 2010必备组件下载链接
    skrollr——兼容性超强的视差滚动js插件
    Heroku实战入门(二)简单实战
    xp中安装sybase15.7遇到的三个问题
    思科三层交换机开启路由模式的方法
    Heroku实战入门(一)初识heroku
    Heroku实战入门(三)常用命令
    Splinter——开源的轻量级前端测试工具
    Request.ServerVariables 转
    Page.MaintainScrollPositionOnPostBack 属性
  • 原文地址:https://www.cnblogs.com/chenshaowei/p/12465091.html
Copyright © 2020-2023  润新知