第6章 HBase API操作(二)

上篇:第6章 HBase API操作(一)


1、HBase-- API访问 获取连接

操作步骤:
首先在IDEA工具创建工程项目,如图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
构建好的工程的项目,如图所示:
在这里插入图片描述

(1)新建项目后在pom.xml文件中,添加依赖:

 <dependencies>

    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-server</artifactId>
        <version>1.3.1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-client</artifactId>
        <version>1.3.1</version>
    </dependency>
</dependencies>

(2)创建包(在java文件目录下创建包study.bigdate.hbase
在这里插入图片描述
并在该包下创建类:TestHbaseAPI_1
在这里插入图片描述
在编写代码之前,我们还需要在本身配置好的hbase-1.3.1的conf文件下找到hbase-site.xml文件拷贝到resource文件目录下:
在这里插入图片描述
之后,我们在Linux环境下启动hbase的相关的服务:

[root@hadoop105 hbase-1.3.1]# jps
7824 DataNode
7989 SecondaryNameNode
7593 NameNode
7514 QuorumPeerMain
8235 Jps
8156 HMaster
[root@hadoop105 hbase-1.3.1]# 

之后,即可在IDEA工具中编写代码:

1、获取hbase连接对象

TestHbaseAPI_1.java

package study.bigdate.hbase;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;

import java.io.IOException;

/**
 * 测试 HBase API
 */
public class TestHbaseAPI_1 {
    public static void main(String[] args) throws IOException {

        //通过java代码访问mysql数据库

        //1、加载数据库驱动

        //2、获取数据库连接(url、user、password)

        //3、获取数据库操作对象

        //4、sql

        //5、执行数据库操作

        //6、获取查询结果ResultSet

        //通过java代码访问hbase数据库

        //(0)  创建配置对象,获取hbase的连接
        Configuration conf= HBaseConfiguration.create();

        //(1)获取hbase连接对象
        //classLoad--类加载器:Thread.currentThread.getContextClassLoader
        //classpath:hbase-default.xml、hbase-site.xml
        Connection connection = ConnectionFactory.createConnection(conf);
        System.out.println(connection);
        //(2)获取操作对象

        // (3)操作数据库

        //(4) 获取操作结果

        //(5)关闭数据库连接


    }
}

启动程序,控制台打印出:
在这里插入图片描述


2、获取操作对象

(1)首先,在Linux环境下进入Hbase客户端,若在进入客户端出现错误,可以参照:
操作Hbase的客户端出现错误

(2)进入Hbase客户端查看数据表有哪些:

hbase(main):023:0> list
TABLE                                                                                                                                                                      
student                                                                                                                                                                    
1 row(s) in 0.0320 seconds

=> ["student"]
hbase(main):024:0> 

以上,说明HBase的客户端有一张student的数据表

(3)接下来,在IDEA工具编写代码
具体代码实现:

package study.bigdate.hbase;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;

import java.io.IOException;

/**
 * 测试 HBase API
 */
public class TestHbaseAPI_1 {
    public static void main(String[] args) throws IOException {

        //通过java代码访问mysql数据库

        //1、加载数据库驱动

        //2、获取数据库连接(url、user、password)

        //3、获取数据库操作对象

        //4、sql

        //5、执行数据库操作

        //6、获取查询结果ResultSet

        //通过java代码访问hbase数据库

        //(0)  创建配置对象,获取hbase的连接
        Configuration conf= HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "hadoop105");

        //(1)获取hbase连接对象
        //classLoad--类加载器:Thread.currentThread.getContextClassLoader
        //classpath:hbase-default.xml、hbase-site.xml
        Connection connection = ConnectionFactory.createConnection(conf);
        // System.out.println(connection);

        //(2)获取操作对象:Admin
        //new HBaseAdmin(connection);
        Admin admin = connection.getAdmin();


        // (3)操作数据库:判断hbase中是否存在某张表
        TableName tableName = TableName.valueOf("student1234567");
        boolean flg = admin.tableExists(tableName);
        System.out.println(flg);




        //(4) 获取操作结果

        //(5)关闭数据库连接


    }
}

启动程序,控制台打印出:
在这里插入图片描述
从程序得出,可以判断出是有student的数据表


3、API访问–数据操作

(1)使用API方式,对HBase数据库对表创建

具体代码实现:

TestHbaseAPI_1.java

package study.bigdate.hbase;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;

import java.io.IOException;

/**
 * 测试 HBase API
 */
public class TestHbaseAPI_1 {
    public static void main(String[] args) throws IOException {

        //通过java代码访问mysql数据库

        //1、加载数据库驱动

        //2、获取数据库连接(url、user、password)

        //3、获取数据库操作对象

        //4、sql

        //5、执行数据库操作

        //6、获取查询结果ResultSet

        //通过java代码访问hbase数据库

        //(0)  创建配置对象,获取hbase的连接
        Configuration conf= HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "hadoop105");

        //(1)获取hbase连接对象
        //classLoad--类加载器:Thread.currentThread.getContextClassLoader
        //classpath:hbase-default.xml、hbase-site.xml
        Connection connection = ConnectionFactory.createConnection(conf);
        // System.out.println(connection);

        //(2)获取操作对象:Admin
        //new HBaseAdmin(connection);
        Admin admin = connection.getAdmin();

        //3) 操作数据库
        //3-1)判断命名空间
        try {
           admin.getNamespaceDescriptor("atguigu");
        }catch (NamespaceNotFoundException e){
            //创建表空间
            NamespaceDescriptor nd=
                    NamespaceDescriptor.create("atguigu").build();
            admin.createNamespace(nd);
        }


        // (3)操作数据库:判断hbase中是否存在某张表
        TableName tableName = TableName.valueOf("atguigu:student");
        boolean flg = admin.tableExists(tableName);
        System.out.println(flg);

        if(flg){
            //查询数据
        }else{

            //创建表描述对象
            HTableDescriptor td=new HTableDescriptor(tableName);

            //增加列族
            HColumnDescriptor cd=new HColumnDescriptor("info");
            td.addFamily(cd);

            admin.createTable(td);
            System.out.println("表创建成功。。。。。");
        }



        //(4) 获取操作结果

        //(5)关闭数据库连接


    }
}

启动程序,控制台打印信息:
在这里插入图片描述
在Linux环境下,HBase的数据库查看

hbase(main):024:0> list
TABLE                                                                                                                                                                      
atguigu:student                                                                                                                                                            
student                                                                                                                                                                    
2 row(s) in 0.7600 seconds

=> ["atguigu:student", "student"]
hbase(main):025:0> 

查看这张表:

hbase(main):025:0> describe 'atguigu:student'

Table atguigu:student is ENABLED                                                                                                                                           
atguigu:student                                                                                                                                                            
COLUMN FAMILIES DESCRIPTION                                                                                                                                                
{NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION =
> 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}                                                                       
1 row(s) in 1.0140 seconds

hbase(main):026:0> 

(2)查询数据、查询结果、新增数据、 展现数据

具体代码实现:

package study.bigdate.hbase;

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 java.io.IOException;

/**
 * 测试 HBase API
 */
public class TestHbaseAPI_1 {
    public static void main(String[] args) throws IOException {

        //通过java代码访问mysql数据库

        //1、加载数据库驱动

        //2、获取数据库连接(url、user、password)

        //3、获取数据库操作对象

        //4、sql

        //5、执行数据库操作

        //6、获取查询结果ResultSet

        //通过java代码访问hbase数据库

        //(0)  创建配置对象,获取hbase的连接
        Configuration conf= HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "hadoop105");

        //(1)获取hbase连接对象
        //classLoad--类加载器:Thread.currentThread.getContextClassLoader
        //classpath:hbase-default.xml、hbase-site.xml
        Connection connection = ConnectionFactory.createConnection(conf);
        // System.out.println(connection);

        //(2)获取操作对象:Admin
        //new HBaseAdmin(connection);
        Admin admin = connection.getAdmin();

        //3) 操作数据库
        //3-1)判断命名空间
        try {
           admin.getNamespaceDescriptor("atguigu");
        }catch (NamespaceNotFoundException e){
            //创建表空间
            NamespaceDescriptor nd=
                    NamespaceDescriptor.create("atguigu").build();
            admin.createNamespace(nd);
        }


        // (3)操作数据库:判断hbase中是否存在某张表
        TableName tableName = TableName.valueOf("atguigu:student");
        boolean flg = admin.tableExists(tableName);
        System.out.println(flg);

        if(flg){
            //获取指定的表对象
            Table table = connection.getTable(tableName);

            //查询数据
            //DDL(create drop alter),DML(indate insert,delete),DQL(select)
            String rowkey="1001";

            Get get=new Get(rowkey.getBytes());
            //查询结果
            Result result = table.get(get);
            boolean empty = result.isEmpty();
            System.out.println("1001数据是否存在="+empty);
             if(empty){
                 //新增数据
                 Put put=new Put(Bytes.toBytes(rowkey));
                 String famliy="info";
                 String column="name";
                 String val="zhangsan";

                 put.addColumn(Bytes.toBytes(famliy),Bytes.toBytes(column),Bytes.toBytes(val));

                 table.put(put);

                 System.out.println("增加数据。。。。。");
             }else{
                 //展现数据
                 for (Cell cell:result.rawCells()) {
                     //cell(克隆数据)
                     //这样写: System.out.println("value="+CellUtil.cloneValue(cell)); 控制台打印出:value=[B@a3d9978
                     System.out.println("value="+Bytes.toString(CellUtil.cloneValue(cell)));
                     System.out.println("rowkey="+Bytes.toString(CellUtil.cloneRow(cell)));
                     System.out.println("family="+Bytes.toString(CellUtil.cloneFamily(cell)));
                     System.out.println("column="+Bytes.toString(CellUtil.cloneQualifier(cell)));
                 }
             }


        }else{

            //创建表描述对象
            HTableDescriptor td=new HTableDescriptor(tableName);

            //增加列族
            HColumnDescriptor cd=new HColumnDescriptor("info");
            td.addFamily(cd);

            admin.createTable(td);
            System.out.println("表创建成功。。。。。");
        }



        //(4) 获取操作结果

        //(5)关闭数据库连接


    }
}

启动程序,控制台打印信息:
在这里插入图片描述

(3)删除表(通过API操作删除HBase的数据库的表)

具体代码实现:

TestHbaseAPI_2.java

package study.bigdate.hbase;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;

import java.io.IOException;

/**
 * 测试 HBase API
 */
public class TestHbaseAPI_2 {
    public static void main(String[] args) throws IOException {
        Configuration conf= HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "hadoop105");

        Connection connection = ConnectionFactory.createConnection(conf);

            //删除表
        TableName tableName=TableName.valueOf("atguigu:student");

        Admin admin=connection.getAdmin();
        if(admin.tableExists(tableName)){
            //禁用表
            admin.disableTable(tableName);
            //删除表
            admin.deleteTable(tableName);
        }
    }
}

启动程序,控制台打印信息:
在这里插入图片描述
之后,在HBase的客户端的shell操作查看一下:

hbase(main):028:0> list
TABLE                                                                                                                                                                      
student                                                                                                                                                                    
1 row(s) in 0.1010 seconds

=> ["student"]
hbase(main):029:0> 

说明:atguigu:student数据表成功被删除!

删除数据表的数据

代码具体实现:

package study.bigdate.hbase;

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 java.io.IOException;

/**
 * 测试 HBase API
 */
public class TestHbaseAPI_2 {
    public static void main(String[] args) throws IOException {
        Configuration conf= HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "hadoop105");

        Connection connection = ConnectionFactory.createConnection(conf);
        TableName tableName=TableName.valueOf("atguigu:student");




     /*   Admin admin=connection.getAdmin();
        if(admin.tableExists(tableName)){
            //禁用表
            admin.disableTable(tableName);
            //删除表
            admin.deleteTable(tableName);
        }*/

        //删除表
        Table table=connection.getTable(tableName);

        //delete
        String rowkey="1001";
        Delete delete=new Delete(Bytes.toBytes(rowkey));
        table.delete(delete);
        System.out.println("删除数据");
    }
}

Linux环境下,在Hbase的数据表扫描atguigu这张表的数据

hbase(main):002:0> scan 'atguigu:student'
ROW                                         COLUMN+CELL                                                                                                                    
 1001                                       column=info:sex, timestamp=1579796156497, value=male                                                                           
1 row(s) in 0.0780 seconds

hbase(main):003:0> 

说明:atguigu这张表的数据表是有数据的!

在这里插入图片描述
Linux环境进入HBase的客户端扫描查看atguigu:student的数据是否还在?

hbase(main):004:0> scan 'atguigu:student'
ROW                                         COLUMN+CELL                                                                                                                    
0 row(s) in 0.0510 seconds

hbase(main):005:0> 

说明:数据表的数据不在了,成功被删除

发布了130 篇原创文章 · 获赞 18 · 访问量 2236

猜你喜欢

转载自blog.csdn.net/weixin_39868387/article/details/104054785