当前位置: 首页 > news >正文

Hbase 常用shell操作

目录

1、创建表

1.1、启动HBase Shell

1.2、创建表

1.3、查看表

1.4、删除表

2、插入数据

2.1、put命令

3、查看数据

3.1、get命令

3.2、查询数据中文显示

4、更新数据

4.1、使用put来更新数据

5、删除数据

5.1、delete命令

5.2、删除指定列的数据

5.3、deleteall命令删除整行数据

6、清空表

6.1、tuncate命令

7、批量导入数据集

8、扫描操作

8.1、scan命令

8.2、示例1:查询学生表中的所有数据

8.3、示例2:查询学生数据只显示1条

8.4、示例3:查询学生姓名和年龄

8.5、示例4:查询指定学生id的姓名和年龄

9、过滤器

9.1、HBase中的过滤器

9.2、过滤器的使用

9.3、示例1:使用RowFilter查询指定学生id的信息

9.4、示例2:查询在校状态为1,且年龄大于21的学生信息

通过shell的方式来维护和管理HBase。例如:执行建表语句、执行增删改查操作等等。

需求:有以下学生数据,要将这样的一些数据保存到HBase中。

  • 下面将使用HBase shell来进行以下操作:
    • 1.创建表
    • 2.添加数据
    • 3.更新数据
    • 4.删除数据
    • 5.查询数据

1、创建表

  • 在HBase中,所有的数据也都是保存在表中的。要将学生数据保存到HBase中,首先需要将表创建出来。

1.1、启动HBase Shell

  • HBase的shell其实JRuby的IRB(交互式的Ruby),但在其中添加了一些HBase的命令。
  • 启动HBase shell:

hbase shell

1.2、创建表

  • 语法:

create '表名','列蔟名'...

  • 示例:

-- 创建学生表,表名为student_info,该表有一个列蔟为C1
create 'student_info','C1';

注意:

  • create要写成小写
  • 一个表可以包含若干个列蔟
  • 命令解析:调用hbase提供的ruby脚本的create方法,传递两个字符串参数
  • 通过下面文档可以看到每个命令都是一个ruby脚本
    • https://github.com/apache/hbase/tree/branch-2.1/hbase-shell/src/main/ruby/shell/commands

1.3、查看表

list


1.4、删除表

  • 要删除某个表,必须要先禁用表

1、禁用表

disable "表名"

2、删除表

drop "表名"

示例:删除student_info表

disable "student_info"
drop "student_info"

2、插入数据

往学生表中添加以下数据。

学号

姓名

性别

年龄

入学时间

在校情况

0001

张三

25

2023-02-06

1

2.1、put命令

  • HBase中的put命令,可以用来将数据保存到表中。但put一次只能保存一个列的值。以下是put的语法结构:

put '表名','ROWKEY','列蔟名:列名','值'

添加以上数据,需要执行以下操作:

put 'student_info','0001','C1:stuno','0001'
put 'student_info','0001','C1:name','张三'
put 'student_info','0001','C1:sex','男'
put 'student_info','0001','C1:age',25
put 'student_info','0001','C1:enrollment_time','2023-02-06'
put 'student_info','0001','C1:state',1

3、查看数据

3.1、get命令

  • 在HBase中,可以使用get命令来获取单独的一行数据。语法:

get '表名','rowkey'

示例:查询指定学生号的数据

get 'student_info','0001'

3.2、查询数据中文显示

  • 在HBase shell中,如果在数据中出现了一些中文,默认HBase shell中显示出来的是十六进制编码。要想将这些编码显示为中文,需要在get命令后添加一个属性:{FORMATTER => 'toString'}

get 'student_info','0001', {FORMATTER => 'toString'}

注意:

  • { key => value},这个是Ruby语法,表示定义一个HASH结构
  • FORMATTER要使用大写
  • 在Ruby中用{}表示一个字典,类似于hashtable,FORMATTER表示key、’toString’表示值

4、更新数据

4.1、使用put来更新数据

  • 数据存在属于更新操作,数据不存在数据插入操作。

示例:更新张三的年龄为20

put 'student_info', '0001', 'C1:age', 20

注意:

  • HBase中会自动维护数据的版本
  • 每当执行一次put后,都会重新生成新的时间戳

5、删除数据

  • 删除数据的时候,其实HBase不是真的直接把数据删除掉,而是给某个列设置一个标志,然后查询数据的时候,有这个标志的数据,就不显示出来
  • 什么时候真正的删除数据呢?
    • 后台进程,专门来执行删除数据的操作

5.1、delete命令

  • 执行delete的时候
  • 如果表中的某个列簇有对一个列存在几次修改,它会删除最近的一次修改
  • 默认是保存1个保存的时间戳
  • 有一个version属性
  • 在HBase中,可以使用delete命令来将一个单元格的数据删除。语法格式如下:

delete '表名', 'rowkey', '列蔟:列'

  • 注意:此处HBase默认会保存多个时间戳的版本数据,所以这里的delete删除的是最新版本的列数据。

5.2、删除指定列的数据

delete 'student_info','0001','C1:age'

5.3、deleteall命令删除整行数据

  • deleteall命令可以将指定rowkey对应的所有列全部删除。语法:

deleteall '表名','rowkey'

示例:删除rowkey为0001的数据

deleteall 'student_info','0001'

6、清空表

6.1、tuncate命令

  • 原理:
    • 1、先将表禁用
    • 2、然后再删除表
    • 3、最后再创建表
  • truncate命令用来清空某个表中的所有数据。语法:

truncate "表名"

示例:清空student_info的所有数据

truncate 'student_info'

7、批量导入数据集

  • 在数据集/ student_info.txt 中,有一份这样的HBase数据集,我们需要将这些指令放到HBase中执行,将数据导入到HBase中。
  • 可以看到这些都是一堆的put语句。那么如何才能将这些语句全部执行呢?

  • 1、上传命令文件将该数据集文件上传到指定的目录中

cd /hbase/data
rz

  • 2、执行命令

hbase shell /hbase/data/student_info.txt

8、扫描操作

8.1、scan命令

  • 在HBase,我们可以使用scan命令来扫描HBase中的表。语法:

scan '表名'

8.2、示例1:查询学生表中的所有数据

注意:scan扫描非常耗时,要避免scan一张大表,生产环境中禁用。

scan 'student_info',{FORMATTER => 'toString'}

8.3、示例2:查询学生数据只显示1条

scan 'student_info', {LIMIT => 1, FORMATTER => 'toString'}

8.4、示例3:查询学生姓名和年龄

scan 'student_info', {COLUMNS => ['C1:name', 'C1:age'], FORMATTER => 'toString'}

  • 注意:
    • [‘C1:name’, …]在Ruby中[]表示一个数组

8.5、示例4:查询指定学生id的姓名和年龄

  • 要查询指定ROWKEY的数据,需要使用ROWPREFIXFILTER,用法为:

scan '表名', {ROWPREFIXFILTER => 'rowkey'}

示例实现命令如下:

scan 'student_info', {ROWPREFIXFILTER => '0001', COLUMNS => ['C1:name', 'C1:age'], FORMATTER => 'toString'}

9、过滤器

  • 在HBase中,如果要对海量的数据来进行查询,当基本的操作无法实现时。此时,需要借助HBase中的高级语法——Filter来进行查询。Filter可以根据列簇、列、版本等条件来对数据进行过滤查询。
  • 因为在HBase中,主键、列、版本都是有序存储的,所以借助Filter,可以高效地完成查询。当执行Filter时,HBase会将Filter分发给各个HBase服务器节点来进行查询。
  • HBase中的过滤器也是基于Java开发的,只不过在Shell中,是使用基于JRuby的语法来实现的交互式查询。以下是HBase 2.2的JAVA API文档。
    • Apache HBase 2.2.3 API

9.1、HBase中的过滤器

  • 在HBase的shell中,通过show_filters指令,可以查看到HBase中内置的一些过滤器。

show_filters

  • 过滤器进行分类

rowkey

过滤器

RowFilter

实现行键字符串的比较和过滤

PrefixFilter

rowkey前缀过滤器

KeyOnlyFilter

只对单元格的键进行过滤和显示,不显示值

FirstKeyOnlyFilter

只扫描显示相同键的第一个单元格,其键值对会显示出来

InclusiveStopFilter

替代 ENDROW 返回终止条件行

列过滤器

FamilyFilter

列簇过滤器

QualifierFilter

列标识过滤器,只显示对应列名的数据

ColumnPrefixFilter

对列名称的前缀进行过滤

MultipleColumnPrefixFilter

可以指定多个前缀对列名称过滤

ColumnRangeFilter

过滤列名称的范围

值过滤器

ValueFilter

值过滤器,找到符合值条件的键值对

SingleColumnValueFilter

在指定的列蔟和列中进行比较的值过滤器

SingleColumnValueExcludeFilter

排除匹配成功的值

其他过滤器

ColumnPaginationFilter

对一行的所有列分页,只返回 [offset,offset+limit] 范围内的列

PageFilter

对显示结果按行进行分页显示

TimestampsFilter

时间戳过滤,支持等值,可以设置多个时间戳

ColumnCountGetFilter

限制每个逻辑行返回键值对的个数,在 get 方法中使用

DependentColumnFilter

允许用户指定一个参考列或引用列来过滤其他列的过滤器

Java API官方地址:Apache HBase 4.0.0-alpha-1-SNAPSHOT API

9.2、过滤器的使用

  • 过滤器一般结合scan命令来使用。打开HBase的JAVA API文档。找到RowFilter的构造器说明,可以看到使用格式如下:

scan '表名', { Filter => "过滤器(比较运算符, '比较器表达式')” }

  • 比较运算符

比较运算符

描述

=

等于

>

大于

>=

大于等于

<

小于

<=

小于等于

!=

不等于

  • 比较器

比较器

描述

BinaryComparator

匹配完整字节数组

BinaryPrefixComparator

匹配字节数组前缀

BitComparator

匹配比特位

NullComparator

匹配空值

RegexStringComparator

匹配正则表达式

SubstringComparator

匹配子字符串

  • 比较器表达式
    • 基本语法:比较器类型:比较器的值

比较器

表达式语言缩写

BinaryComparator

binary:值

BinaryPrefixComparator

binaryprefix:值

BitComparator

bit:值

NullComparator

null

RegexStringComparator

regexstring:正则表达式

SubstringComparator

substring:值

9.3、示例1:使用RowFilter查询指定学生id的信息

分析:

  • 1.因为要学生id就是student_info表的rowkey,所以,应该使用rowkey过滤器来过滤
  • 2.通过HBase的JAVA API,找到RowFilter构造器

  • 通过上图,可以分析得到,RowFilter过滤器接受两个参数,
    • op——比较运算符
    • rowComparator——比较器
  • 所以构建该Filter的时候,只需要传入两个参数即可

实现命令如下:

scan 'student_info', {FILTER => "RowFilter(=,'binary:0001')"}

9.4、示例2:查询在校状态为1,且年龄大于21的学生信息

  • 1、查询在校状态为1

SingleColumnValueFilter('C1', 'state', = , 'binary:1')

  • 2、查询年龄大于21的学生信息

SingleColumnValueFilter('C1', 'age', > , 'binary:21')

  • 特别注意:使用SingleColumnValueFilter过滤器要过滤的列必须存在,如果不存在,那么这些列不存在的数据也会返回。如果不想让这些数据返回,做如下设置即可

SingleColumnValueFilter('C1', 'age', > , 'binary:21',true, true)

  • 3、组合查询

scan 'student_info', {FILTER => "SingleColumnValueFilter('C1', 'state', = , 'binary:1') AND SingleColumnValueFilter('C1', 'age', > , 'binary:21')", FORMATTER => 'toString'}

  • 注意:
    • HBase shell中比较默认都是字符串比较,所以如果是比较数值类型的,会出现不准确的情况
    • 例如:在字符串比较中3是比21大的

相关文章:

Hbase 常用shell操作

目录 1、创建表 1.1、启动HBase Shell 1.2、创建表 1.3、查看表 1.4、删除表 2、插入数据 2.1、put命令 3、查看数据 3.1、get命令 3.2、查询数据中文显示 4、更新数据 4.1、使用put来更新数据 5、删除数据 5.1、delete命令 5.2、删除指定列的数据 5.3、delete…...

数据库被攻击后出现1044 - access denied for user ‘root‘@‘% ‘ to database table

MySQL数据库被攻击后&#xff0c;数据库全部被删除&#xff0c;并且加一个一个勒索的数据&#xff0c;向我索要btc&#xff0c; 出现这个问题就是我的数据库密码太简单了&#xff0c;弱密码&#xff0c;被破解了&#xff0c;并且把我权限也给修改了 导致我操作数据库时&#…...

在哪里打印资料比较便宜

在数字时代&#xff0c;我们常常需要在各种文档、资料之间穿梭&#xff0c;然而&#xff0c;有时候我们需要的并不是数字版&#xff0c;而是纸质版。那么&#xff0c;在哪里打印资料比较便宜呢&#xff1f; 琢贝云打印以其超低的价格&#xff0c;优质的打印服务&#xff0c;赢…...

leetcode 2606.找到最大开销的子字符串

思路&#xff1a;dp 这道题是不是很像最大子数组和那道题呢?从这里我们其实能看出来一类题的蹊跷规律来&#xff1a; 也就是说&#xff0c;在涉及到子字符串&#xff0c;子数组这样的字眼的时候&#xff0c;并且有最值问题&#xff0c;我们可以基本上确定是动态规划&#xf…...

超标量处理器设计:重排序缓存(ROB)

★超标量处理器的很多地方用到了重排序缓存&#xff0c;但是我对它不是很了解&#xff0c;所以我整理一下重排序缓存的知识点。 重排序缓存(ROB)在确保乱序执行的指令能够正确地完成和提交(Commit)&#xff0c;也可以用来寄存器重命名。 ROB是一个先进先出的表&#xff0c;每个…...

nginx常用内置变量

名称说明$arg_name请求中的name参数$args请求中的参数$content_lengthhttp请求信息里的"Content-Length"$content_type请求信息里的"Content-Type"$host请求信息中的"Host"&#xff0c;如果请求中没有Host&#xff0c;则等于设置的服务器名$host…...

MySQL技能树学习——数据库组成

数据库组成&#xff1a; 数据库是一个组织和存储数据的系统&#xff0c;它由多个组件组成&#xff0c;这些组件共同工作以确保数据的安全、可靠和高效的存储和访问。数据库的主要组成部分包括&#xff1a; 数据库管理系统&#xff08;DBMS&#xff09;&#xff1a; 数据库管理系…...

OpenCV入门1:Python基础编程

目录 环境配置 Python基础语法 import 与 from...import If ... Else 语句 While 循环 For 循环 集合数据类型 列表 函数 类和对象 环境配置 详情请参考&#xff1a;Pycharm环境配置完整教程 Python基础语法 import 与 from...import 在 python 用 import 或者 f…...

C++ Builder XE EnumWindowsProc遍历所有窗口的名称

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) { // 这里可以添加你的处理逻辑 // 例如&#xff0c;将句柄添加到列表中或者其他操作 // 这里我们仅仅输出到调试窗口 OutputDebugString(L"枚举窗口句柄: "); char windowHandle[10];…...

Qt QInputDialog详解

1.简介 QInputDialog是一个对话框类&#xff0c;用于从用户那里获取一个单一的值。这个值可以是字符串、数字、或者一个列表中的选项。QInputDialog提供了一个方便的方式来快速创建一个输入对话框&#xff0c;无需自己从头开始构建。 QInputDialog支持多种输入类型&#xff1…...

最新盘点!2024年20大好用的项目管理软件(后续持续更新)

项目管理软件&#xff0c;作为一种高效的项目管理工具&#xff0c;正逐渐成为企业运营中不可或缺的一环。它包括任务分配、进度跟踪、团队协作、风险预测等多个方面&#xff0c;为企业提供了全方位的项目管理解决方案。 在如今竞争激烈的市场环境下&#xff0c;企业要想在有限…...

Linux:配置客户端默认autofs服务

Linux&#xff1a;配置客户端autofs服务 安装autofs软件 [rootserver200 ~]# dnf install autofs -y开启并设置开机自启autofs服务 [rootserver200 ~]# systemctl enable --now autofs访问默认autofs挂载机制 当autofs启动后系统默认会在/net目录中访问nfs服务器 [rootser…...

Kotlin版本的Gradle全局配置init.gradle.kts及参考文档

工欲善其事&#xff0c; 必先利其器。 文章目录 init.gradle.ktsGroovy版本的init.gradle其他有用的settings.gradle.ktskotlin 与 compose 版本对应关系agp 与 gradle 版本对应关系gradle下载器 直接在.gradle文件夹下添加文件init.gradle / init.gradle.kt for kotlin dsl. …...

react18【实战】tab切换,纯前端列表排序(含 lodash 和 classnames 的安装和使用)

技术要点 动态样式 className{tabItem ${currentType item.value && "active"}}安装 lodash npm i --save lodash使用 lodash 对对象数组排序&#xff08;不会改变源数组&#xff09; _.orderBy(dataList, "readNum", "desc")src\De…...

C++学习第二十七课:C++ 输入输出流详解:从基础到高级应用

在 C 中&#xff0c;流&#xff08;stream&#xff09;是一种用于实现输入输出操作的抽象概念。流可以看作是字节的流动&#xff0c;这些字节可以从一个地方流向另一个地方&#xff0c;例如从键盘输入到程序中&#xff0c;或者从程序输出到屏幕。C 提供了一套完整的流库来处理各…...

【Unity AR开发系列】介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用

预告 Unity开发AR系列 本专栏将介绍如何使用这个支持热更的AR开发插件&#xff0c;快速地开发AR应用。 更新 二、使用插件一键安装HybridCLR和ARCore 三、配置带HybridCLR的ARCore开发环境...

Nginx - 配置文件结构(一)

安装Nginx 以 Ubuntu 为例&#xff0c;安装命令为 sudo apt install nginx常用指令 # 检查配置文件是否有问题 nginx -t# 热加载配置文件 nginx -s reload# 等待处理完当前请求并退出 nginx -s quit# 快速退出 nginx -s stop目录结构 nginx 默认安装位置一般在 /etc/nginx …...

暗区突围进不去/游戏无法启动/掉帧卡顿/报错的解决方法

暗区突围是一款高拟真硬核射击手游&#xff0c;打造了全新的沉浸式暗区战局体验&#xff0c;发行商是腾讯公司。这个游戏名词虽然看起来有些陌生&#xff0c;但其本身的玩法内核毫无疑问的是&#xff0c;这款游戏在画面质量和枪械操作方面&#xff0c;都是手游市场上同类游戏中…...

基于FPGA的视频矩阵 视频拼接 无缝切换解决方案

视频矩阵 视频矩阵 视频拼接 无缝切换 1. 最大支持144路HDMI视频输入&#xff0c;最大支持144路路HDMI输出&#xff0c;完全交叉切换。 2. 与包括1080p/60的所有HDTV分辨率和高达1920*1200的PC的分辨率兼容&#xff1b; 3. 支持HDMI 1.3a、HDCP 1.3、HDCP 1.4、以及DVI 1.0协…...

LeetCode 513.找树左下角的值

LeetCode 513.找树左下角的值 1、题目 题目链接&#xff1a;513. 找树左下角的值 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null…...

遗传算法(GA)调参实战:以Scikit-learn模型为例,手把手教你自动化超参数搜索

遗传算法调参实战&#xff1a;用进化思维优化Scikit-learn模型超参数 当我们在机器学习项目中反复调整随机森林的max_depth或XGBoost的learning_rate时&#xff0c;是否想过自然界早已提供了更优雅的解决方案&#xff1f;生物进化经过数十亿年锤炼的优化机制&#xff0c;正以遗…...

快速体验:Python3.8镜像开箱即用,无需配置直接写代码

快速体验&#xff1a;Python3.8镜像开箱即用&#xff0c;无需配置直接写代码 1. Python3.8镜像简介 Python作为当下最流行的编程语言之一&#xff0c;其3.8版本在性能优化和功能完善方面达到了一个成熟稳定的阶段。这个预配置好的Python3.8镜像&#xff0c;让你可以完全跳过繁…...

GME多模态向量模型实战部署:华为云ModelArts一键启动图文检索

GME多模态向量模型实战部署&#xff1a;华为云ModelArts一键启动图文检索 1. 引言&#xff1a;多模态检索的实用价值 想象一下&#xff0c;你正在管理一个大型数字资产库&#xff0c;里面有成千上万的图片和文档。当你想找"去年会议上讨论过的那张数据流程图"时&am…...

Wan2.2-I2V-A14B:在4090显卡上快速体验专业级视频生成

Wan2.2-I2V-A14B&#xff1a;在4090显卡上快速体验专业级视频生成 1. 开篇&#xff1a;认识这款视频生成神器 你是否想过用一张普通的图片就能生成流畅的视频&#xff1f;Wan2.2-I2V-A14B让这个想法变成了现实。作为一款开源的视频生成模型&#xff0c;它能在消费级显卡上实现…...

量子密钥分发系统的工程实践(四):基于FPGA的后处理核心模块剖析

1. FPGA在QKD后处理中的核心作用 量子密钥分发&#xff08;QKD&#xff09;系统的后处理环节就像一位严谨的会计&#xff0c;需要把原始账本&#xff08;量子信号&#xff09;整理成无可争议的最终报表&#xff08;安全密钥&#xff09;。而FPGA在这个过程中的角色&#xff0c;…...

人工智能准备好进行多模态仇恨言论检测了吗?

摘要 网络仇恨言论针对个人或群体的身份属性进行攻击&#xff0c;传播迅速&#xff0c;带来严重的社会风险。模因&#xff08;结合图像与文本的形式&#xff09;已成为传播仇恨言论的一种隐蔽载体&#xff0c;其解读往往依赖文化背景知识。 然而&#xff0c;现有的多模态仇恨言…...

别让电源拖后腿!手把手教你搞定Xilinx 7系列FPGA(以XC7K325T为例)的供电设计

别让电源拖后腿&#xff01;手把手教你搞定Xilinx 7系列FPGA&#xff08;以XC7K325T为例&#xff09;的供电设计 第一次翻开Xilinx 7系列FPGA的硬件手册时&#xff0c;相信不少工程师都会被密密麻麻的电源轨搞得头晕目眩。VCCINT、VCCBRAM、VCCO、VMGTAVCC...这些看似简单的电压…...

【Matlab】MATLAB教程:图形句柄;案例:h=plot(x,y);应用:控制图形属性

MATLAB教程:图形句柄;案例:h=plot(x,y);应用:控制图形属性 在MATLAB数据可视化、实验报告绘图、工程结果展示等场景中,仅仅通过plot函数绘制基础图形远远不够。实际科研与工程应用中,往往需要精准调整图形的线条样式、颜色、标记点、坐标轴、图例等属性,让图形更清晰、…...

新手福音:基于预置镜像,在快马平台零配置开启Python Web开发之旅

作为一个刚接触Python Web开发的新手&#xff0c;我最近在InsCode(快马)平台上体验了一把零配置搭建个人博客的过程。不得不说&#xff0c;这种基于预置镜像的开发方式&#xff0c;简直是为我们这些初学者量身定制的福音。下面我就来分享一下这次的学习心得。 为什么选择预置镜…...

眼图分析:高速数字信号完整性的关键工具

1. 眼图基础概念解析 眼图&#xff08;Eye Diagram&#xff09;是数字信号完整性分析中最重要的工具之一。作为一名硬件工程师&#xff0c;我每天都会用眼图来评估信号质量。简单来说&#xff0c;眼图就是将数字信号在时间轴上重复叠加后形成的图形&#xff0c;因其形状类似人眼…...