HBase常用Shell与JavaAPI操作

1、常用shell

名称 命令
创建表 create ‘表名’,‘列簇名1’,‘列簇名2’
获取数据 get ‘表名’,‘行键’ ,‘列簇名:列名’
添加数据 put ‘表名’,‘行键’ ,‘列簇名:列名’,‘值’
查看所有表 list
查看表结构 desc ‘表名’
删除列 delete ‘表名’, ‘行键’,‘列簇名:列名’
删除一行数据 delete ‘表名’, ‘行键’
删除表 drop ‘表名’ 删除表前需禁用表
清空表数据 truncate ‘表名’
查询所有数据 scan ‘表名’
查询前2条数据 scan ‘表名’,{LIMIT=>2}
范围查询 scan ‘表名’,{STARTROW => ‘起始行键名’, ENDROW => ‘结束行键名’}
统计表记录 count ‘表名’, {INTERVAL => 多少行显示一次, CACHE => 每次取的大小}
增加列簇 alter ‘表名’, {NAME=> ‘列簇名’}
删除列簇 alter ‘表名’, ‘delete’=>‘列簇名’
禁用表 disable ‘表名’
启用表 enable ‘表名’
判断表是否存在 exists ‘表名’

2、JavaAPI操作

2.1、HBaseAdmin类

类:org.apache.hadoop.hbase.client.HBaseAdmin
作用:提供了一个接口来管理 HBase 数据库的表信息。它提供的方法包括:创建表,删 除表,列出表项,使表有效或无效,以及添加或删除表列族成员等。
在这里插入图片描述

2.2、HBaseConfiguration类

类:org.apache.hadoop.hbase.HBaseConfiguration
作用:对 HBase 进行配置
在这里插入图片描述

2.3、HTableDescriptor类

类: org.apache.hadoop.hbase.HTableDescriptor
作用:包含了表的名字极其对应表的列族
在这里插入图片描述

2.4、HColumnDescriptor类

类: org.apache.hadoop.hbase.HColumnDescriptor
作用:维护着关于列族的信息,例如版本号,压缩设置等。它通常在创建表或者为表添 加列族的时候使用。列族被创建后不能直接修改,只能通过删除然后重新创建的方式。列族被删除的时候,列族里面的数据也会同时被删除。
在这里插入图片描述

2.5、HTable类

类: org.apache.hadoop.hbase.client.Htable
作用:可以用来和 HBase 表直接通信。此方法对于更新操作来说是非线程安全的。
在这里插入图片描述

2.6、Put类

类: org.apache.hadoop.hbase.client.Put
作用:用来对单个行执行添加操作
在这里插入图片描述

2.7、Get类

类: org.apache.hadoop.hbase.client.Get
作用:用来获取单个行的相关信息
在这里插入图片描述

2.8、Result类

类: org.apache.hadoop.hbase.client.Result
作用:存储 Get 或者 Scan 操作后获取表的单行值。使用此类提供的方法可以直接获取值 或者各种 Map 结构( key-value 对)
在这里插入图片描述

3、JavaAPI实操代码

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 org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: Ding
 * @Date: 2021/11/30/21:00
 * @Description: ctrl + alt + f  将局部变量提升成全局变量
 */
public class APIoperation {

    private Connection conn;
    private Admin admin;

    @Before
    /**
     * 初始化连接
     */
    public void init() throws IOException {
        // 创建一个配置
        Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "master:2181,node1:2181,node2:2181");
        conn = ConnectionFactory.createConnection(conf);
        admin = conn.getAdmin();
    }


    @Test
    /**
     * 创建一个表
     */
    public void createTable() throws IOException {
        TableName testAPI = TableName.valueOf("testAPI");
        boolean exists = admin.tableExists(testAPI);
        if (exists) {
            System.out.println(Bytes.toString(testAPI.getName()) + ":表创建失败,表已经存在");
            return;
        }

        HTableDescriptor tableDesc = new HTableDescriptor(testAPI);

        HColumnDescriptor info = new HColumnDescriptor("info");
        info.setMaxVersions(3);
        tableDesc.addFamily(info);

        admin.createTable(tableDesc);
        System.out.println(Bytes.toString(testAPI.getName()) + ":表创建成功!");
    }

    @Test
    /**
     * 删除一个表
     */
    public void dropTable() throws IOException {
        TableName testAPI = TableName.valueOf("testAPI");
        boolean exists = admin.tableExists(testAPI);
        if (exists) {
            admin.disableTable(testAPI);
            admin.deleteTable(testAPI);
            System.out.println(Bytes.toString(testAPI.getName()) + "表删除成功!");
            return;
        }
        System.out.println(Bytes.toString(testAPI.getName()) + "表不存在哦");
    }

    @Test
    /**
     * 将hbase中的表全部显示出来
     */
    public void list() throws IOException {
        TableName[] tableNames = admin.listTableNames();
        for (TableName tableName : tableNames) {
            System.out.println(tableName);
        }
    }

    @Test
    /**
     * 向表中put数据
     */
    public void put() throws IOException {
        TableName testAPI = TableName.valueOf("testAPI");
        if (admin.tableExists(testAPI)) {
            Table table = conn.getTable(testAPI);
            Put put = new Put("cf1".getBytes());
            put.addColumn("cf1".getBytes(), "name".getBytes(), "zs".getBytes());

            table.put(put);
        }
    }

    @Test
    /**
     * 获取表数据
     */
    public void get() throws IOException {
        TableName testAPI = TableName.valueOf("testAPI");
        boolean b = admin.tableExists(testAPI);
        if (b) {
            Table table = conn.getTable(testAPI);
            Get get = new Get("cf1".getBytes());
            Result result = table.get(get);
            byte[] value = result.getValue("cf1".getBytes(), "name".getBytes());

            System.out.println(new String(value));
        }
    }

    @Test
    /**
     * 修改表结构,添加一个列簇
     */
    public void modifyTable() throws IOException {
        //判断表是否存在
        TableName testAPI = TableName.valueOf("testAPI");
        boolean exists = admin.tableExists(testAPI);
        if (!exists) {
            System.out.println(Bytes.toString(testAPI.getName()) + "表不存在无法修改!");
            return;
        }
        //获取原有表的描述器
        HTableDescriptor tableDesc = admin.getTableDescriptor(testAPI);
        // 添加一个列簇
        HColumnDescriptor info2 = new HColumnDescriptor("info2");
        info2.setMaxVersions(3);
        tableDesc.addFamily(info2);
        admin.modifyTable(testAPI, tableDesc);
        System.out.println(Bytes.toString(testAPI.getName()) + "表修改成功喽哦ヾ(≧▽≦*)o");
    }

    @Test
    /**
     * 修改表结构,删除一个列簇
     */
    public void deleteFamily() throws IOException {
        TableName testAPI = TableName.valueOf("testAPI");
        boolean exists = admin.tableExists(testAPI);
        if (!exists) {
            System.out.println("不好意思哦"+Bytes.toString(testAPI.getName())+"表不存在");
            return;
        }
        HTableDescriptor tableDesc = admin.getTableDescriptor(testAPI);
        boolean isFamily = tableDesc.hasFamily("info2".getBytes());
        if (!isFamily) {
            System.out.println("不好意思哦"+Bytes.toString(testAPI.getName())+"表中没有"+tableDesc.getNameAsString()+"列簇哦(︶^︶)");
            return;
        }
        tableDesc.removeFamily("info2".getBytes());
        admin.modifyTable(testAPI,tableDesc);
        System.out.println("已经将列簇info2删除了哦!");
    }

    @After
    /**
     * 关闭资源
     */
    public void close() throws IOException {
        admin.close();
        conn.close();
    }
}

THE END
分享
二维码
< <上一篇

)">
下一篇>>