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
  • 相关阅读:
    我的WCF之旅(1):创建一个简单的WCF程序
    与众不同 windows phone (15) Media(媒体)之后台播放音频
    与众不同 windows phone (14) Media(媒体)之音频播放器, 视频播放器, 与 Windows Phone 的音乐和视频中心集成
    与众不同 windows phone (10) Push Notification(推送通知)之推送 Tile 通知, 推送自定义信息
    与众不同 windows phone (17) Graphic and Animation(画图和动画)
    与众不同 windows phone (5) Chooser(选择器)
    与众不同 windows phone (26) Contacts and Calendar(联系人和日历)
    与众不同 windows phone (7) Local Database(本地数据库)
    与众不同 windows phone (19) Device(设备)之陀螺仪传感器, Motion API
    与众不同 windows phone (16) Media(媒体)之编辑图片, 保存图片到相册, 与图片的上下文菜单“应用程序...”和“共享...”关联, 与 Windows Phone 的图片中心集成
  • 原文地址:https://www.cnblogs.com/chenshaowei/p/12465091.html
Copyright © 2011-2022 走看看