HBASE(三)

来源:互联网 发布:美国必买护肤品知乎 编辑:程序博客网 时间:2024/04/29 23:28

今天看了一个人的博客 返现自己对HBASE了解还是太out了

下面补充一些概念 和新 API

**1.**NameSpace:相当于数据库 以前一直好奇 为什么HBASE 只有表 现在明白了 还有表空间 就相当于数据库 对应hadoop目录下的一个文件

//创建表空间 create_namespace '名字'//删除表空间   表空间中必须是空的drop_namespace '名字'

新的API 获取 连接的方式也不同

//我手打的  粘贴有错自己改://创建confConfiguration conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum","hadoop01:2181,hadoop02:2181,hadoop03:2181");//获取连接 Connection conn = ConnectionFactory.createConnection(conf);这个conn 就能获取admin  Admin admin = conn.getAdmin();admin 可以根据表名获得表     创建表空间   等等 就和旧API一样了conn 也能获的表  获得admin

创建表空间:

  /**     * 创建命名空间     * @throws Exception     */    @Test    public void createNameSpace() throws Exception{        Admin admin = conn.getAdmin();        NamespaceDescriptor namespace = NamespaceDescriptor.create("NAMESPACE").build();        admin.createNamespace(namespace);        admin.close();    }

2.创建表的新API 采用TableName

  /**     * 创建表     */    @Test    public void createTable() throws Exception{        Admin admin = conn.getAdmin();        TableName tableName = TableName.valueOf("NAMESPACE","TABLE1");        HTableDescriptor table = new HTableDescriptor(tableName);        HColumnDescriptor colfam1 = new HColumnDescriptor("colfam1");        HColumnDescriptor colfam2 = new HColumnDescriptor("colfam2");        table.addFamily(colfam1);        table.addFamily(colfam2);        admin.createTable(table);        admin.close();    }

命令行的形式:

 create 'NAMESPACE:TABLE2','colfam1','colfam2'

3.查看数据库信息

命令行是 listapi:  @Test    public void list() throws Exception{        Admin admin = conn.getAdmin();        //获取所有的命名空间        NamespaceDescriptor[] namespaceDescriptors = admin.listNamespaceDescriptors();        for (NamespaceDescriptor namespaceDescriptor : namespaceDescriptors) {            System.out.println(namespaceDescriptor.getName());        }    }     System.out.println("------------------------");//获取 给定命名空间下的表        TableName[] tableNames = admin.listTableNamesByNamespace("NAMESPACE");        for (TableName tableName : tableNames) {            System.out.println(tableName.getNameAsString());        }   System.out.println("------------------------");   //利用正则获得表        Pattern pattern = Pattern.compile("NAMESPACE:.*");        HTableDescriptor[] hTableDescriptors = admin.listTables(pattern);        for (HTableDescriptor hTableDescriptor : hTableDescriptors) {            System.out.println(hTableDescriptor);        }

4.获取集群状态

   ClusterStatus status = admin.getClusterStatus();

5. 14个过滤器
5.1 RowFilter

  /**     * 行键过滤 RowFilter     */    @Test    public void RowFilter() throws Exception {        //建立与user表的连接        Table user = conn.getTable(TableName.valueOf("user"));//        CompareFilter.CompareOp 包含小于  等于 大于  <=  >=        // 1.BinaryComparator  当前的值        RowFilter rowFilter1 = new RowFilter(CompareFilter.CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes("813782218261011172")));//2.正则匹配RegexStringComparator    RowFilter rowFilter2 = new RowFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator("^.*1$"));//3.包含子串   RowFilter rowFilter3 = new RowFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator("3782"));        Scan scan = new Scan();        scan.addColumn(Bytes.toBytes("info"),Bytes.toBytes("age"));        scan.setFilter(rowFilter1);        ResultScanner scanner = user.getScanner(scan);        for (Result result : scanner) {            byte[] value = result.getValue(Bytes.toBytes("info"), Bytes.toBytes("age"));            System.out.println(new String(value));        }    }

5.2 FamilyFilter 列族过滤器

  FamilyFilter kk = new FamilyFilter(CompareFilter.CompareOp.GREATER, new BinaryComparator(Bytes.toBytes("kk")));

5.3 DependentColumnFilter 参考列过滤器
以这一列为参考 在同列族中查找跟参考列时间戳一样的列

@Test    public void depentCol() throws Exception{        Table user = conn.getTable(TableName.valueOf("user"));        Scan scan = new Scan();        DependentColumnFilter filter = new DependentColumnFilter(Bytes.toBytes("info"), Bytes.toBytes("phone"), true, CompareFilter.CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes("13213921424")));        scan.setFilter(filter);        ResultScanner scanner = user.getScanner(scan);        for (Result result : scanner) {            System.out.println(result);        }    }

5.4 PrefixFilter 前缀过滤器 根据行键的前缀进行过滤

 /**     * PrefixFilter 前缀过滤器  根据行键的前缀进行过滤     */    @Test    public void prefix() throws Exception{        Table user = conn.getTable(TableName.valueOf("user"));        Scan scan = new Scan();        PrefixFilter prefixFilter = new PrefixFilter(Bytes.toBytes("2243"));        scan.setFilter(prefixFilter);        ResultScanner scanner = user.getScanner(scan);        for (Result result : scanner) {            System.out.println(result);        }    }

5.5 分页过滤器

 /**     * 分页过滤器 PageFilter     */    @Test    public void pageFilter() throws IOException {        Table user = conn.getTable(TableName.valueOf("user"));        Scan scan = new Scan();        PageFilter pageFilter = new PageFilter(2);        scan.setFilter(pageFilter);        ResultScanner scanner = user.getScanner(scan);        for (Result result : scanner) {            System.out.println(result);        }    }

5.6 KeyOnlyFilter 行键过滤器

//只返回行键  值都为空   KeyOnlyFilter keyOnlyFilter = new KeyOnlyFilter();

5.7 FirstKeyOnlyFilter 首次行键过滤器 只返回第一列

FirstKeyOnlyFilter firstKeyOnlyFilter = new FirstKeyOnlyFilter();

5.8 InclusiveStopFilter 包含结束的过滤器

    InclusiveStopFilter inclusiveStopFilter = new InclusiveStopFilter(Bytes.toBytes("510824118261011172"));

5.9 ColumnCountGetFilter 列计数过滤器
给定列数
从行第一列开始扫描 如果这一行 列数小于给定列数 继续扫描 否则程序结束

   ColumnCountGetFilter columnCountGetFilter = new ColumnCountGetFilter(1);

5.10 ColumnPrefixFilter 列前缀过虑器

Filter cpf = new ColumnPrefixFilter(Bytes.toBytes("qual1")); // OK 筛选出前缀匹配的列  

5.11 MultipleColumnPrefixFilter 多个列前缀过滤器

Filter filter = new MultipleColumnPrefixFilter(new byte[][] {Bytes.toBytes("a"),Bytes.toBytes("h")});

5.12 组合的filter

 List<Filter> list = new ArrayList<Filter>();        FilterList f1 = new FilterList(FilterList.Operator.MUST_PASS_ALL,list);

还有很多 具体碰到了再查