大数据学习栈记——HBase操作(shell java)

本文介绍HBase在shell终端的常见操作以及如何利用java api操作HBase,操作系统:Ubuntu24.04

参考:

https://blog.51cto.com/u_16099228/8016429

https://blog.csdn.net/m0_37739193/article/details/73618899

https://cloud.tencent.com/developer/article/1936188

启动HBase

Hbase操作主要包括两种模式:通过Shell输入命令或者通过编程语言(Java、Python等)调用API

首先启动Hbase,顺序为:

启动Hadoop → 启动Zookeeper → 启动HBase

start-all.sh

zkp start

start-hbase.sh

HBase Shell模式

进入HBase Shell模式,在hadoop101:

hbase shell   #进入HBase shell 命令行模式

如果需要退出HBase Shell模式,在hadoop101上执行:

exit

如果在运行过程中出现了超时的日志,可以忽略,打回车即可

1. 在HBase中创建表(Shell模式)

假设这里要创建一个表student,该表包含Sname、Ssex、Sage、Sdept、course等字段。需要注意的是,在关系型数据库(比如MySQL)中,需要首先创建数据库,然后再创建表,但是,在HBase数据库中,不需要创建数据库,只要直接创建表就可以。按照PPT教程,在HBase中创建student表的Shell命令如下:

create 'student','Sname','Ssex','Sage','Sdept','course'

这里的各个字符表示的是列族,一个HBase表最多可以有32个列族。超过这个限制会导致表的创建或修改失败,但通常情况下不需要那么多的列族。列族多的话,会给HBase带来很多问题(这个是一个常见的考点!)。

另外,仔细体会一下,HBase建表时,仅仅建立了列族,没有建立列。列是在put数据的时候才出现的。

2. 在HBase中查看表信息(Shell模式)

创建完“student”表后,可通过describe命令查看“student”表的基本信息。

describe ‘student’

可以使用list命令查看当前HBase数据库中已经创建了哪些表,命令如下:

list

3. 在HBase中添加数据(Shell模式)

可以用Shell命令手工插入数据,命令如下:

put 'student','95001','Sname','LiYing'

HBase 使用 put 命令可以向数据表中插入一行新的数据,或者覆盖指定行的数据。put 命令一次只能插入一个单元格的数据:

put 'namespace:table','RowKey','CF:CQ','value', timestamp

  • 第一个参数 namespace:table 为指定命名空间下的表名。
  • 第二个参数RowKey为行键的名称,字符串类型。
  • 第三个参数CF:CQ为列族和列的名称。列族名必须是已经创建的,否则 HBase 会报错;列名是临时定义的,因此列族里的列是可以随意扩展的。
  • 第四个参数value为单元格的值。在 HBase 里,所有数据都是字符串的形式。
  • 最后一个参数timestamp为时间戳,如果不设置时间戳,则系统会自动插入当前的时间作为时间戳。

继续添加4个单元格的数据,用来记录LiYing同学的相关信息,命令如下:

put 'student','95001','Ssex','male'

put 'student','95001','Sage','22'

put 'student','95001','Sdept','CS'

put 'student','95001','course:math','80'

解释:这里的course:math表示在course列族下面新建了一个math列,成绩为80分

4. 删除表(Shell模式)

删除表需要分两步操作,第一步先让该表不可用,第二步删除表。比如,要删除student表,可以使用如下命令:

disable 'student' 

drop 'student'

7. 查询历史数据(Shell模式)

为了查询历史数据,这里创建一个teacher表,首先,在创建表的时候,需要指定保存的版本数(假设指定为5),命令如下:

create 'teacher',{NAME=>'username',VERSIONS=>5}

创建表的完整语法:

create <table>, {NAME => <family>,VERSIONS => <VERSIONS>}

然后,插入数据,并更新数据,使其产生历史版本数据,需要注意的是,这里插入数据和更新数据都是使用put命令,具体如下:

put 'teacher','91001','username','Mary'

put 'teacher','91001','username','Mary1'

put 'teacher','91001','username','Mary2'

put 'teacher','91001','username','Mary3'

put 'teacher','91001','username','Mary4'

put 'teacher','91001','username','Mary5'

查询时,默认情况下回显示当前最新版本的数据,如果要查询历史数据,需要指定查询的历史版本数,由于上面设置了保存版本数为5,所以,在查询时制定的历史版本数的有效取值为1到5,具体命令如下:

get 'teacher','91001',{COLUMN=>'username',VERSIONS=>5}

get 'teacher','91001',{COLUMN=>'username',VERSIONS=>3}

HBase Java API

1. 导入maven依赖

首先,找到hbase的jar包

输入HBase后,找到很多包

通过https://blog.51cto.com/u_16213369/9390696这篇文章和PPT中的源代码,感觉我们是需要HBase Client包,点击Apache HBase Client,

我安装的HBase是2.5.8版本,hadoop是3.3.6,应该就是2.5.8-hadoop3这个配置吧

在pom.xml里添加

<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->

<dependency>

    <groupId>org.apache.hbase</groupId>

    <artifactId>hbase-client</artifactId>

    <version>2.5.8-hadoop3</version>

</dependency>

随后刷新

2. 与HBase建立连接(Java模式)

参考:

https://www.cnblogs.com/yxym2016/p/14698745.html

HBase学习四之JAVA编程_tabledescriptorbuilder-CSDN博客

在网上找了一个模板,简化了一下,并且按照我的配置设置了参数。代码如下:

package 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;public class TestHBase {public static void main(String[] args) {try {// 获取配置文件信息Configuration conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum", "hadoop101,hadoop102,hadoop103");   // 我的三台zookeeper服务器是master、node1和node2// 建立连接,获取connection对象Connection connection = ConnectionFactory.createConnection(conf);// 获取admin对象,用于建表、删表等Admin admin = connection.getAdmin();/*在中间编写代码即可*/// 关闭资源admin.close();connection.close();} catch (IOException e) {e.printStackTrace();}}
}

3. 在HBase建立表和增加数据(Java模式)

代码如下:

package 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;
import java.util.Arrays;
import java.util.Collection;public class Database {public static void main(String[] args) {try {// 获取配置文件信息Configuration conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum", " hadoop101,hadoop102,hadoop103");  // 我的三台zookeeper服务器是master、node1和node2// 建立连接,获取connection对象Connection connection = ConnectionFactory.createConnection(conf);// 获取admin对象Admin admin = connection.getAdmin();// 准备创建一张student表,有两个列族info和course// 构建表描述构建器,一张表只需要一个TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf("student"));// 构建列族描述构建器,每个列族需要一个ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder1 = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("info"));ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder2 = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("course"));// 构建列族描述,每个列族描述构建器可以构建一个ColumnFamilyDescriptor columnFamilyDescriptor1 = columnFamilyDescriptorBuilder1.build();ColumnFamilyDescriptor columnFamilyDescriptor2 = columnFamilyDescriptorBuilder2.build();// 添加列族,由于有多个列族,所以需要先构造一个Connection对象,然后使用tableDescriptorBuilder.setColumnFamilies()方法Collection<ColumnFamilyDescriptor> families = Arrays.asList(columnFamilyDescriptor1, columnFamilyDescriptor2);tableDescriptorBuilder.setColumnFamilies(families);// 如果只有一个列族,就用下面这个方法// tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptor);// 构建表描述TableDescriptor tableDescriptor = tableDescriptorBuilder.build();// 创建表admin.createTable(tableDescriptor);// 获得表student的table对象TableName tableName = TableName.valueOf("student");Table table = connection.getTable(tableName);// 定义第一个row keyString rowKey1 = "0001";// 构建Put对象,对应put命令Put put = new Put(Bytes.toBytes(rowKey1));// 添加列,第一个参数是列族名,第二个参数是列名,第三个参数是值put.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"), Bytes.toBytes("tom"));put.addColumn(Bytes.toBytes("info"), Bytes.toBytes("gender"), Bytes.toBytes("male"));put.addColumn(Bytes.toBytes("course"), Bytes.toBytes("math"), Bytes.toBytes("80"));// 将数据插入数据库table.put(put);// 关闭表table.close();// 关闭资源admin.close();connection.close();} catch (IOException e) {e.printStackTrace();}}
}

使用下列shell命令查看数据,发现数据成功写入HBase中的student表

get 'student','0001'

4. 在HBase查询数据(Java模式)

代码如下:

package 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;
import java.util.List;public class Query {public static void main(String[] args) {try {// 获取配置文件信息Configuration conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum", "hadoop101,hadoop102,hadoop103");  // 我的三台zookeeper服务器是master、node1和node2// 建立连接,获取connection对象Connection connection = ConnectionFactory.createConnection(conf);// 获取admin对象,用于建表、删表等Admin admin = connection.getAdmin();// 获得表student的table对象TableName tableName = TableName.valueOf("student");Table table = connection.getTable(tableName);// 获得rowkey为0001的get对象Get get = new Get(Bytes.toBytes("0001"));// 得到查询结果Result result = table.get(get);// 得到单元格列表List<Cell> cells = result.listCells();// 输出rowkeySystem.out.println("rowKey= " + Bytes.toString(result.getRow()));// 遍历所有的cellfor (Cell cell : cells) {// 输出列名System.out.print(Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength()) + ":");// 输出单元格的值System.out.println(Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));}// 关闭表格table.close();// 关闭资源admin.close();connection.close();} catch (IOException e) {e.printStackTrace();}}
}

执行完成后,在IDEA的控制台可以看到下面的信息,成功输出rowkey为0001的记录。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【DETR】训练自己的数据集以及YOLO数据集格式(txt)转化成COCO格式(json)

目录 1.DETR介绍2.数据集处理3.转化结果可视化4.数据集训练4.1修改pth文件4.2类别参数修改4.3训练 5.成功运行&#xff01;6.参考文献 1.DETR介绍 DETR(Detection with TRansformers)是基于transformer的端对端目标检测&#xff0c;无NMS后处理步骤&#xff0c;无anchor。 代码…

HashMap学习总结——JDK17

文章目录 HashMap构造方法HashMap(int initialCapacity, float loadFactor)loadFactor 加载因子initialCapacity 初始容量tableSizeFor(int cap) 计算前导零 HashMap(Map<? extends K, ? extends V> m) put(K key, V value)hash(Object key) 求hash值putVal(int hash, …

Linux:进程信号

✨✨所属专栏&#xff1a;Linux✨✨ ✨✨作者主页&#xff1a;嶔某✨✨ Linux&#xff1a;进程信号 在讲信号之前&#xff0c;我们先来从生活中的事情来确定信号的一些特性。 我在网上买了商品&#xff0c;我在等快递。但是在快递没来之前我知道快递来的时候我应该怎么处理。…

c#知识点补充2

1.非静态类能否调用静态方法可以 2.对string类型扩展方法&#xff0c;如何进行 类用静态类&#xff0c;参数是this 调用如下 3.out的用法 一定要给a赋值 这种写法不行 这样才行 4.匿名类 5.委托的使用 无论是匿名委托&#xff0c;还是具命委托&#xff0c;委托实例化后一定要…

0322-数据库、前后端

前端 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>Insert title here</title> <script srcjs/jquery-3.7.1.min.js></script> <script> //jquaryajax发起请求 //传参形式不同 post用data{}…

Spring Boot02(数据库、Redis)02---java八股

MySQL和Redis的区别&#xff1f; 1. 数据类型&#xff1a; MySQL是一种关系型数据库&#xff0c;表结构化存储&#xff0c;使用 SQL 查询。支持表、列、行等结构化数据。 Redis是一种基于内存的缓存系统&#xff0c;支持多种数据结构&#xff0c;如字符串、哈希表、列表、集合、…

VulnHub-Web-Machine-N7通关攻略

一、信息收集 第一步&#xff1a;确定靶机IP为192.168.0.107 第二步&#xff1a;扫描后台及开放端口 第三步&#xff1a;进行敏感目录及文件扫描 http://192.168.0.107/index.html (CODE:200|SIZE:1620) http://192.168.0.107/server-status (CODE:403|SIZ…

【AI News | 20250322】每日AI进展

AI Repos 1、DeTikZify 可以把草图或图形转换成TikZ代码的模型&#xff0c;可用来绘制复杂的科学图表&#xff0c;输入草图或文字描述即可转换成TikZ代码。DeTikZify强大的地方在于它能理解图表的语义信息&#xff0c; 能识别图表中的不同组成部分及其含义&#xff0c;比如坐标…

三主热备架构

1.要求 角色主机名软件IP地址用户client192.168.72.90keepalivedvip192.168.72.100masterserverAkeepalived, nginx192.168.72.30backupserverBkeepalived, nginx192.168.72.31backupserverCkeepalived, nginx192.168.72.32webtomcat1tomcat192.168.72.41webtomcat2tomcat192.1…

LiteratureReading:[2023] GPT-4: Technical Report

文章目录 一、文献简明&#xff08;zero&#xff09;二、快速预览&#xff08;first&#xff09;1、标题分析2、作者介绍3、引用数4、摘要分析&#xff08;1&#xff09;翻译&#xff08;2&#xff09;分析 5、总结分析&#xff08;1&#xff09;翻译&#xff08;2&#xff09;…

java使用Apache POI 操作word文档

项目背景&#xff1a; 当我们对一些word文档&#xff08;该文档包含很多的标题比如 1.1 &#xff0c;1.2 &#xff0c; 1.2.1.1&#xff0c; 1.2.2.3&#xff09;当我们删除其中一项或者几项时&#xff0c;需要手动的对后续的进行补充。该功能主要是对标题进行自动的补充。 具…

OpenHarmony 开源鸿蒙北向开发——linux使用make交叉编译第三方库

这几天搞鸿蒙&#xff0c;需要编译一些第三方库到鸿蒙系统使用。 头疼死了&#xff0c;搞了一个多星期总算搞定了。 开贴记坑。 一、SDK下载 1.下载 在linux下使用命令 wget https://cidownload.openharmony.cn/version/Master_Version/OpenHarmony_5.1.0.54/20250313_02…

SVN简明教程——下载安装使用

SVN教程目录 一、开发中的实际问题二、简介2.1 版本控制2.2 Subversion2.3 Subversion的优良特性2.4 工作原理2.5 SVN基本操作 三、Subversion的安装与配置1. 服务器端程序版本2. 下载源码包3. 下载二进制安装包4. 安装5. 配置版本库① 为什么要配置版本库&#xff1f;② 创建目…

OpenCV旋转估计(1)用于估计图像间仿射变换关系的类cv::detail::AffineBasedEstimator

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 基于仿射变换的估计器。 这种估计器使用匹配器估算的成对变换来为每个相机估算最终的变换。 cv::detail::AffineBasedEstimator 是 OpenCV 库中…

大数据学习栈记——HBase安装

本文介绍大数据技术中流行的非关系型数据库HBase的安装&#xff0c;操作系统&#xff1a;Ubuntu24.04 安装Zookeeper 安装HBase前需要先安装Zookeeper&#xff0c;HBase使用Zookeeper作为其分布式协同服务&#xff0c;存储了HBase集群的元数据信息&#xff0c;并提供了分布式…

SpringBoot+VUE(Ant Design Vue)实现图片下载预览功能

目录 背景 1.后端实现下载接口 2.前端请求实现 第一步&#xff1a;导入api 第二步&#xff1a;请求接口 3.前端展示实现 4.实现效果展示 5.总结 背景 这段时间通过SpringBootVUE(Ant Design Vue)框架做了一个项目&#xff0c;但是在图片下载&#xff0c;展示的时候在网…

Java 推送钉钉应用消息

前言&#xff1a; 本文的目的是通过手机号获取钉钉成员的userid&#xff0c;实现钉钉应用的消息推送。 一、创建钉钉应用 登录钉钉开放平台 二、应用相关凭证 需要获取 Client ID (原 AppKey 和 SuiteKey) Client Secret (原 AppSecret 和 SuiteSecret) App ID 原企业内部…

SpringCloud介绍

什么是SpringCloud&#xff1f; SpringCloud 是分布式微服务架构下的一站式解决方案&#xff0c;是各个微服务架构落地技术的集合体&#xff0c;俗称微服务全家桶。 官方介绍&#xff1a; SpringCloud是基于SpringBoot提供了一套微服务解决方案&#xff0c;包括服务注册与发现…

YOLOv11 目标检测

本文章不再赘述anaconda的下载以及虚拟环境的配置&#xff0c;博主使用的python版本为3.8 1.获取YOLOv11的源工程文件 链接&#xff1a;GitHub - ultralytics/ultralytics: Ultralytics YOLO11 &#x1f680; 直接下载解压 2.需要自己准备的文件 文件结构如下&#xff1a;红…

【Linux】——环境变量与进程地址空间

文章目录 环境变量环境变量的概念常见的环境变量PATH相关指令 main的三个参数前两个参数第三个参数 程序地址空间进程地址空间 环境变量 环境变量的概念 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数&#xff0c;将来会以shell的形式传递给所有进程&…