大数据开发进阶笔记——HBase的常用原子操作Java代码

    xiaoxiao2025-07-07  8

    HBase的常用原子操作Java代码:

     

    Append:追加,类似于put操作。

    Configurationconf =HBaseConfiguration.create();

    conf.set(“hbase.zookeeper.quorum”,”192.168.1.149”);

    conf.set(“hbase.zookeeper.property.clientport”,”2181”);

    HConnection conn=HConnectionManager.createConnection(conf);

    HTableInterfacetable = conn.getTable(“创建的表名”);

    Append append = newAppend(Bytes.toBytes(“r1”));

    append.add(Bytes.toBytes(“d”), Bytes.toBytes(“a”),Bytes.toBytes(“abcd”));

    table.append(append);

    table.close();

    conn.close();

     

    checkAndPut:检查是否存在参数描述的记录,如果存在,则不写入数据,如果不存在就写入数据。注意:是对某一个row_key的原子操作,不能跨row_key。

    Configurationconf =HBaseConfiguration.create();

    conf.set(“hbase.zookeeper.quorum”,”192.168.1.149”);

    conf.set(“hbase.zookeeper.property.clientport”,”2181”);

    HConnection conn=HConnectionManager.createConnection(conf);

    HTableInterfacetable = conn.getTable(“创建的表名”);

    Put put = new Put(Bytes.toBytes(“r1”));

    put.add(Bytes.toBytes(“d”), Bytes.toBytes(“b”),Bytes.toBytes(“bbbb”));

    //不会写入,因为之前追加过有记录

    table.checkAndPut(Bytes.toBytes(“r1”), Bytes.toBytes(“d”),Bytes.toBytes(“a”), Bytes.toBytes(“abcd”),put);// 参数:row_key,family,column,row_value

    //会写入

    table.checkAndPut(Bytes.toBytes(“r1”), Bytes.toBytes(“d”),Bytes.toBytes(“a”), Bytes.toBytes(“ad”),put);

    table.close();

    conn.close();

     

     

    checkAndDelete:

    Configurationconf =HBaseConfiguration.create();

    conf.set(“hbase.zookeeper.quorum”,”192.168.1.149”);

    conf.set(“hbase.zookeeper.property.clientport”,”2181”);

    HConnection conn=HConnectionManager.createConnection(conf);

    HTableInterfacetable = conn.getTable(“创建的表名”);

    Delete delete = newDelete(Bytes.toBytes(“r1”));

    delete.deleteColumns(Bytes.toBytes(“d”), Bytes.toBytes(“a”));

    //不会被删

    table.checkAndDelete(Bytes.toBytes(“r1”), Bytes.toBytes(“d”),Bytes.toBytes(“a”), Bytes.toBytes(“b”),delete);//参数:是否有row_key,是否有column,是否有row_value,删除对象

    //会被删

    table.checkAndDelete(Bytes.toBytes(“r1”), Bytes.toBytes(“d”),Bytes.toBytes(“a”), Bytes.toBytes(“bbbb”),delete);

    table.close();

    conn.close();

     

    计数器

    Configurationconf = HBaseConfiguration.create();

    conf.set(“hbase.zookeeper.quorum”,”192.168.1.149”);

    conf.set(“hbase.zookeeper.property.clientport”,”2181”);

    HConnection conn=HConnectionManager.createConnection(conf);

    HTableInterfacetable = conn.getTable(“创建的表名”);

    lone result = table.incrementColumnValue(Bytes.toBytes(“r1”),Bytes.toBytes(“d”), Bytes.toBytes(“b”), 10);//10是追加计数的值

    lone result =table.incrementColumnValue(Bytes.toBytes(“r1”), Bytes.toBytes(“d”), Bytes.toBytes(“b”),0);// 0是追加计数的值

    lone result = table.incrementColumnValue(Bytes.toBytes(“r1”),Bytes.toBytes(“d”), Bytes.toBytes(“b”), -5);

    lone result =table.incrementColumnValue(Bytes.toBytes(“r1”), Bytes.toBytes(“d”), Bytes.toBytes(“b”),+5);

    System.out.print(result);

    table.close();

    conn.close();

     

    Hbase重要组件——过滤器

    Hbase过滤器:Filter:

    在Hbase服务端将客户需要过滤掉数据过滤掉,减少传输到客户端的数据量,减轻负担。

    //对row_key进行过滤

    Configuration conf =HBaseConfiguration.create();

    conf.set(“hbase.zookeeper.quorum”,”192.168.1.149”);

    conf.set(“hbase.zookeeper.property.clientport”,”2181”);

    HConnection conn= HConnectionManager.createConnection(conf);

    HTableInterfacetable = conn.getTable(“创建的表名”);

    Scan scan = new Scan();

    Scan.setCacheBlocks(flase);//产生的数据不会放到Blockcache 里

    //Filter filter = newRowFilter(CompareFilter.CompareOp.EQUAL,new BinaryComparator(Bytes.toBytes(“abc”)));//过滤出row_key

    //Filter filter = newRowFilter(CompareFilter.CompareOp.EQUAL,newBinaryPrefixComparator(Bytes.toBytes( “ab”)));//过滤出row_key前缀包含ab的

    Filter filter = newRowFilter(CompareFilter.CompareOp.EQUAL,new SubstringComparator ( “b”));//row_key包含b的被过滤出来

    scan.setFilter(filter);

    ResultScannerscanner = table.getScanner(scan);

    for(Result result: scanner){

    List<Cell> cell = result.listCells();

    for(Cell cell:cells){

       String rowkey = newString(CellUnit.cloneRow(cell));

       String family = newString(CellUnit.cloneFamily(cell));

       String column = newString(CellUnit.clonecolumn(cell));

       String value = newString(CellUnit.clonecolumn(cell));

       System.out.println(rowkey+””+family+” ”+column+” ”+value);

     

    }

    }

    scanner.close();

    table.close();

    conn.close();

     

    //对column进行过滤

    Configuration conf =HBaseConfiguration.create();

    conf.set(“hbase.zookeeper.quorum”,”192.168.1.149”);

    conf.set(“hbase.zookeeper.property.clientport”,”2181”);

    HConnection conn=HConnectionManager.createConnection(conf);

    HTableInterfacetable = conn.getTable(“创建的表名”);

    Scan scan = new Scan();

    Scan.setCacheBlocks(flase);//产生的数据不会放到Blockcache 里

    Filter filter =new QualiFilter(CompareFilter.CompareOp.EQUAL,newBinaryComparator(Bytes.toBytes( “abc”)));//过滤出column为abc的

    scan.setFilter(filter);

    ResultScannerscanner = table.getScanner(scan);

    for(Result result: scanner){

    List<Cell> cell = result.listCells();

    for(Cell cell:cells){

       String rowkey = newString(CellUnit.cloneRow(cell));

       String family = newString(CellUnit.cloneFamily(cell));

       String column = newString(CellUnit.clonecolumn(cell));

       String value = newString(CellUnit.clonecolumn(cell));

       System.out.println(rowkey+””+family+” ”+column+” ”+value);

     

    }

    }

    scanner.close();

    table.close();

    conn.close();

     

    //FilterList

    Configuration conf = HBaseConfiguration.create();

    conf.set(“hbase.zookeeper.quorum”,”192.168.1.149”);

    conf.set(“hbase.zookeeper.property.clientport”,”2181”);

    HConnection conn=HConnectionManager.createConnection(conf);

    HTableInterfacetable = conn.getTable(“创建的表名”);

    Scan scan = new Scan();

    Scan.setCacheBlocks(flase);//产生的数据不会放到Blockcache 里

    SingleColumnValueFilterfilter1 = new SingleColumnValueFilter (Bytes.toBytes( “d”),

    Bytes.toBytes(“b”),

    CompareFilter.CompareOp.EQUAL,

    newBinaryPrefixComparator(Bytes.toBytes(“abc”)));//column_family,column,比较符,column_value

    filter1.setFilterIfMissing(true);

     

    SingleColumnValueFilterfilter2 = new SingleColumnValueFilter (Bytes.toBytes( “d”),

    Bytes.toBytes(“c”),

    CompareFilter.CompareOp.EQUAL,

    newRegexStringComparator(“1|2|3”));//正则:要么为1要么为2要么为3

    filter2.setFilterIfMissing(true);

    List<Filter>filters = new ArrayList<Filter>();

    filters.add(filter1);

    filters.add(filter2);

    FilterListfilterlist = new FilterList(filters);

    scan.setFilter(filterlist);

    ResultScannerscanner = table.getScanner(scan);

    for(Result result: scanner){

    List<Cell> cell = result.listCells();

    for(Cell cell:cells){

       String rowkey = newString(CellUnit.cloneRow(cell));

       String family = newString(CellUnit.cloneFamily(cell));

       String column = newString(CellUnit.clonecolumn(cell));

       String value = newString(CellUnit.clonecolumn(cell));

       System.out.println(rowkey+””+family+” ”+column+” ”+value);

     

    }

    }

    scanner.close();

    table.close();

    conn.close();

     

     

    转载请注明原文地址: https://ju.6miu.com/read-1300465.html
    最新回复(0)