HBase基础知识(四):HBase API

HBase还提供了API,我们可以通过编程的方式来进行对HBase的操作。

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. HBase API

2.1 获取 Configuration 对象

 public static Connection connection = null;
    public static Admin admin = null;

    static {
        try {
            //1. 获取配置信息
            Configuration configuration = HBaseConfiguration.create();

            //2. 创建连接对象
            connection = ConnectionFactory.createConnection(configuration);

            //3. 创建admin对象
            admin = connection.getAdmin();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

2.2 判断表是否存在

 //2.判断表明是否存在
    public static boolean isTableExistByNewFun(String tableName) throws IOException {

        //3. 判断表是否存在
        return admin.tableExists(TableName.valueOf(tableName));
    }

2.3 DDL

package com.atguigu.DDL;

import com.atguigu.HbaseAPI;
import com.atguigu.test;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.Admin;

import java.io.IOException;

public class createTable {

    public static void main(String[] args) throws IOException {

        createTable table = new createTable();

        System.out.println(HbaseAPI.isTableExistByNewFun("0408:stu5"));

        //1. 创建表测试,在命名空间0408下面创建表
        table.createTable("0408:stu5","info1","info2");

        System.out.println(HbaseAPI.isTableExistByNewFun("0408:stu5"));

        /*//2.删除表
        table.dropTable("stu5");*/

        //4.创建命名空间 hbase(main):004:0> list_namespace
        //NAMESPACE
        //0408
        //default
        //hbase
        //3 row(s) in 0.3890 seconds
        table.createNameSpace("0408");

        //2.关闭资源
        HbaseAPI.close();
    }

    //1.创建表
    public void createTable (String tableName , String... cfs) throws IOException {
        //1.判断是否存在列族信息
        if (cfs.length <= 0){
            System.out.println("请设置列族信息");
            return;
        }

        //2. 判断表是否存在
        if (HbaseAPI.isTableExistByNewFun(tableName)){
            System.out.println(tableName + "表已存在");
            return;
        }

        //2.5 创建表描述器
        HTableDescriptor hTableDescriptor = new HTableDescriptor(TableName.valueOf(tableName));

        //2.6 循环添加列族信息
        for (String cf : cfs) {
            //2.7 创建列族描述器
            HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(cf);

            //2.8 添加具体的列族信息
            hTableDescriptor.addFamily(hColumnDescriptor);
        }

        //3.创建表
        HbaseAPI.admin.createTable(hTableDescriptor);
    }

    //2.删除表
    public void dropTable (String tableName) throws IOException {
        System.out.println("++++++++++++++++++++表的删除操作++++++++++++++++");
        //1.先判断表是否存在
        if (HbaseAPI.isTableExistByNewFun(tableName)){
            System.out.println(tableName+": 表存在");
        }else{
            System.out.println(tableName+":不存在");
            return;
        }

        //2. 使表下线
        HbaseAPI.admin.disableTable(TableName.valueOf(tableName));

        //3.删除表
        HbaseAPI.admin.deleteTable(TableName.valueOf(tableName));
    }

    //3. 创建命名空间
    public void createNameSpace(String ns){

        //1.创建命令空间描述器
        NamespaceDescriptor namespaceDescriptor = NamespaceDescriptor.create(ns).build();

        //2.创建命名空间
        try {
            HbaseAPI.admin.createNamespace(namespaceDescriptor);
        }catch (NamespaceExistException e){
            System.out.println(ns+":命名空间已存在");
        }catch (Exception e){
            e.printStackTrace();
        }

        System.out.println("命名空间存在,方法运行结束");
    }
}

续: 

package com.atguigu.DML;

import com.atguigu.HbaseAPI;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;
import java.util.List;

public class Table_DML {
    public static void main(String[] args) throws IOException {
        Table_DML table = new Table_DML();
        /*//1.创建数据测试
        table.putData("stu","1002","info","name","TS");
*/

        //2.获取单行数据
        /*table.getData("stu","1001","info","name");*/

        //3.查询表中的数据
        /*table.ScanData("stu");*/

        //4.测试删除
        table.deleteData("stu","1006","info","name");


        HbaseAPI.close();

    }

    //1.向表内插入数据
    public void putData(String tableName,String rowKey , String cf , String cn , String value) throws IOException {
        //1.获取表对象
        Table table = HbaseAPI.connection.getTable(TableName.valueOf(tableName));

        //2.创建put对象
        Put put = new Put(Bytes.toBytes(rowKey));

        //3.给put对象赋值
        put.addColumn(Bytes.toBytes(cf),Bytes.toBytes(cn),Bytes.toBytes(value));

        //多个数据插入
        //table.put(new List<Put>);

        //4.插入数据
        table.put(put);

    }

    //2.获取数据(get)
    public void getData(String tableName , String rowKey , String cf , String cn) throws IOException {

        //1.获取表对象
        Table table = HbaseAPI.connection.getTable(TableName.valueOf(tableName));

        //2.创建Get对象
        Get get = new Get(Bytes.toBytes(rowKey));

        //2.1 指定获取的列族
        get.addFamily(Bytes.toBytes(cf));

        //2.2 指定列族和列
        get.addColumn(Bytes.toBytes(cf),Bytes.toBytes(cn));

        //2.3 设置获取数据的版本数
        get.setMaxVersions();


        //3.获取数据
        Result result = table.get(get);

        //4.解析result并打印
        for (Cell cell : result.rawCells()) {
            //5.打印数据
            System.out.println( "CF: " + Bytes.toString(CellUtil.cloneFamily(cell)) +
                    " CN: "+ Bytes.toString(CellUtil.cloneQualifier(cell)) +
                    " Value: "+ Bytes.toString(CellUtil.cloneValue(cell))
                    );
        }

        table.close();
    }

    //3.获取数据(scan)
    public void ScanData (String tableName) throws IOException {
         //1.获取表的连接
        Table table = HbaseAPI.connection.getTable(TableName.valueOf(tableName));

        //2. 构建Scan对象
        Scan scan = new Scan();
        /*获取范围id的值*/
        //Scan scan = new Scan(Bytes.toBytes("1001"),Bytes.toBytes("1003"));

        //3.扫描表
        ResultScanner resultScanner = table.getScanner(scan);

        //4.解析resultScanner
        for (Result result : resultScanner) {

            //5.打印数据
            for (Cell cell : result.rawCells()) {
                //5.打印数据
                System.out.println( "CF: " + Bytes.toString(CellUtil.cloneFamily(cell)) +
                        " CN: "+ Bytes.toString(CellUtil.cloneQualifier(cell)) +
                        " Value: "+ Bytes.toString(CellUtil.cloneValue(cell))
                );
            }
        }

        //5.关闭资源
        table.close();
    }

    //4.删除数据
    /*
     * @author: 左先生
     * @date: 2022-01-15 17:08
     * @description:总结:
     */
    public void deleteData(String tableName , String rowKey , String cf , String cn) throws IOException {
        //1.获取表的连接
        Table table = HbaseAPI.connection.getTable(TableName.valueOf(tableName));

        //2.构建删除对象
        Delete delete = new Delete(Bytes.toBytes(rowKey));

        //2.1 设置删除的列,该设置可以删除指定的info以及列信息,进行单个删除,里面的timestamp参数可加可不加
        delete.addColumns(Bytes.toBytes(cf),Bytes.toBytes(cn),1642236880388L);

        //2.2 删除指定的列族
        //delete.addFamily(Bytes.toBytes(cf));


        //3.执行删除操作
        table.delete(delete);

        //4.关闭连接
        table.close();

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/270756.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年教程汇总 | 《小杜的生信笔记》

2023年总结 2023年即将结束&#xff0c;我们即将迎来2024年。2023年&#xff0c;我们做了什么呢&#xff1f;&#xff1f;这个是个值得深思的问题…? 12月份是个快乐且痛苦时间节点。前一段时间&#xff0c;单位需要提交2023年工作总结&#xff0c;真的是憋了好久才可以下笔…

重塑资产管理:三叠云助力企业高效运营

资产管理是企业管理中不可或缺的一环&#xff0c;它对企业的经营管理和决策起着至关重要的作用。资产管理涉及到企业的固定资产、无形资产、流动资产等各类资产&#xff0c;它们的管理情况影响着企业的经济效益和运营效率。因此&#xff0c;企业需要建立一套完善的资产管理体系…

Apache Commons Math: 面向Java的数学和统计库

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;咱们今天要聊的是Apache Commons Math这个宝藏级的Java库。为啥说它是宝藏呢&#xff1f;因为它简直就是处理数学问题的瑞士军刀&#xff0c;无论你是要搞统计分析、数值计算&#xff0c;还是解决优化问题&#…

geyser互通服基岩版进不去

Java版需要在服务器安全组开通TCP端口&#xff08;如果有宝塔&#xff0c;也需要开通&#xff09; geyser下载好的安装运行也需要开通端口&#xff0c;但是它是UDP的&#xff08;但是我同时也开启了TCP&#xff0c;可能不需要&#xff1f; Java 版玩家隧道 Java 版玩家使用 T…

VMware安装linux系统二

1、设置光驱 1.1、编辑虚拟机设置 1.2、设置虚拟机镜像 1.3、设置好后开机 2、安装Linux系统 2.1、等待安装 2.2、开始安装 2.3、选择语言&#xff0c;我选择中文 2.4、本地化不用改 2.5、软件选择一定要选&#xff0c;否则就会是默认最小安装 2.6、我这里选择的是带GUI的&am…

Windows下安装Oracle19C

官网下载oracle19c 以及客户端 官网地址&#xff1a;Software Download | Oracle 这个是要登录账号的,没有的可以注册,登录上 这个时候在点开这个官网:Database Software Downloads | Oracle 往下面滑 点了之后有个界面注意事项勾上,点下载,你就会下载: 安装oracle19c 解压安…

WebRTC概念

定义 一个实时通信标准 通话原理 媒体协商 在WebRTC中&#xff0c;参与视频通讯的双方必须先交换SDP信息&#xff0c;获得一个都支持的编码格式 网络协商 目的&#xff1a;找到一条相互通讯的链路 做法&#xff1a;获取外网IP地址映射&#xff0c;通过信令服务器交换“网…

RK3588平台开发系列讲解(AI 篇)RKNN-Toolkit2 模型的加载转换

文章目录 一、Caffe 模型加载接口二、TensorFlow 模型加载接口三、TensorFlowLite 模型加载接口四、ONNX 模型加载五、DarkNet 模型加载接口六、PyTorch 模型加载接口沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 RKNN-Toolkit2 目前支持 Caffe、TensorFlow、Tensor…

【Java JVM】Java 实例对象的访问定位

Java 程序会通过栈上的 reference 数据来操作堆上的具体对象。 但是 reference 类型在《Java虚拟机规范》里面只规定了它是一个指向对象的引用, 并没有定义这个引用应该通过什么方式去定位, 访问到堆中对象的具体位置, 所以对象访问方式也是由虚拟机实现而定的&#xff0c;主流…

【MYSQL】MYSQL 的学习教程(七)之 慢 SQL 优化思

1. 慢 SQL 优化思路 慢查询日志记录慢 SQLexplain 分析 SQL 的执行计划profile 分析执行耗时Optimizer Trace 分析详情确定问题并采用相应的措施 1. 慢查询日志记录慢 SQL 如何定位慢SQL呢&#xff1f; 我们可以通过 慢查询日志 来查看慢 SQL。 ①&#xff1a;开启慢查询日志…

Django 访问前端页面一直在转异常:ReferenceError:axios is not defined

访问&#xff1a;http://127.0.0.1:8080/ my.html 一、异常&#xff1a; 二、原因 提示&#xff1a;axios找不到&#xff01;&#xff01; 查看代码<script src"https://unpkg.com/axios/dist/axios.min.js"></script>无法访问到官网 三、解决 Using j…

Opencv学习笔记(二)图像基本操作

图像基本操作 一、边界填充 二、图像融合 三、图像阈值 四、图像平滑 五、形态学预算 1、腐蚀操作 2、膨胀操作 3、开闭运算操作 4、梯度运算 5、顶帽运算 6、黑帽运算 一、边界填充 cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borde…

鸿蒙基础-常用组件与布局(ArkTS)

实现“登录”页面 本节主要介绍“登录”页面的实现&#xff0c;页面使用Column容器组件布局&#xff0c;由Image、Text、TextInput、Button、LoadingProgress等基础组件构成。 // LoginPage.ets Entry Component struct LoginPage {...build() {Column() {Image($r(app.media…

信号优先级与安全性

问题 对于同一个进程&#xff0c;如果存在两个不同的未决实时信号&#xff0c;那么先处理谁&#xff1f; 信号优先级的概念 信号的本质是一种软中断 (中断有优先级&#xff0c;信号也有优先级) 对于同一个未决实时信号&#xff0c;按照发送先后次序递送给进程 对于不同的未…

K8S三台服务器一键部署总结

随着互联网、云计算技术的深入发展&#xff0c;为降低企业大规模云应用建设的难度和成本&#xff0c;支持云应用开发、运行与运维一体化的云应用平台软件应运而生。在数通家族中对企业集成套件的云平台开发、部署、管理、运维进行统一管理&#xff0c;实现数据集成和共享的平台…

使用Mecury人型机器人搭建VR遥操作控制平台!

概述 VR遥操作机械臂是一种将虚拟现实技术与机械臂控制相结合的系统&#xff0c;使用户可以通过虚拟现实设备操控和交互实际的机械臂。这种技术可以应用于多个领域&#xff0c;包括远程操作、培训、危险环境中的工作等。 双臂人形机器人是一种模拟人体上半身结构&#xff0c;包…

FXCM福汇官网:深入解析BOLL指标的喇叭口形态及含义

BOLL指标是一种通过布林线&#xff08;Bollinger Bands&#xff09;的上轨线、中轨线和下轨线的相互关系来判断市场趋势和波动性的技术分析工具。BOLL指标的喇叭口形态包括开口型、收口型和紧口型&#xff0c;它们各自具有独特的含义。 《FXCM福汇官网开户》 1. 开口型喇叭口…

探索 React Hooks 的世界:如何构建出色的组件(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

C/C++ BM2链表内指定区间反转

文章目录 前言题目1. 解决方案一1.1 思路阐述1.2 源码 2. 解决方案二2.1 思路阐述2.2 源码 总结 前言 这题是BM1的升级版&#xff0c;不过是把完整的链表翻转变成了指定区间。 题目 描述 将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转&#xff0c;要求时间复杂度 …

【数据结构】LRU缓存的简单模拟实现(leetcode力扣146LRU缓存)

文章目录 一、定义二、LRU模拟实现二、代码实现 一、定义 LRU是Least Recently Used的缩写&#xff0c;意思是最近最少使用&#xff0c;它是一种Cache替换算法。 Cache的容量有限&#xff0c;因此当Cache的容量用完后&#xff0c;而又有新的内容需要添加进来时&#xff0c; 就…