HbaseJavaAPI具体实现带注释

 环境

  • JDK1.8
  • IntelliJIDEA
  • maven3.6.1
  • hadoop-cdh5.14.0
  • zookeeper-3.4.5-cdh5.14.0
  • hbase-1.2.0-cdh5.14.0

准备POM文件

 <repositories>
        <repository>
            <id>cloudera</id>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
        </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.6.0-mr1-cdh5.14.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>1.2.0-cdh5.14.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-server</artifactId>
            <version>1.2.0-cdh5.14.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.14.3</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <!-- <verbal>true</verbal>-->
                </configuration>
            </plugin>
            <!--将我们其他用到的一些jar包全部都打包进来 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4.3</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <minimizeJar>false</minimizeJar>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
 @Test//创建一个表
    public void createTable() throws IOException {

        //获取连接
        Configuration conf = new Configuration();
        conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(conf);

        //实例 admin 管理员对象  创建或删除hbase表会用得到
        Admin admin = connection.getAdmin();

        //实例表名和表结构
        //表名
        TableName myuser = TableName.valueOf("myuser");
        //设置表结构
        HTableDescriptor hTableDescriptor = new HTableDescriptor(myuser);

        /*设置列族*/
        HColumnDescriptor hColumnDescriptor1 = new HColumnDescriptor("f1");
        HColumnDescriptor hColumnDescriptor2 = new HColumnDescriptor("f2");

        //设置表与列族之间的关系
        hTableDescriptor.addFamily(hColumnDescriptor1);
        hTableDescriptor.addFamily(hColumnDescriptor2);
        /*执行创建表*/
        admin.createTable(hTableDescriptor);
        /*关闭资源*/
        admin.close();
        connection.close();
    }
  @Test//添加一条数据
    public void putdata() throws IOException {

        /*实例化一个配置对象 并设置连接zookeeper*/
        Configuration conf = new Configuration();
        conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(conf);
        //选择要操作的表
        Table myuser = connection.getTable(TableName.valueOf("myuser"));

        /*创建一个put 对象并准备数据*/
        Put f1 = new Put("001".getBytes());
        f1.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(1));
        f1.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("张三"));
        f1.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(18));

        f1.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("地球人"));
        f1.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("15874102589"));

        /*插入数据*/
        myuser.put(f1);
        /*关闭资源*/
        connection.close();
    }
    @Test//添加多条数据
    public void putdatas() throws IOException {
        //设置获取连接
        Configuration conf = new Configuration();
        conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(conf);
        //设置添加数据到那个表
        Table myuser = connection.getTable(TableName.valueOf("myuser"));

        //准备数据
        Put put = new Put("0002".getBytes());
        put.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(1));
        put.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("曹操"));
        put.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(30));
        put.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("1"));
        put.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("沛国谯县"));
        put.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("16888888888"));
        put.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("helloworld"));

        Put put2 = new Put("0003".getBytes());
        put2.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(2));
        put2.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("刘备"));
        put2.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(32));
        put2.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("1"));
        put2.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("幽州涿郡涿县"));
        put2.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("17888888888"));
        put2.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("talk is cheap , show me the code"));


        Put put3 = new Put("0004".getBytes());
        put3.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(3));
        put3.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("孙权"));
        put3.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(35));
        put3.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("1"));
        put3.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("下邳"));
        put3.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("12888888888"));
        put3.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("what are you 弄啥嘞!"));

        Put put4 = new Put("0005".getBytes());
        put4.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(4));
        put4.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("诸葛亮"));
        put4.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(28));
        put4.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("1"));
        put4.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("四川隆中"));
        put4.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("14888888888"));
        put4.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("出师表你背了嘛"));

        Put put5 = new Put("0005".getBytes());
        put5.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(5));
        put5.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("司马懿"));
        put5.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(27));
        put5.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("1"));
        put5.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("哪里人有待考究"));
        put5.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("15888888888"));
        put5.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("跟诸葛亮死掐"));


        Put put6 = new Put("0006".getBytes());
        put6.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(5));
        put6.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("xiaobubu—吕布"));
        put6.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(28));
        put6.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("1"));
        put6.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("内蒙人"));
        put6.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("15788888888"));
        put6.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("貂蝉去哪了"));

        //把所有的put添加到一个集合
        List<Put> datas = new ArrayList<>();
        datas.add(put);
        datas.add(put2);
        datas.add(put3);
        datas.add(put4);
        datas.add(put5);
        datas.add(put6);

        //把集合数据添加到hbase
        myuser.put(datas);

        //关闭资源
        connection.close();
    }
    @Test//获取一条数据
    public void getdata() throws IOException {
        /*查询数据
         * 按照主键id进行查询*/
        /*获取连接*/
        Configuration conf = new Configuration();
        conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(conf);
        /*连接到具体的表*/
        Table myuser = connection.getTable(TableName.valueOf("myuser"));

        /*根据rowkey 获取一行的数据*/
        Get get = new Get("0002".getBytes());
        /*查询一个列族的信息*/
        get.addFamily("f2".getBytes());
        /*查询指定列族下的特定列*/
        get.addColumn("f1".getBytes(), "name".getBytes());

        Result result = myuser.get(get);
        //获取所有的列名称以及列的值
        Cell[] cells = result.rawCells();
        //遍历
        for (Cell cell : cells) {
            /*未使用工具类 不推荐*/
//            System.out.println(Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength()));
//            System.out.println(Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));
            /*使用工具类 推荐
             * 如果值是Int类型 需要使用 toInt*/
            if (Bytes.toString(CellUtil.cloneQualifier(cell)).equals("id") || Bytes.toString(CellUtil.cloneQualifier(cell)).equals("age")) {
                System.out.println(Bytes.toString(CellUtil.cloneFamily(cell)));
                System.out.println(Bytes.toString(CellUtil.cloneQualifier(cell)));
                System.out.println(Bytes.toInt(CellUtil.cloneValue(cell)));
            } else {
                System.out.println(Bytes.toString(CellUtil.cloneFamily(cell)));
                System.out.println(Bytes.toString(CellUtil.cloneQualifier(cell)));
                System.out.println(Bytes.toString(CellUtil.cloneValue(cell)));
            }
        }
        /*关闭资源*/
        myuser.close();
        connection.close();
    }
    @Test//通过 startRowKey和endRowKey进行扫描查询
    public void scanRowkey() throws IOException {
        /*获取连接*/
        Configuration conf = new Configuration();
        conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(conf);
        /*查询那个表*/
        Table myuser = connection.getTable(TableName.valueOf("myuser"));

        Scan scan = new Scan();
        scan.setStartRow("0004".getBytes());
        scan.setStopRow("0006".getBytes());

        ResultScanner scanner = myuser.getScanner(scan);
        for (Result result : scanner) {
            /*获取rowkey*/
            System.out.println(Bytes.toString(result.getRow()));
            KeyValue[] raw = result.raw();
            for (KeyValue keyValue : raw) {
                //获取所属列族
                System.out.println(Bytes.toString(keyValue.getFamilyArray(), keyValue.getFamilyOffset(), keyValue.getFamilyLength()));
                System.out.println(Bytes.toString(keyValue.getQualifierArray(), keyValue.getQualifierOffset(), keyValue.getQualifierLength()));
            }
            System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));

        }

        /*关闭资源*/
        myuser.close();
        connection.close();
    }
    @Test//全表扫描
    public void scanrow() throws IOException {
        //获取连接
        Configuration conf = new Configuration();
        conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(conf);
        //获取表
        Table myuser = connection.getTable(TableName.valueOf("myuser"));
        //设置全表扫描
        Scan scan = new Scan();

//        设置rowkey 区间扫描   含头不含尾
//        scan.setStartRow("0002".getBytes());
//        scan.setStopRow("0005".getBytes());

        /*扫描每一行数据*/
        ResultScanner scanner = myuser.getScanner(scan);
        /*遍历数据*/
        for (Result result : scanner) {
            /*获取 rowkey*/
            String s = Bytes.toString(result.getRow());
            System.out.println("rowkey 是:" + s + "   这个value是啥:" + Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
        }
        //关流
        myuser.close();
        connection.close();
    }
    @Test// 通过rowkey 进行过滤
    public void rowKeyFilter() throws IOException {
        //获取连接zookeeper
        Configuration conf = new Configuration();
        conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(conf);
        //设置查询的表
        Table myuser = connection.getTable(TableName.valueOf("myuser"));
        //设置全表扫描
        Scan scan = new Scan();
        //设置过滤
        RowFilter rowFilter = new RowFilter(CompareFilter.CompareOp.NOT_EQUAL, new BinaryComparator("0004".getBytes()));
        scan.setFilter(rowFilter);
        ResultScanner scanner = myuser.getScanner(scan);
        for (Result result : scanner) {
            String rowkey = Bytes.toString(result.getRow());
            System.out.println("rowkey 是:" + rowkey + "   这个value是啥:" + Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
        }
        //关闭资源
        myuser.close();
        connection.close();
    }
    @Test//列族过滤器
    public void fammilyFilter() throws IOException {
        //设置获取连接
        Configuration conf = new Configuration();
        conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(conf);
        //设置查询表
        Table myuser = connection.getTable(TableName.valueOf("myuser"));
        //设置全局扫描
        Scan scan = new Scan();
        //设置过滤
        FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.NO_OP, new BinaryComparator("f2".getBytes()));
        scan.setFilter(familyFilter);
        ResultScanner scanner = myuser.getScanner(scan);
        for (Result result : scanner) {
            String s = Bytes.toString(result.getRow());
            System.out.println("rowkey 是:" + s + "   这个value是啥:" + Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));

        }
        //关闭资源
        myuser.close();
        connection.close();
    }
    @Test//列过滤器
    public void qualifierFilter() throws IOException {
        //设置获取连接
        Configuration conf = new Configuration();
        conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(conf);
        //设置过滤表
        Table myuser = connection.getTable(TableName.valueOf("myuser"));
        //设置全局扫描
        Scan scan = new Scan();
        //设置过滤条件
        QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.EQUAL, new BinaryComparator("name".getBytes()));
        scan.setFilter(qualifierFilter);
        ResultScanner scanner = myuser.getScanner(scan);
        for (Result result : scanner) {
            String s = Bytes.toString(result.getRow());
            System.out.println("rowkey 是:" + s + "   这个value是啥:" + Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));

        }
        //关闭资源
        myuser.close();
        connection.close();
    }
    @Test//列值过滤器
    public void valueFilter() throws IOException {
        //设置获取连接
        Configuration conf = new Configuration();
        conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(conf);
        //设置查询表名
        Table myuser = connection.getTable(TableName.valueOf("myuser"));
        //设置全表扫描
        Scan scan = new Scan();
        //设置过滤条件
        ValueFilter valueFilter = new ValueFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator("布"));
        scan.setFilter(valueFilter);
        ResultScanner scanner = myuser.getScanner(scan);
        for (Result result : scanner) {
            String s = Bytes.toString(result.getRow());
            System.out.println("rowkey 是:" + s + "   这个value是啥:" + Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
        }
        //关闭资源
        myuser.close();
        connection.close();
    }
    @Test//专用过滤器  单列值过滤器,返回满足条件的整行数据
    public void singleColumnFilter() throws IOException {
        //设置获取连接
        Configuration conf = new Configuration();
        conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(conf);
        //设置查询表
        Table myuser = connection.getTable(TableName.valueOf("myuser"));
        //设置全局扫描
        Scan scan = new Scan();
        //设置过滤条件                                                          列族是  f1         列族下的 name列                              name列  =   刘备的值
        SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("f1".getBytes(), "name".getBytes(), CompareFilter.CompareOp.EQUAL, "刘备".getBytes());
        scan.setFilter(singleColumnValueFilter);
        ResultScanner scanner = myuser.getScanner(scan);
        for (Result result : scanner) {
            String s = Bytes.toString(result.getRow());
            System.out.println("rowkey 是:" + s + "   这个value是啥:" + Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));
        }
        //关闭资源
        myuser.close();
        connection.close();
    }
    @Test// 行键前缀过滤器
    public void preFilter() throws IOException {
        //设置获取连接
        Configuration conf = new Configuration();
        conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(conf);
        //设置查询表
        Table myuser = connection.getTable(TableName.valueOf("myuser"));
        //设置全局扫描
        Scan scan = new Scan();
        //设置过滤条件
        PrefixFilter prefixFilter = new PrefixFilter("".getBytes());
        scan.setFilter(prefixFilter);
        ResultScanner scanner = myuser.getScanner(scan);
        for (Result result : scanner) {
            String s = Bytes.toString(result.getRow());
            System.out.println("rowkey 是:" + s + "   这个value是啥:" + 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();
        connection.close();
    }
    @Test//根据rowkey 进行删除一整行数据
    public void deleteByRowKey() throws IOException {
        //设置获取连接
        Configuration conf = new Configuration();
        conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(conf);
        //设置查询表
        Table myuser = connection.getTable(TableName.valueOf("myuser"));
        //设置删除的rowkey
        Delete delete = new Delete("001".getBytes());
        myuser.delete(delete);
        //关闭资源
        myuser.close();
        connection.close();
    }
    @Test//删除一整张表
    public void deleteTable() throws IOException {
        //设置获取连接
        Configuration conf = new Configuration();
        conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
        Connection connection = ConnectionFactory.createConnection(conf);
        //实例一个超级管理员对象
        Admin admin = connection.getAdmin();
        //实现删除一张表
        admin.disableTable(TableName.valueOf("abc"));
        admin.deleteTable(TableName.valueOf("abc"));
        //关闭资源
        connection.close();
    }
发布了24 篇原创文章 · 获赞 75 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/dlc_996/article/details/103605208