HBase Shell操作和HBase API操作(创建表,插入数据,查看数据,删除表等操作)(二)

HBase Shell操作和HBase API操作

  • 一.HBase Shell操作
    • 命名空间
    • 1.进入HBase客户端命令行
    • 2.查看帮助命令
    • 3.查看当前数据库中有哪些表
    • 4.创建表
    • 5.插入数据到表
    • 6.插入多行数据
    • 7.扫描查看表
    • 8.查看表结构
    • 9.更新指定字段的数据
    • 10.查看"指定行"或"指定列族:列"的数据
    • 11.统计表数据行数
    • 12.删除数据
    • 13.清空表数据
    • 14.删除表
    • 15.变更表信息
    • 16.获取多版本数据
  • 二.HBase API操作
    • 1.环境准备
    • 2.HBase API

一.HBase Shell操作

命名空间

--创建命名空间exam
create_namespace 'exam'
--显示命名空间
list_namespace
--显示exam命名空间的表
list_namespace_tables 'exam'
--删除命名空间exam
drop_namespace 'exam'

1.进入HBase客户端命令行

[hadoop@hadoop00 hbase]$ $HBASE_HOME/bin/hbase shell

2.查看帮助命令

hbase(main):001:0> help

3.查看当前数据库中有哪些表

hbase(main):002:0> list

4.创建表

create '[命名空间]:表名','列簇名1','列簇名2'
hbase(main):003:0>create 'customer',{NAME=>'addr'},{NAME=>'ordeer'}

NAME=>‘xxx’,xxx为列族的名字。HBase中创建一个表,必须指定至少一个列族。

列族对应HDFS上一个文件夹

5.插入数据到表

put '[命名空间]:表名','rowkey','列簇名1:列名','数据'
hbase(main):004:0>put 'customer','jsmith','addr:city','monthreal'
hbase(main):005:0>put 'customer','jsmith','addr:state','ON'
hbase(main):006:0>put 'customer','jsmith','order:numb','123456'
hbase(main):007:0>put 'customer','jsmith','order:date','2015-12-19'

插入数据后,到对应的列族目录下,发现没有对应的文件生成

就证明HBase 写入数据是没有直接落磁盘的,是先在缓冲中的。为了方便演示,可以手动刷出缓存,命令为 flush,在命令行输入 flush,会提示使用方法。

hbase(main):008:0> flush 'customer'

flush 完成后,可以看到对应的列族目录下,有数据文件了,该文件就是 HFile。

​ 列族目录下的文件,可以尝试使用 hdfs 命令查看其内容,会发现是二进制的内容。HBase 提供了查看该文件内容的方式。

下面命令在 Linux 命令行执行,不是在 hbase shell 中

[root@hadoop00 ~]$ hbase hfile -v -p -f /hbase/data/default/customer/e3ee2da14c8b5f82f2035fc9fc283481/addr/8e1050e1df9842f0b15dc8fb2a7b50e4
#输出
K: r001/addr:city/1608264247929/Put/vlen=7/seqid=5 V: beijing
K: r001/addr:country/1608264351168/Put/vlen=5/seqid=6 V: china
K: r002/addr:city/1608264394006/Put/vlen=7/seqid=7 V: nanjing
K: roo3/addr:city/1608264967129/Put/vlen=7/seqid=9 V: nanjing

前面是 K,后面是 V,从这里也能看出 HBase 是 KeyValue 数据库

6.插入多行数据

put 'customer', 'jsmith', 'order:numb', '1235'
put 'customer', 'jsmith', 'order:numb', '1236'
put 'customer', 'jsmith', 'order:numb', '1237'
put 'customer', 'jsmith', 'order:numb', '1238'
put 'customer', 'njones', 'addr:city', 'miami'
put 'customer', 'njones', 'addr:state', 'FL'
put 'customer', 'njones', 'order:numb', '5555'
put 'customer', 'tsimmons', 'addr:city', 'dallas'
put 'customer', 'tsimmons', 'addr:state', 'TX'
put 'customer', 'jsmith', 'addr:city', 'denver'
put 'customer', 'jsmith', 'addr:state', 'CO'
put 'customer', 'jsmith', 'order:numb', '6666'
put 'customer', 'njones', 'addr:state', 'TX'
put 'customer', 'amiller', 'addr:state', 'TX'

7.扫描查看表

scan '[命名空间]:表名' --查看所有数据
scan '[命名空间]:表名',{
    COLUMNS =>'列簇'} --查看某一列簇的所有数据
scan 'customer'
scan 'exam:analysis',{
    COLUMNS => 'question'}
scan 'customer', {
    COLUMNS=>['order:numb'], VERSIONS => 2}
scan 'customer', {STARTROW => 'j', STOPROW => 't'}

8.查看表结构

desc 'customer'

9.更新指定字段的数据

put 'customer','jsmith','order:numb','654321'

10.查看"指定行"或"指定列族:列"的数据

--查看具体列的数据
get '表名','rowkey','列簇:列名'
get 'customer', 'jsmith'
get 'customer', 'jsmith','addr'
get 'customer', 'jsmith','addr:city'

11.统计表数据行数

count 'customer'

12.删除数据

--删除某rowkey的全部数据
deleteall '表名','rowkey'
--删除某rowkey的某一列数据
delete '表名','rowkey','列簇:列名'
--删除某rowkey的全部数据
deleteall 'customer','jsmith'
--删除某rowkey的某一列数据
delete 'customer','njones','addr:city'

13.清空表数据

提示:清空表的操作顺序为先 disable,然后再 truncate。disable 的操作会自动完成。

truncate 'customer'

14.删除表

注意需要先 disable 表,不然直接删除会报错

提示:如果直接 drop 表,会报错:ERROR: Table customer is enabled. Disable it first

disable 'customer'
drop 'customer'

15.变更表信息

将 order 列族中的数据设置为可以存放 5 个版本:

alter 'customer',NAME=>'order',VERSIONS=>5

16.获取多版本数据

先更新一条数据

put 'customer', 'tsimmons', 'order:city', 'beijing'
put 'customer', 'tsimmons', 'order:city', 'beijing2'
--查看多版本数据
get 'customer','tsimmons',{
    COLUMN=>'order:city',VERSIONS=>2}

二.HBase API操作

项目部分会使用到从 Kafka 消费数据,然后存储到 HBase 数据库,使用的是HBase Java API。所以这部分代码需要学员掌握。

1.环境准备

 <dependencies>
    <dependency>
      <groupId>junitgroupId>
      <artifactId>junitartifactId>
      <version>4.12version>
      <scope>testscope>
    dependency>
    <dependency>
      <groupId>org.apache.hbasegroupId>
      <artifactId>hbase-clientartifactId>
      <version>1.2.0version>
    dependency>
    <dependency>
      <groupId>org.apache.hbasegroupId>
      <artifactId>hbase-commonartifactId>
      <version>1.2.0version>
    dependency>
    <dependency>
    <groupId>org.apache.hbasegroupId>
    <artifactId>hbase-serverartifactId>
      <version>1.2.0version>
    dependency>
    <dependency>
      <groupId>org.apache.hadoopgroupId>
      <artifactId>hadoop-commonartifactId>
      <version>2.6.0version>
    dependency>
    <dependency>
      <groupId>org.junit.jupitergroupId>
      <artifactId>junit-jupiter-apiartifactId>
      <version>RELEASEversion>
      <scope>compilescope>
    dependency>
  dependencies>

2.HBase API

使用javaAPI读取在HBase中创建表,插入数据,读取数据,删除表

package cn.kgc;

import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.jupiter.api.Test;
import org.apache.hadoop.conf.Configuration;

import java.io.IOException;

/**
 * @author Oldhu
 * @date @Date
 * @des
 */
public class HBASEClientDemo {
     
    //TODO:创建一个表
    @Test
    public void createTable() throws IOException {
     
        //1.获取hbase连接,配置
        Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "192.168.36.38");
        conf.set("hbase.zookeeper.property.clientPort", "2181");
        //2.创建连接
        Connection conn = ConnectionFactory.createConnection(conf);
        //3.创建admin
        Admin admin = conn.getAdmin();
        //4.创建表的相关信息,表名
        HTableDescriptor student = new HTableDescriptor(TableName.valueOf("student"));
        //5.添加列族信息
        student.addFamily(new HColumnDescriptor("info"));
        student.addFamily(new HColumnDescriptor("score"));
        //6.调用创建表的方法进行建表操作
        admin.createTable(student);
        //7.关闭连接
        conn.close();
    }

    //TODO:向表中添加数据
    @Test
    public void putData2Table() throws IOException {
     

        //1.获取hbase连接,配置
        Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "hadoop00");
        conf.set("hbase.zookeeper.property.clientPort", "2181");
        //2.创建连接
        Connection conn = ConnectionFactory.createConnection(conf);
        //3.获取table
        Table student = conn.getTable(TableName.valueOf("student"));
        //4.往表中添加数据rowkey
        Put put = new Put(Bytes.toBytes("1001"));
        //5.添加列info:name zhangsan
        put.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"), Bytes.toBytes("zhangsan"));
        put.addColumn(Bytes.toBytes("info"), Bytes.toBytes("gender"), Bytes.toBytes("man"));
        put.addColumn(Bytes.toBytes("info"), Bytes.toBytes("age"), Bytes.toBytes(11));
        //6.插入数据
        student.put(put);
        //7.关闭连接
        conn.close();
    }

    //TODO:读取数据
    @Test
    public void getDataFromTable() throws IOException {
     
        //1.获取hbase连接,配置
        Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "hadoop00");
        conf.set("hbase.zookeeper.property.clientPort", "2181");
        //2.创建连接
        Connection conn = ConnectionFactory.createConnection(conf);
        //3.获取table
        Table student = conn.getTable(TableName.valueOf("student"));
        //4.读取表中的数据,Get
        Get get = new Get(Bytes.toBytes("1001"));
        //5.获取结果
        Result result = student.get(get);
        //6.遍历结果
        Cell[] cells = result.rawCells();
        for (Cell cell : cells) {
     
            //获取具体的值
            System.out.println("rowkey:" + Bytes.toString(CellUtil.cloneRow(cell)));
            System.out.println("列族:" + Bytes.toInt(CellUtil.cloneFamily(cell)));
            System.out.println("列名:" + Bytes.toString(CellUtil.cloneQualifier(cell)));
            System.out.println("value:" + Bytes.toString(CellUtil.cloneValue(cell)));
            System.out.println("_______________");
        }
        //7.关闭连接
        conn.close();
    }

    //TODO:删除
    @Test
    public void dropTable() throws IOException {
     
        //1.获取hbase连接,配置
        Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "hadoop00");
        conf.set("hbase.zookeeper.property.clientPort", "2181");
        //2.创建连接
        Connection conn = ConnectionFactory.createConnection(conf);
        //3.get admin
        Admin admin = conn.getAdmin();
        //4.禁用表
        admin.disableTable(TableName.valueOf("student"));
        //5.删除表
        admin.deleteTable(TableName.valueOf("student"));
        //6.关闭连接
        conn.close();
    }
}

你可能感兴趣的:(HBase,hbase,hbaseshell,hbase,API,增删改查)