HBase基础知识(四):HBase API

news2024/11/28 7:43:01

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();

    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

首次使用TypeScript,报错:无法重新声明块级范围变量(声明变量报错)

前几天在书写TypeScript代码时&#xff0c;出现了声明变量报错的情况&#xff0c;具体情况如下&#xff1a; let arr: number; arr 10; console.log(arr);报错如下&#xff1a; 解决方案&#xff1a; 在配置文件tsconfig.json中&#xff0c;配置如下代码&#xff1a; { &q…

STM32F407-14.3.10-表73具有有断路功能的互补通道OCx和OCxN的输出控制位-1x000-1x111(总结)

基于表73中&#xff0c;主输出使能&#xff08;MOE1&#xff09;的8种OCx与OCxN的输出状态及波形图&#xff0c;已经单独整理输出8篇文章&#xff0c;方便需要时单独回查。 主输出使能时&#xff08;MOE1&#xff09;总结如下 通过表73中可得以下结论 1、控制位1x000与1x100…

[玩转AIGC]LLaMA2之如何跑llama2.c的chat模式

前言&#xff1a;之前我们关于llama2的相关内容主要停留在gc层面&#xff0c;没介绍chat模式&#xff0c;本文将简单介绍下llama2.c的chat模式如何跑起来。训练就算了&#xff0c;没卡训练不起来的&#xff0c;但是用CPU来对别人训练好的模型进行推理还是绰绰有余的&#xff0c…

2023-12-29 服务器开发-centos-安装php8

摘要: 2023-12-29 服务器开发-centos-安装php8 centos-安装php8 必备条件 Minimal CentOS 8 / RHEL 8User with sudo rightsInternet Connection (1) 更新系统 更新系统 $ sudo dnf update $ sudo dnf upgrade 重启系统 $ sudo reboot (2) 启用 EPEL & Remi 软件库…

Pycharm引用其他文件夹的py

Pycharm引用其他文件夹的py 方式1&#xff1a;包名设置为Sources ROOT 起包名的时候&#xff0c;需要在该文件夹上&#xff1a;右键 --> Mark Directory as --> Sources ROOT 标记目录为源码目录&#xff0c;就可以了。 再引用就可以了 import common from aoeweb impo…

lv13 内核模块动态添加新功能 6

1 动态加载法 即新功能源码与内核其它源码不一起编译&#xff0c;而是独立编译成内核的插件(被称为内核模块&#xff09;文件.ko 1.1 新功能源码与Linux内核源码在同一目录结构下时 给新功能代码配置Kconfig&#xff08;模块代码与上一级相同&#xff09; 给新功能代码改写…

2023年12月28日学习记录

目录 1、今日计划学习内容2、今日学习内容文献阅读—A Data-driven Base Station Sleeping Strategy Based on Traffic Prediction0、选这篇文章的原因1、文章的主要内容和贡献2、使用的数据集3、结果及分析4、郭郭有话说 整理流量预测的代码 3、今日学习总结 1、今日计划学习内…

[枚举涂块]画家问题

画家问题 题目描述 有一个正方形的墙&#xff0c;由N*N个正方形的砖组成&#xff0c;其中一些砖是白色的&#xff0c;另外一些砖是黄色的。Bob是个画家&#xff0c;想把全部的砖都涂成黄色。但他的画笔不好使。当他用画笔涂画第(i, j)个位置的砖时&#xff0c; 位置(i-1, j)、…

【ES】Elasticsearch常见问题与解决(持续更新)

目录 Elasticsearch常见问题 1. 集群健康问题 2. 性能问题 3. 映射问题 4. 分片问题 5. 内存问题 6. 硬件问题 7. 配置问题 8. 安全问题 9. 网络问题 10. 版本不兼容 Elasticsearch日常使用小结 【Q】离线告警&#xff0c;有IP已离线 【Q】统计某个应用的某个索引…

tcp 乱序度量与丢包标记

传统 tcp 以序列号差度量乱序&#xff0c;比如 1, 2, 3, 4, 6, 7, 8, 5 这个序列的 5 延后了 3 个段&#xff0c;就称这个序列的乱序度为 3。 如果乱序度为 m&#xff0c;则序列 n, n 1 k, n 1 k r, …, n 1 k r x 中&#xff0c;只要 (n 1 k r x) - (n 1) k …

maven中dependencyManagement标签

简介 dependencyManagement正如其名&#xff0c;用于项目依赖的统一管理。 在父项目中的pom.xml文件中加入dependencyManagement标签即可完成依赖版本的声明。在声明完成后&#xff0c;子项目&#xff08;module&#xff09;中引用相同的依赖时可以不指定version标签自动引入…

音频修复和增强软件:iZotope RX 10 (Win/Mac)中文汉化版

iZotope RX 是一款专业的音频修复和增强软件&#xff0c;一直是电影和电视节目中使用的行业标准音频修复工具&#xff0c;iZotope能够帮助用户对音频进行制作、后期合成处理、混音以及对损坏的音频进行修复&#xff0c;再解锁更多功能之后还能够对电影、游戏、电视之中的音频进…

使用css实现 Typora markdown 标题自动编号

第一&#xff0c;找到主题文件夹 第二&#xff0c;复制下面代码放入 AutoNumber.css文件中 body {counter-reset: h1; }#write h1, .markdown-section h1 {counter-reset: h2; }#write h2, .markdown-section h2 {counter-reset: h3; }#write h3, .markdown-section h3 {counte…

YOLOv5改进 | 2023注意力篇 | FocusedLinearAttention聚焦线性注意力

一、本文介绍 本文给大家带来的改进机制是FLAttention&#xff08;聚焦线性注意力&#xff09;是一种用于视觉Transformer模型的注意力机制(但是其也可以用在我们的YOLO系列当中从而提高检测精度)&#xff0c;旨在提高效率和表现力。其解决了两个在传统线性注意力方法中存在的…

网络攻防中应该掌握的进阶工具udp2raw,通过raw socket给UDP包加上TCP或ICMP header,进而绕过UDP屏蔽或QoS

网络攻防中应该掌握的进阶工具udp2raw,通过raw socket给UDP包加上TCP或ICMP header,进而绕过UDP屏蔽或QoS。 udp2raw tunnel,通过raw socket给UDP包加上TCP或ICMP header,进而绕过UDP屏蔽或QoS,或在UDP不稳定的环境下提升稳定性。可以有效防止在使用kcptun或者finalspeed的…

企业级依赖管理: 深入解读 Maven BOM

一、背景 当开发者在一个大型项目中使用 Maven 进行依赖管理时&#xff0c;项目往往会包含多个模块或子项目&#xff0c;并且这些模块会共享相同的依赖项。但是&#xff0c;不同模块可能会独立地指定各自的依赖版本&#xff0c;这可能导致以下问题&#xff1a; 依赖版本不一致…

Activiti工作流框架学习笔记(二)之springboot2.0整合工作流Activiti6.0

文/朱季谦 以前在工作当中做过不少与工作流Activiti有关的工作&#xff0c;当时都是spring集成activiti5.22的项目&#xff0c;现在回过头去看&#xff0c;其实版本已经稍微老了&#xff0c;因此&#xff0c;基于先前的工作经验&#xff0c;决定用较新版本的技术来重新梳理下以…

字符串转成时间的SQL,一个多种数据库通用的函数

select date 2010-10-06 from dual; date 函数&#xff0c;此函数适用于&#xff1a; 1.MySQL数据库 2.Oracle数据库 3.达梦数据库 4.人大金仓数据库

NFC物联网构建移动智能仓储系统解决方案

仓储管理作为企业研发生产活动的重要环节&#xff0c;正朝着标准化、信息化方向发展。高新作为典型的资产密集 技术密集型企业,原料样品为代表的资产数量巨大品种繁杂&#xff0c;对仓库管理的实时性及准确性要求较高。传统的人工作业模式和管理方法逐渐难以满足仓储管理对高效…

【 YOLOv5】目标检测 YOLOv5 开源代码项目调试与讲解实战(4)-自制数据集及训练(使用makesense标注数据集)

如何制作和训练自己的数据集 看yolov5官网创建数据集1.搜索需要的图片2.创建标签标注数据集地址&#xff1a;放入图片后选择目标检测创建文档&#xff0c;每个标签写在单独的一行上传结果此处可以编辑类别把车框选选择类别即可导出数据 3.新建一个目录放数据写yaml文件 4. 测试…