zoukankan      html  css  js  c++  java
  • Java API 操作Hbase

    
    package com.bi.net;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.*;
    import org.apache.hadoop.hbase.client.*;
    import org.apache.hadoop.hbase.filter.CompareFilter;
    import org.apache.hadoop.hbase.filter.FilterList;
    import org.apache.hadoop.hbase.filter.PrefixFilter;
    import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Random;
    
    /**
     * Created by DengNi on 2016/6/18.
     */
    public class HbaseJdbc {
    
        public static Configuration conf = null;
        public static TableName tab = TableName.valueOf("HbaseInWord".getBytes());
        public static TableName hbaseInWord = TableName.valueOf("HbaseInWord");
        public static Random ra = new Random();
    
        /**
         * 1 create table 需要 HbaseAdmin      * 2 数据的insert (put) update select by get or scan 都是通过HTable 类操作
         */
    
        @Before
        public void init() {
    
            conf = HBaseConfiguration.create();
            conf.set("hbase.zookeeper.quorum", "bigdataspark:2181,bigdatacloud:2181,bigdatahadoop:2181");
    
        }
    
        @Test
        public void createNewTableOnHbase() throws IOException {
    
            HBaseAdmin hBaseAdmin = new HBaseAdmin(conf);
    
            if (hBaseAdmin.tableExists(tab)) {
                hBaseAdmin.disableTable(tab);
                hBaseAdmin.deleteTable(tab);
    
            }
            HTableDescriptor tableDesc = new HTableDescriptor(tab);
            HColumnDescriptor colDesc = new HColumnDescriptor("cfOne");
            colDesc.setBlockCacheEnabled(true);
            colDesc.setBlocksize(1280);
            colDesc.setMaxVersions(16);
            tableDesc.addFamily(colDesc);
            hBaseAdmin.createTable(tableDesc);
    
            // base(main):015:0> list  cmd check if the table is been create on HBase
    
        }
    
        @Test
        public void insertIntoHbaseInWord() throws IOException {
    
            HTable table = new HTable(conf, hbaseInWord);
    
            List list = new ArrayList<Put>();
            for (int i = 999; i >= 0; i--) {
                Put putValue = new Put(String.valueOf(i).getBytes());
                putValue.add("cfOne".getBytes(), "name".getBytes(), "zl".getBytes());
                putValue.add("cfOne".getBytes(), "age".getBytes(), String.valueOf(i % 102).getBytes());
                list.add(putValue);
    
            }
            table.put(list);
    
    
        }
    
        @Test
        public void searchFromHbaseInWordByGet() throws IOException {
    
            HTable table = new HTable(conf, hbaseInWord);
            Get get = new Get("999".getBytes());
            Result result = table.get(get);
            Cell cell = result.getColumnLatestCell("cfOne".getBytes(), "name".getBytes());
            byte[] bytes = CellUtil.cloneValue(cell);
            System.out.println(new String(bytes, "UTF-8"));
    
        }
    
        @Test
        public void searchByScan() throws IOException {
    
            HTable table = new HTable(conf, hbaseInWord);
            Scan scan = new Scan("900".getBytes(), "999".getBytes());
            ResultScanner result = table.getScanner(scan);
            Iterator<Result> iterator = result.iterator();
            while (iterator.hasNext()) {
                Result result1 = iterator.next();
                Cell cell = result1.getColumnLatestCell("cfOne".getBytes(), "name".getBytes());
                byte[] value = CellUtil.cloneValue(cell);
                byte[] row = CellUtil.cloneRow(cell);
                System.out.println(new String(row, "UTF-8") + "  " + new String(value, "UTF-8"));
    
            }
    
        }
    
        @Test
        public void deleteOneRow() throws IOException {
    
            HTable table = new HTable(conf, hbaseInWord);
            Delete delete = new Delete("988".getBytes());
            table.delete(delete);
    
    
        }
    
        /**
         * A more complicated example
         */
        @Test
        public void insertPut() throws IOException {
    
    
            HTable table1 = new HTable(conf, hbaseInWord);
            List<Put> list = new ArrayList<Put>();
    
            for (int i = 0; i < 10000; i++) {
    
                Put put = new Put(generateRowKey("1531187321").getBytes());
    
                put.add("cfOne".getBytes(),"addr".getBytes(),"Shanghai".getBytes());
                put.add("cfOne".getBytes(),"type".getBytes(),String.valueOf(ra.nextInt(2)).getBytes());
                put.add("cfOne".getBytes(),"phone".getBytes(),generatePhone("153").getBytes());
                put.add("cfOne".getBytes(),"time".getBytes(),String.valueOf(ra.nextInt(500)).getBytes());
    
                list.add(put);
    
    
            }
            table1.put(list);
    
        }
    
        private  String generateRowKey(String s){
    
            StringBuffer sb = new StringBuffer(s);
            sb.append("_2016").append(String.format("%02d",ra.nextInt(12)+1))
                    .append(String.format("%02d",ra.nextInt(30)+1))
                    .append(String.format("%02d",ra.nextInt(24)))
                    .append(String.format("%02d",ra.nextInt(60)))
                    .append(String.format("%02d",ra.nextInt(60)));
    
            return sb.toString();
    
        }
        private String generatePhone(String p){
    
            StringBuffer sb = new StringBuffer(p);
            sb.append(String.format("%08d",ra.nextInt(999999999)));
            return sb.toString();
    
        }
    
        @Test
        public void searchByScanInterval() throws IOException {
    
            HTable table = new HTable(conf,hbaseInWord);
            Scan scan = new Scan("1531187321_20160200000000".getBytes(),"1531187321_20160301000000".getBytes());
            ResultScanner scanner = table.getScanner(scan);
            Iterator<Result> iterator = scanner.iterator();
            while(iterator.hasNext()){
    
                Result result = iterator.next();
                Cell column = result.getColumnLatestCell("cfOne".getBytes(),"phone".getBytes());
    
                byte[] row = CellUtil.cloneRow(column);
                byte[] value = CellUtil.cloneValue(column);
    
                System.out.println(new String(row) + "  "+ new String(value));
    
            }
    
        }
    
        @Test
        public void findByContition() throws IOException {
    
            HTable table = new HTable(conf,hbaseInWord);
            Scan scan = new Scan();
            FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);
            PrefixFilter prefixFilter = new PrefixFilter("1531187321_201610".getBytes());
            SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("cfOne".getBytes(), "type".getBytes(), CompareFilter.CompareOp.EQUAL, "1".getBytes());
            filterList.addFilter(prefixFilter);
            filterList.addFilter(singleColumnValueFilter);
            scan.setFilter(filterList);
    
            ResultScanner scanner = table.getScanner(scan);
            Iterator<Result> iterator = scanner.iterator();
            while(iterator.hasNext()){
    
                Result result = iterator.next();
                Cell columnLatestCell = result.getColumnLatestCell("cfOne".getBytes(),"phone".getBytes());
                byte[] va = CellUtil.cloneValue(columnLatestCell);
                byte[] row = CellUtil.cloneRow(columnLatestCell);
                System.out.println(new String(row) +"  "+new String(va));
    
    
            }
    
    
        }
    
    
    
    
    
    
    
    
    
    
    
    
    }
    
  • 相关阅读:
    二分查找经典题型
    部队侦察
    取随机数函数的使用
    猜拳游戏
    Learning C Struct
    Linux shell get random number
    Linux Bash shell one practice : array if else
    Linux shell misc
    Bash Shell read file line by line and substring
    storm的并发和消息保障性
  • 原文地址:https://www.cnblogs.com/TendToBigData/p/10501433.html
Copyright © 2011-2022 走看看