精华内容
下载资源
问答
  • hbase API

    2020-08-02 23:43:19
    HBase API 4.1 环境准备 新建项目后在pom.xml中添加依赖: ...4.2 HBaseAPI 4.2.1 获取Configuration对象 public static Configuration conf; static{ //使用HBaseConfiguration的单例方法实例化 conf = HBaseConfi

    HBase API
    4.1 环境准备
    新建项目后在pom.xml中添加依赖:

    org.apache.hbase
    hbase-server
    1.3.1

    org.apache.hbase hbase-client 1.3.1 4.2 HBaseAPI 4.2.1 获取Configuration对象 public static Configuration conf; static{ //使用HBaseConfiguration的单例方法实例化 conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "192.168.9.102"); //conf.set("hbase.zookeeper.property.clientPort", "2181"); } 4.2.2 判断表是否存在 public static boolean isTableExist(String tableName) throws MasterNotRunningException, ZooKeeperConnectionException, IOException{ //在HBase中管理、访问表需要先创建HBaseAdmin对象 //Connection connection = ConnectionFactory.createConnection(conf); //HBaseAdmin admin = (HBaseAdmin) connection.getAdmin(); HBaseAdmin admin = new HBaseAdmin(conf); return admin.tableExists(tableName); } 4.2.3 创建表 public static void createTable(String tableName, String... columnFamily) throws MasterNotRunningException, ZooKeeperConnectionException, IOException{ HBaseAdmin admin = new HBaseAdmin(conf); //判断表是否存在 if(isTableExist(tableName)){ System.out.println("表" + tableName + "已存在"); //System.exit(0); }else{ //创建表属性对象,表名需要转字节 HTableDescriptor descriptor = new HTableDescriptor(TableName.valueOf(tableName)); //创建多个列族 for(String cf : columnFamily){ descriptor.addFamily(new HColumnDescriptor(cf)); } //根据对表的配置,创建表 admin.createTable(descriptor); System.out.println("表" + tableName + "创建成功!"); } } 4.2.4 删除表 public static void dropTable(String tableName) throws MasterNotRunningException, ZooKeeperConnectionException, IOException{ HBaseAdmin admin = new HBaseAdmin(conf); if(isTableExist(tableName)){ admin.disableTable(tableName); admin.deleteTable(tableName); System.out.println("表" + tableName + "删除成功!"); }else{ System.out.println("表" + tableName + "不存在!"); } } 4.2.5 向表中插入数据 public static void addRowData(String tableName, String rowKey, String columnFamily, String column, String value) throws IOException{ //创建HTable对象 HTable hTable = new HTable(conf, tableName); //向表中插入数据 Put put = new Put(Bytes.toBytes(rowKey)); //向Put对象中组装数据 put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value)); hTable.put(put); hTable.close(); System.out.println("插入数据成功"); } 4.2.6 删除多行数据 public static void deleteMultiRow(String tableName, String... rows) throws IOException{ HTable hTable = new HTable(conf, tableName); List deleteList = new ArrayList(); for(String row : rows){ Delete delete = new Delete(Bytes.toBytes(row)); deleteList.add(delete); } hTable.delete(deleteList); hTable.close(); } 4.2.7 获取所有数据 public static void getAllRows(String tableName) throws IOException{ HTable hTable = new HTable(conf, tableName); //得到用于扫描region的对象 Scan scan = new Scan(); //使用HTable得到resultcanner实现类的对象 ResultScanner resultScanner = hTable.getScanner(scan); for(Result result : resultScanner){ Cell[] cells = result.rawCells(); for(Cell cell : cells){ //得到rowkey System.out.println("行键:" + Bytes.toString(CellUtil.cloneRow(cell))); //得到列族 System.out.println("列族" + Bytes.toString(CellUtil.cloneFamily(cell))); System.out.println("列:" + Bytes.toString(CellUtil.cloneQualifier(cell))); System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell))); } } } 4.2.8 获取某一行数据 public static void getRow(String tableName, String rowKey) throws IOException{ HTable table = new HTable(conf, tableName); Get get = new Get(Bytes.toBytes(rowKey)); //get.setMaxVersions();显示所有版本 //get.setTimeStamp();显示指定时间戳的版本 Result result = table.get(get); for(Cell cell : result.rawCells()){ System.out.println("行键:" + Bytes.toString(result.getRow())); System.out.println("列族" + Bytes.toString(CellUtil.cloneFamily(cell))); System.out.println("列:" + Bytes.toString(CellUtil.cloneQualifier(cell))); System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell))); System.out.println("时间戳:" + cell.getTimestamp()); } } 4.2.9 获取某一行指定“列族:列”的数据 public static void getRowQualifier(String tableName, String rowKey, String family, String qualifier) throws IOException{ HTable table = new HTable(conf, tableName); Get get = new Get(Bytes.toBytes(rowKey)); get.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier)); Result result = table.get(get); for(Cell cell : result.rawCells()){ System.out.println("行键:" + Bytes.toString(result.getRow())); System.out.println("列族" + Bytes.toString(CellUtil.cloneFamily(cell))); System.out.println("列:" + Bytes.toString(CellUtil.cloneQualifier(cell))); System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell))); } }
    展开全文
  • HbaseApi

    万次阅读 2020-01-07 09:06:09
    import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.; import org.apache.hadoop.hbase.client.; import org.apache.hadoop.hbase.util....import org.junit.jupiter.api.Test; impo...

    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.;
    import org.apache.hadoop.hbase.client.
    ;
    import org.apache.hadoop.hbase.util.Bytes;
    import org.junit.jupiter.api.Test;

    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;

    public class demo02 {

    /**
     * 创建表
     * @throws Exception
     */
    @Test
    public void createTable() throws Exception{
        //获取配置
        Configuration configuration = HBaseConfiguration.create();
        configuration.set("hbase.zookeeper.quorum","node01,node02,node03");
        Connection connection = ConnectionFactory.createConnection(configuration);
        Admin admin = connection.getAdmin();
        //创建表描述器
        HTableDescriptor a = new HTableDescriptor(TableName.valueOf("b"));
        //添加组丶列
        a.addFamily(new HColumnDescriptor("f1"));
        a.addFamily(new HColumnDescriptor("f2"));
        //创建表
        boolean a1 = admin.tableExists(TableName.valueOf("b"));
        if (!a1){
    
            admin.createTable(a);
        }
        admin.close();
    }
    
    
    /**
     * 删除表
     */
    @Test
    public void dropTable() throws Exception{
        //获取配置信息
        Configuration configuration = HBaseConfiguration.create();
        configuration.set("hbase.zookeeper.quorum","node01,node02,node03");
        Connection connection = ConnectionFactory.createConnection(configuration);
        Admin admin = connection.getAdmin();
        //判断表是否存在,存在就删除
        boolean a = admin.tableExists(TableName.valueOf("a"));
        if (a){
            admin.disableTable(TableName.valueOf("a"));
            admin.deleteTable(TableName.valueOf("a"));
        }else {
            System.out.println("表不存在");
            return;
        }
        admin.close();
    }
    
    
    /**
     * 创建命名空间
     */
    @Test
    public void createNameSpace() throws Exception{
        Configuration configuration = HBaseConfiguration.create();
        configuration.set("hbase.zookeeper.quorum","node01,node02,node03");
        Connection connection = ConnectionFactory.createConnection(configuration);
        Admin admin = connection.getAdmin();
        NamespaceDescriptor build = NamespaceDescriptor.create("0418").build();
        try {
            admin.createNamespace(build);
        }catch (NamespaceExistException e){
            System.out.println("命名空间已经存在");
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        admin.close();
    }
    
    
    /**
     * 添加数据
     */
    
    @Test
    public void addDatas() throws Exception{
        //获取配置
        Configuration configuration = HBaseConfiguration.create();
        configuration.set("hbase.zookeeper.quorum","node01,node02,node03");
        Connection connection = ConnectionFactory.createConnection(configuration);
    
        //获取表
        Table table = connection.getTable(TableName.valueOf("b"));
        //添加数据
        Put put = new Put("0001".getBytes());
    

    // put.addColumn(“f1”.getBytes(),“1”.getBytes(),“lisi”.getBytes());
    // put.addColumn(“f1”.getBytes(),“2”.getBytes(),“wangwu”.getBytes());
    // put.addColumn(“f1”.getBytes(),“3”.getBytes(),“zhangsan”.getBytes());
    // put.addColumn(“f1”.getBytes(),“4”.getBytes(),“zhaoliu”.getBytes());
    // put.addColumn(“f2”.getBytes(),“5”.getBytes(),“1”.getBytes());
    // put.addColumn(“f2”.getBytes(),“6”.getBytes(),“2”.getBytes());
    // put.addColumn(“f2”.getBytes(),“7”.getBytes(),“3”.getBytes());

        put.addColumn("f1".getBytes(),"name".getBytes(),Bytes.toBytes("zhqangsan"));
        put.addColumn("f1".getBytes(),"address".getBytes(),Bytes.toBytes("lisi"));
        put.addColumn("f1".getBytes(),"sex".getBytes(),Bytes.toBytes("wangwu"));
        put.addColumn("f1".getBytes(),"wdw".getBytes(),Bytes.toBytes("zhaoliu"));
        put.addColumn("f2".getBytes(),"sex".getBytes(),Bytes.toBytes("1"));
    
        List<Put>list = new ArrayList<>();
        list.add(put);
    
        //添加
        table.put(list);
        //关闭资源
        table.close();
    }
    
    /**
     * 获取数据
     */
    
    @Test
    public void getData() throws IOException {
        Configuration configuration = HBaseConfiguration.create();
        configuration.set("hbase.zookeeper.quorum","node01,node02,node03");
        Connection connection = ConnectionFactory.createConnection(configuration);
        Table a = connection.getTable(TableName.valueOf("b"));
    
        Get get = new Get("0001".getBytes());
        Result result = a.get(get);
        Cell[] cells = result.rawCells();
        for (Cell cell : cells) {
    
            System.out.println("111111     "+Bytes.toString(CellUtil.cloneFamily(cell)));
            System.out.println("222222     "+Bytes.toString(CellUtil.cloneQualifier(cell)));
            System.out.println("333333     "+Bytes.toString(CellUtil.cloneValue(cell)));
        }
        a.close();
    }
    

    }

    过滤器

    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.HBaseConfiguration;
    import org.apache.hadoop.hbase.TableName;
    import org.apache.hadoop.hbase.client.;
    import org.apache.hadoop.hbase.filter.
    ;
    import org.apache.hadoop.hbase.util.Bytes;
    import org.junit.jupiter.api.Test;

    import java.io.IOException;

    public class demo01 {

    /**
     * hbase行键过滤器RowFilter
     * 通过RowFilter过滤比rowKey  0003小的所有值出来
     */
    @Test
    public  void rowKeyFilter() throws IOException {
        //获取连接
        Configuration configuration = HBaseConfiguration.create();
        configuration.set("hbase.zookeeper.quorum","node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(configuration);
        Table myuser = connection.getTable(TableName.valueOf("myuser"));
    
        Scan scan = new Scan();
        RowFilter rowFilter = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes("0003")));
    
        scan.setFilter(rowFilter);
        ResultScanner resultScanner = myuser.getScanner(scan);
        for (Result result : resultScanner) {
            //获取rowkey
            System.out.println(Bytes.toString(result.getRow()));
    
            //指定列族以及列打印列当中的数据出来
            System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));
            System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "age".getBytes())));
            System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
        }
        myuser.close();
    
    }
    
    
    
    /**
     * hbase列族过滤器FamilyFilter
     * 查询比f2列族小的所有的列族内的数据
     */
    @Test
    public  void familyFilter() throws IOException {
        //获取连接
        Configuration configuration = HBaseConfiguration.create();
        configuration.set("hbase.zookeeper.quorum","node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(configuration);
        Table myuser = connection.getTable(TableName.valueOf("myuser"));
        Scan scan = new Scan();
        FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.LESS, new SubstringComparator("f2"));
        scan.setFilter(familyFilter);
        ResultScanner resultScanner = myuser.getScanner(scan);
        for (Result result : resultScanner) {
            //获取rowkey
            System.out.println(Bytes.toString(result.getRow()));
            //指定列族以及列打印列当中的数据出来
            System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));
            System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "age".getBytes())));
            System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
        }
        myuser.close();
    }
    
    
    /**
     * hbase列过滤器
     * 只查询name的值
     */
    @Test
    public  void qualifierFilter() throws IOException {
        //获取连接
        Configuration configuration = HBaseConfiguration.create();
        configuration.set("hbase.zookeeper.quorum","node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(configuration);
        Table myuser = connection.getTable(TableName.valueOf("myuser"));
        Scan scan = new Scan();
        QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator("id"));
        scan.setFilter(qualifierFilter);
        ResultScanner resultScanner = myuser.getScanner(scan);
        for (Result result : resultScanner) {
            //获取rowkey
            System.out.println(Bytes.toString(result.getRow()));
            //指定列族以及列打印列当中的数据出来
               System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));
    

    // System.out.println(Bytes.toString(result.getValue(“f1”.getBytes(), “name”.getBytes())));
    }
    myuser.close();
    }

    /**
     * hbase值过滤器
     * 查询包含8的列值
     */
    @Test
    public  void valueFilter() throws IOException {
        //获取连接
        Configuration configuration = HBaseConfiguration.create();
        configuration.set("hbase.zookeeper.quorum","node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(configuration);
        Table myuser = connection.getTable(TableName.valueOf("myuser"));
        Scan scan = new Scan();
        ValueFilter valueFilter = new ValueFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator("8"));
    
        scan.setFilter(valueFilter);
        ResultScanner resultScanner = myuser.getScanner(scan);
        for (Result result : resultScanner) {
            //获取rowkey
            System.out.println(Bytes.toString(result.getRow()));
            //指定列族以及列打印列当中的数据出来
            //    System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));
            System.out.println(Bytes.toString(result.getValue("f2".getBytes(), "phone".getBytes())));
        }
        myuser.close();
    }
    
    
    /**
     * 单列值过滤器,返回满足条件的整行数据
     */
    @Test
    public void singleColumnFilter() throws IOException {
        //获取连接
        Configuration configuration = HBaseConfiguration.create();
        configuration.set("hbase.zookeeper.quorum","node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(configuration);
        Table myuser = connection.getTable(TableName.valueOf("myuser"));
        Scan scan = new Scan();
        SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("f1".getBytes(), "name".getBytes(), CompareFilter.CompareOp.EQUAL, "刘备".getBytes());
        scan.setFilter(singleColumnValueFilter);
        ResultScanner resultScanner = myuser.getScanner(scan);
        for (Result result : resultScanner) {
            //获取rowkey
            System.out.println(Bytes.toString(result.getRow()));
            //指定列族以及列打印列当中的数据出来
            System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));
            System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
            System.out.println(Bytes.toString(result.getValue("f2".getBytes(), "phone".getBytes())));
        }
        myuser.close();
    }
    
    
    
    /**
     * 行键前缀过滤器
     * 查询以00开头的所有前缀的rowkey
     */
    @Test
    public void preFilter() throws IOException {
    
        //获取连接
        Configuration configuration = HBaseConfiguration.create();
        configuration.set("hbase.zookeeper.quorum","node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(configuration);
        Table myuser = connection.getTable(TableName.valueOf("myuser"));
        Scan scan = new Scan();
        PrefixFilter prefixFilter = new PrefixFilter("00".getBytes());
        scan.setFilter(prefixFilter);
        ResultScanner resultScanner = myuser.getScanner(scan);
        for (Result result : resultScanner) {
            //获取rowkey
            System.out.println(Bytes.toString(result.getRow()));
            //指定列族以及列打印列当中的数据出来
            System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));
            System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
            System.out.println(Bytes.toString(result.getValue("f2".getBytes(), "phone".getBytes())));
        }
        myuser.close();
    
    }
    
    /**
     * 分页过滤器
     * 通过pageFilter实现分页过滤器
     * @throws IOException
     */
    
    @Test
    public void pageFilter2() throws IOException {
        //获取连接
        Configuration configuration = HBaseConfiguration.create();
        configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(configuration);
        Table myuser = connection.getTable(TableName.valueOf("myuser"));
        int pageNum = 3;
        int pageSize = 2;
        Scan scan = new Scan();
        if (pageNum == 1) {
            PageFilter filter = new PageFilter(pageSize);
            scan.setStartRow(Bytes.toBytes(""));
            scan.setFilter(filter);
            scan.setMaxResultSize(pageSize);
            ResultScanner scanner = myuser.getScanner(scan);
            for (Result result : scanner) {
                //获取rowkey
                System.out.println(Bytes.toString(result.getRow()));
                //指定列族以及列打印列当中的数据出来
    

    // System.out.println(Bytes.toInt(result.getValue(“f1”.getBytes(), “id”.getBytes())));
    System.out.println(Bytes.toString(result.getValue(“f1”.getBytes(), “name”.getBytes())));
    //System.out.println(Bytes.toString(result.getValue(“f2”.getBytes(), “phone”.getBytes())));
    }

        }else{
            String startRowKey ="";
            PageFilter filter = new PageFilter((pageNum - 1) * pageSize + 1  );
            scan.setStartRow(startRowKey.getBytes());
            scan.setMaxResultSize((pageNum - 1) * pageSize + 1);
            scan.setFilter(filter);
            ResultScanner scanner = myuser.getScanner(scan);
            for (Result result : scanner) {
                byte[] row = result.getRow();
                startRowKey =  new String(row);
            }
            Scan scan2 = new Scan();
            scan2.setStartRow(startRowKey.getBytes());
            scan2.setMaxResultSize(Long.valueOf(pageSize));
            PageFilter filter2 = new PageFilter(pageSize);
            scan2.setFilter(filter2);
    
            ResultScanner scanner1 = myuser.getScanner(scan2);
            for (Result result : scanner1) {
                byte[] row = result.getRow();
                System.out.println(new String(row));
            }
        }
        myuser.close();
    }
    
    
    /**
     * 多过滤器组合使用
     * 需求:使用SingleColumnValueFilter查询f1列族,name为刘备的数据,并且同时满足rowkey的前缀以00开头的数据(PrefixFilter)
     */
    @Test
    public void manyFilter() throws IOException {
        //获取连接
        Configuration configuration = HBaseConfiguration.create();
        configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(configuration);
        Table myuser = connection.getTable(TableName.valueOf("myuser"));
        Scan scan = new Scan();
        FilterList filterList = new FilterList();
    
        SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("f1".getBytes(), "name".getBytes(), CompareFilter.CompareOp.EQUAL, "刘备".getBytes());
        PrefixFilter prefixFilter = new PrefixFilter("00".getBytes());
        filterList.addFilter(singleColumnValueFilter);
        filterList.addFilter(prefixFilter);
        scan.setFilter(filterList);
        ResultScanner scanner = myuser.getScanner(scan);
        for (Result result : scanner) {
            //获取rowkey
            System.out.println(Bytes.toString(result.getRow()));
            //指定列族以及列打印列当中的数据出来
    

    // System.out.println(Bytes.toInt(result.getValue(“f1”.getBytes(), “id”.getBytes())));
    System.out.println(Bytes.toString(result.getValue(“f1”.getBytes(), “name”.getBytes())));
    //System.out.println(Bytes.toString(result.getValue(“f2”.getBytes(), “phone”.getBytes())));
    }
    myuser.close();

    }
    

    }

    展开全文
  • hbase api

    2015-05-06 17:40:13
    hbase api java调用
    Configuration config = HbaseConfiguration.create();  // 创建一个Hbase的实例  
    HbaseAdmin admin = new HbaseAdmin(config);           // 获取一个Hbase实例的句柄  
    HTableDescriptor htd = new HTableDescriptor("tableName");// 创建一个表名  
    HColumnDescriptor hcd = new HColumnDescriptor("columnCell"); //创建一个列簇  
    hcd.addFamily(htd); //把列簇放到表中  
    admin.createTable(htd);//创建一个表  
    byte [] tableName= htd.getName(); // 把表名转成一个byte 型  
    HTableDescriptor [] tables = admin.listTables(); //获取此Hbase实例句柄下所有的表名  
    //如果此Hbase 下有表,而且,和需要创建的表名一样,创建失败,抛出异常。  
    if(tables.length!=1 && Bytes.equals(tableName,tables[0].getName())){   
      throw new IOException("that table is exits,created faild");  
    }  
    HTable table = new HTable (config.tableName);  // 从Hbase句柄下获取指定的表名  
    byte [] row1 = Bytes.toBytes("row1");   
    Put p1 = new Put(row1); // 创建一个key 为row1 的值  
    byte [] dataBytes = Bytes.toBytes("data"); //表名下创建的列簇  
    //把列名为data:1,值为values1 的值 放到一个key中  
    p1.add(dataBytes,Bytes.toBytes("1"),Bytes.toBytes("values1"));  
    table.put(p1); //把key 放到table 中   
    Get g = new Get(row1);//创建一个键值  
    Result result = table.get(g); //表通过键值 获取一条记录  
    System.out.pringtln("get:"+result);//把记录打印出来  
    Scan scan = new Scan();    // 创建一个扫描指针  
    ResultResult scanner = table.getScanner(scan);//表名通过指定来扫描每一条记录  
    for(Result scannerResult:scanner){  
      System.out.println("scan:"+scannerResult);  
    }  
    scanner.close();// 关闭 扫描 ,释放资源  
    admin.disableTable(tableName);//把表设为不可用  
    admin.deleteTable(tableName);//删除表  
    展开全文
  • HBASE API

    2019-04-26 01:22:22
    NULL 博文链接:https://lakerhu.iteye.com/blog/2369798
  • HbaseAPI

    千次阅读 2017-03-17 22:28:37
    简单讲解HBase的java api

    HbaseAPI

    本文总结一下HBase的API

    本文章参考了http://blog.csdn.net/lifuxiangcaohui/article/details/39997205这篇文章写的比较早,一些功能都没有,但也可以看一看。

    Configuration

    对Hbase进行的配置

    返回值 函数 描述
    void addResource(Path file) 通过给定的路径所指的文件来添加资源
    void clear() 清空所有已设置的属性
    string get(String name) 获取属性名对应的值
    String getBoolean(String name, boolean defaultValue) 获取为boolean类型的属性值,如果其属性值类型部位boolean,则返回默认属性值
    void set(String name, String value) 通过属性名来设置值
    void setBoolean(String name, boolean value) 设置boolean类型的属性值

    HBaseAdmin

    提供了一个接口来管理HBase数据库的表信息。它提供的方法包括:创建表,删除表,列出表项,使表有效或无效,以及添加或删除表列族成员等。

    返回值 函数 描述
    void addColumn(String tableName, HColumnDescriptor column) 向一个已经存在的表添加咧
    checkHBaseAvailable(HBaseConfiguration conf) 静态函数,查看HBase是否处于运行状态
    createTable(HTableDescriptor desc) 创建一个表,同步操作
    deleteTable(byte[] tableName) 删除一个已经存在的表
    enableTable(byte[] tableName) 使表处于有效状态
    disableTable(byte[] tableName) 使表处于无效状态
    HTableDescriptor[] listTables() 列出所有用户控件表项
    void modifyTable(byte[] tableName, HTableDescriptor htd) 修改表的模式,是异步的操作,可能需要花费一定的时间
    boolean tableExists(String tableName) 检查表是否存在

    HTableDescriptor

    包含了表的名字极其对应表的列族

    返回值 函数 描述
    void addFamily(HColumnDescriptor) 添加一个列族
    HColumnDescriptor removeFamily(byte[] column) 移除一个列族
    byte[] getName() 获取表的名字
    byte[] getValue(byte[] key) 获取属性的值
    void setValue(String key, String value) 设置属性的值

    HColumnDescriptor

    维护着关于列族的信息,例如版本号,压缩设置等。它通常在创建表或者为表添加列族的时候使用。列族被创建后不能直接修改,只能通过删除然后重新创建的方式。列族被删除的时候,列族里面的数据也会同时被删除。

    返回值 函数 描述
    byte[] getName() 获取列族的名字
    byte[] getValue(byte[] key) 获取对应的属性的值
    void setValue(String key, String value) 设置对应属性的值

    HTable

    可以用来和HBase表直接通信。此方法对于更新操作来说是非线程安全的。

    返回值 函数 描述
    void checkAdnPut(byte[] row, byte[] family, byte[] qualifier, byte[] value, Put put 自动的检查row/family/qualifier是否与给定的值匹配
    void close() 释放所有的资源或挂起内部缓冲区中的更新
    Boolean exists(Get get) 检查Get实例所指定的值是否存在于HTable的列中
    Result get(Get get) 获取指定行的某些单元格所对应的值
    byte[][] getEndKeys() 获取当前一打开的表每个区域的结束键值
    ResultScanner getScanner(byte[] family) 获取当前给定列族的scanner实例
    HTableDescriptor getTableDescriptor() 获取当前表的HTableDescriptor实例
    byte[] getTableName() 获取表名
    static boolean isTableEnabled(HBaseConfiguration conf, String tableName) 检查表是否有效
    void put(Put put) 向表中添加值

    Put

    用来对单个行执行添加操作

    返回值 函数 描述
    Put add(byte[] family, byte[] qualifier, byte[] value) 将指定的列和对应的值添加到Put实例中
    Put add(byte[] family, byte[] qualifier, long ts, byte[] value) 将指定的列和对应的值及时间戳添加到Put实例中
    byte[] getRow() 获取Put实例的行
    RowLock getRowLock() 获取Put实例的行锁
    long getTimeStamp() 获取Put实例的时间戳
    boolean isEmpty() 检查familyMap是否为空
    Put setTimeStamp(long timeStamp) 设置Put实例的时间戳

    Get

    用来获取单个行的相关信息

    返回值 函数 描述
    Get addColumn(byte[] family, byte[] qualifier) 获取指定列族和列修饰符对应的列
    Get addFamily(byte[] family) 通过指定的列族获取其对应列的所有列
    Get setTimeRange(long minStamp,long maxStamp) 获取指定取件的列的版本号
    Get setFilter(Filter filter) 当执行Get操作时设置服务器端的过滤器

    Result

    存储Get或者Scan操作后获取表的单行值。使用此类提供的方法可以直接获取值或者各种Map结构(key-value对)

    返回值 函数 描述
    boolean containsColumn(byte[] family, byte[] qualifier) 检查指定的列是否存在
    NavigableMap

    ResultScanner

    客户端获取值的接口

    返回值 函数 描述
    void close() 关闭scanner并释放分配给它的资源
    Result next() 获取下一行的值

    下面是我自己写的示例

    public static Configuration configuration;  
    public static Connection connection;  
    public static Admin admin;
    //定义HBase配置,设定ZooKeeper地址,端口号,HBase信息存储地址
    configuration = HBaseConfiguration.create();  configuration.set("hbase.zookeeper.quorum",hbase_zk_conn);            configuration.set("hbase.zookeeper.property.clientPort",zk_port);           configuration.set("zookeeper.znode.parent","/hbase"); 
    //建立连接
    connection = ConnectionFactory.createConnection(configuration);  
    //得到admin
    admin = connection.getAdmin();
    
    //创建命名空间,命名空间可以用来区分用户,在大数据平台设计中我在它的基础上实现了用户隔离
    String namespace="test_un";          admin.createNamespace(NamespaceDescriptor.create(namespace).build());
    
    //创建表
    String tablefullname=namespace+":"+"t_N";
    TableName tName = TableName.valueOf(tablefullname);                                     
    //如果表不存在
    if!(admin.tableExists(tName)){  
        HTableDescriptor hTableDescriptor = new HTableDescriptor(tName);
        //添加列族
        for(String cf:colfamily){                   
          HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(cf);
          hTableDescriptor.addFamily(hColumnDescriptor);
        }
    }
    admin.createTable(hTableDescriptor);
    
    //列出命名空间下的表名
    tableName = admin.listTableNamesByNamespace(namespace);
    tableList = new ArrayList<String>();
    for(TableName t :tableName){   
        String tab=t.getNameAsString(); 
        if(tab.contains(":"))
        tab=tab.split(":")[1];
        tableList.add(tab);
    } 
    
    
    
    //删除表
    TableName tn = TableName.valueOf(tablefullname);  
    if (admin.tableExists(tn)) {  
      //先disable再delete
      admin.disableTable(tn);
      admin.deleteTable(tn);  
    }
    
    //表的列族
    TableName t=TableName.valueOf(tablefullname);   
    HColumnDescriptor [] colfamilies=  admin.getTableDescriptor(t).getColumnFamilies();
    for (HColumnDescriptor cf:colfamilies){
        String f=cf.getNameAsString();
        }   
    
    //插入数据
    Table table;
    String tablefullname=namespace+":"+tableName;
    table = connection.getTable(TableName.valueOf(tablefullname));
    Put put = new Put(Bytes.toBytes(rowkey));  
    put.addColumn(Bytes.toBytes(colfamily), Bytes.toBytes(col), Bytes.toBytes(value));  
    table.put(put);  
    table.close(); 
    
    
     //扫描表
      Table table;
      table = connection.getTable(TableName.valueOf(tablefullname));
      Scan scan = new Scan();
      //起始rowkey
      scan.setStartRow(Bytes.toBytes(start_row));  
      //结束rowkey
      scan.setStopRow(Bytes.toBytes(end_row));
      scan.setCaching(1000);//一次rpc请求1000条
      Filter filter = new PageFilter(1000);//最多返回一千条 
      scan.setFilter(filter);   
      ResultScanner resultScanner = table.getScanner(scan);             
      for(Result r : resultScanner){  
        Cell[] cells = r.rawCells();  
        for(Cell cell:cells){
          data=new hb_result_data();
          rowkey=new String(CellUtil.cloneRow(cell));  
          timestamp=String.valueOf(cell.getTimestamp());  
          colfamily=new String(CellUtil.cloneFamily(cell));  
          col=new String(CellUtil.cloneQualifier(cell));  
          value=new String(CellUtil.cloneValue(cell));
        }  
      } 
      resultScanner.close();
      table.close();       
    
    
    
    
    //获取数据
    table = connection.getTable(TableName.valueOf(tablefullname));
      Get get = new Get(Bytes.toBytes(rowkey));  
      if(col!=null)
        get.addColumn(Bytes.toBytes(colfamily),Bytes.toBytes(col));
      else
        get.addFamily(Bytes.toBytes(colfamily));    
    Result r = table.get(get);  
    Cell[] cells = r.rawCells();  
    for(Cell cell:cells){
      rowkey=new String(CellUtil.cloneRow(cell));                           
      timestamp=String.valueOf(cell.getTimestamp());  
      colfamily=new String(CellUtil.cloneFamily(cell));  
      col=new String(CellUtil.cloneQualifier(cell));  
      value=new String(CellUtil.cloneValue(cell));
    }           
    table.close(); 
    
    
    
    
    //删除数据  
      Table table;
      table = connection.getTable(t);
      Delete delete=new Delete(Bytes.toBytes(rowkey));
      if(col!=null){
        delete.addColumn(Bytes.toBytes(colfamily), Bytes.toBytes(col));
      }
      else{
        delete.addFamily(Bytes.toBytes(colfamily));
      }
      table.delete(delete);         
      table.close();

    一些复杂的查询可以用filter过滤器,比如上面代码的scan操作就是用了PageFilter实现了一个limit的功能。

    每 一个put的操作实际上是RPC的操作,它将客户端的数据传送到服务器然后返回,这只适合小数据量的操作,如果有个应用程序需要每秒存储上千行数据到 HBase表中,这样处理就不太合适了。HBase的API配备了一个客户端的写缓冲区,缓冲区负责收集put操作,然后调用RPC操作一次性将put送 往服务器。默认情况下,客户端缓冲区是禁止的。可以通过自动刷写设置为FALSE来激活缓冲。

    table.setAutoFlush(false);

    这个方法是强制 将数据写到服务器。

    void flushCommits () throws IOException

    用户还可以根据下面的方法来配置客户端写缓冲区的大小。

    void setWritaeBufferSize(long writeBufferSize) throws IOException;

    默认大小是 2MB,这个也是适中的,一般用户插入的数据不大,不过如果你插入的数据大的话,可能要考虑增大这个值。从而允许客户端更高效地一定数量的数据组成一组通 过一次RPC请求来执行。

    在 HBase中,所有的存储文件都被划分成了若干个小存储块,这些小存储块在get或scan操作时会加载到内存中,他们类似于RDBMS中的存储单元页。 这个参数的默认大小是64K。
    通过以上方式设置:

            void setBlocksize(int s);

    (HBase中Hfile的默认大小就是64K跟 HDFS的块是64M没关系)
    HBase顺序地读取一个数据块到内存缓存中,其读取相邻的数据时就可以再内存中读取而不需要从磁盘中再次读取,有效地减少 了磁盘I/O的次数。

     void setBlockCacheEnabled(boolean blockCacheEnable);

    这个参数默认为TRUE,这意味着每次读取的块都会缓存到内存中。但是,如果用户顺序读取某个特定的列族,最好将这个属性设置为 FALSE,从而禁止使用缓存快。上面这样描述的原因:如果我们访问特定的列族,但是我们还是启用了这个功能,这个时候我们的机制会把我们其它不需要的列 族的数据也加载到了内存中,增加了我们的负担,我们使用的条件是,我们获取相邻数据。

    展开全文
  • HBase API

    千次阅读 2015-09-20 12:00:12
    HBase 常用类介绍: JAVA API 和 HBase数据库模型之间的关系 JAVA 类 Hbase 数据模型 HBaseAdmin 数据库(database) HBaseConfiguration HTable 表(table) HTableDescriptor
  • Hbase API

    2016-08-29 21:09:58
    HbaseAdmin HbaseConfiguration org.apache.hadoop.hbase.HBaseConfiguration 用法示例: HBaseConfiguration hconfig = new HBaseConfiguration(); hconfig.set(“hbase.zookeeper.pr
  • hbase api chm

    2016-07-21 13:11:49
    hbase api chm
  • 快速学习-HBaseAPI操作

    2021-01-07 05:01:57
    第6章 HBase API操作 6.1 环境准备 新建项目后在pom.xml中添加依赖: org.apache.hbase ...6.2 HBaseAPI 6.2.1 获取Configuration对象 public static Configuration conf; static{ //使用HBaseConfi
  • HbaseAPI学习

    2020-03-20 20:56:32
    hbaseAPI测试 public class TestHbaseAPI_01 { public static void main(String[] args) { //构建config配置对象 Configuration conf = HBaseConfiguration.create(); try { //获...
  • HBaseAPI要点序1. 入门1.1. 介绍1.2. 快速开始2. Apache HBase (TM)配置2.1. 基础条件2.2. HBase 运行模式: 独立和分布式2.3.?配置文件2.4. 配置示例2.5.?重要配置?3. 升级3.1. 从 0.94.x 升级到 0.96.x3.2. 从 0.92...
  • 通过对HBase API的使用,下面例子举例了常见对HBase的操作,如下所示: package net.linuxidc.www; import org.apache.Hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org....
  • HBase API 操作

    2019-12-05 09:12:55
    HBase API 需要依赖的 pom.xml <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-server</artifactId> <version>1.3.1</version> </dependenc...
  • TestHBase API

    2018-11-28 12:47:22
    TestHBase API package a.b.hbase; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDes...
  • Hbase API 编程

    2019-03-14 19:49:12
    记录常用的一些Hbase API package datacool.hadoop.hbase; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache....
  • HBaseApi.java

    2020-06-19 14:20:25
    HBase-APi操作demo
  • 一、HBaseAPI重要的概念 1.Scan 2.Result 3.Filter的Scan 二、案例分析---HBaseAPI学习 1.需求 2.思路 3.代码 一、HBaseAPI重要的概念 1.Scan HBase中的数据表通过划分成一个个的Region来实现数据的分片,...
  • 大数据技术之HBase API

    2021-03-13 22:54:52
    目录1 环境准备2 HBaseAPI2.1 获取 Configuration 对象2.2 判断表是否存在2.3 创建表2.4 删除表2.5 向表中插入数据2.6 删除多行数据2.7 获取所有数据2.8 获取某一行数据2.9 获取某一行指定“列族:列”的数据3 ...
  • Hbase API使用总结

    2017-10-27 16:54:05
    举个例子: Hbase的java的API接口相对比较简单,举个创建表的例子来看: public class HbaseApiTest {  staticConfiguration conf = null;  static{  conf = HBaseConfiguration.create();  conf.set("hbase
  • hbase中批量加载数据的方式有很多种,最直接方式是调用hbaseAPI用put方法插入数据;另外一种是用MapReduce的方式从hdfs上加载数据,调用TableOutputFormat类在reduce中直接生成put对象写入HBase(这种方式可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,822
精华内容 2,728
关键字:

hbaseapi