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数据库被攻击后,数据库全部被删除,并且加一个一个勒索的数据,向我索要btc, 出现这个问题就是我的数据库密码太简单了,弱密码,被破解了,并且把我权限也给修改了 导致我操作数据库时&#…...
在哪里打印资料比较便宜
在数字时代,我们常常需要在各种文档、资料之间穿梭,然而,有时候我们需要的并不是数字版,而是纸质版。那么,在哪里打印资料比较便宜呢? 琢贝云打印以其超低的价格,优质的打印服务,赢…...
leetcode 2606.找到最大开销的子字符串
思路:dp 这道题是不是很像最大子数组和那道题呢?从这里我们其实能看出来一类题的蹊跷规律来: 也就是说,在涉及到子字符串,子数组这样的字眼的时候,并且有最值问题,我们可以基本上确定是动态规划…...
超标量处理器设计:重排序缓存(ROB)
★超标量处理器的很多地方用到了重排序缓存,但是我对它不是很了解,所以我整理一下重排序缓存的知识点。 重排序缓存(ROB)在确保乱序执行的指令能够正确地完成和提交(Commit),也可以用来寄存器重命名。 ROB是一个先进先出的表,每个…...
nginx常用内置变量
名称说明$arg_name请求中的name参数$args请求中的参数$content_lengthhttp请求信息里的"Content-Length"$content_type请求信息里的"Content-Type"$host请求信息中的"Host",如果请求中没有Host,则等于设置的服务器名$host…...
MySQL技能树学习——数据库组成
数据库组成: 数据库是一个组织和存储数据的系统,它由多个组件组成,这些组件共同工作以确保数据的安全、可靠和高效的存储和访问。数据库的主要组成部分包括: 数据库管理系统(DBMS): 数据库管理系…...
OpenCV入门1:Python基础编程
目录 环境配置 Python基础语法 import 与 from...import If ... Else 语句 While 循环 For 循环 集合数据类型 列表 函数 类和对象 环境配置 详情请参考:Pycharm环境配置完整教程 Python基础语法 import 与 from...import 在 python 用 import 或者 f…...
C++ Builder XE EnumWindowsProc遍历所有窗口的名称
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) { // 这里可以添加你的处理逻辑 // 例如,将句柄添加到列表中或者其他操作 // 这里我们仅仅输出到调试窗口 OutputDebugString(L"枚举窗口句柄: "); char windowHandle[10];…...
Qt QInputDialog详解
1.简介 QInputDialog是一个对话框类,用于从用户那里获取一个单一的值。这个值可以是字符串、数字、或者一个列表中的选项。QInputDialog提供了一个方便的方式来快速创建一个输入对话框,无需自己从头开始构建。 QInputDialog支持多种输入类型࿱…...
最新盘点!2024年20大好用的项目管理软件(后续持续更新)
项目管理软件,作为一种高效的项目管理工具,正逐渐成为企业运营中不可或缺的一环。它包括任务分配、进度跟踪、团队协作、风险预测等多个方面,为企业提供了全方位的项目管理解决方案。 在如今竞争激烈的市场环境下,企业要想在有限…...
Linux:配置客户端默认autofs服务
Linux:配置客户端autofs服务 安装autofs软件 [rootserver200 ~]# dnf install autofs -y开启并设置开机自启autofs服务 [rootserver200 ~]# systemctl enable --now autofs访问默认autofs挂载机制 当autofs启动后系统默认会在/net目录中访问nfs服务器 [rootser…...
Kotlin版本的Gradle全局配置init.gradle.kts及参考文档
工欲善其事, 必先利其器。 文章目录 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 对对象数组排序(不会改变源数组) _.orderBy(dataList, "readNum", "desc")src\De…...
C++学习第二十七课:C++ 输入输出流详解:从基础到高级应用
在 C 中,流(stream)是一种用于实现输入输出操作的抽象概念。流可以看作是字节的流动,这些字节可以从一个地方流向另一个地方,例如从键盘输入到程序中,或者从程序输出到屏幕。C 提供了一套完整的流库来处理各…...
【Unity AR开发系列】介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用
预告 Unity开发AR系列 本专栏将介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用。 更新 二、使用插件一键安装HybridCLR和ARCore 三、配置带HybridCLR的ARCore开发环境...
Nginx - 配置文件结构(一)
安装Nginx 以 Ubuntu 为例,安装命令为 sudo apt install nginx常用指令 # 检查配置文件是否有问题 nginx -t# 热加载配置文件 nginx -s reload# 等待处理完当前请求并退出 nginx -s quit# 快速退出 nginx -s stop目录结构 nginx 默认安装位置一般在 /etc/nginx …...
暗区突围进不去/游戏无法启动/掉帧卡顿/报错的解决方法
暗区突围是一款高拟真硬核射击手游,打造了全新的沉浸式暗区战局体验,发行商是腾讯公司。这个游戏名词虽然看起来有些陌生,但其本身的玩法内核毫无疑问的是,这款游戏在画面质量和枪械操作方面,都是手游市场上同类游戏中…...
基于FPGA的视频矩阵 视频拼接 无缝切换解决方案
视频矩阵 视频矩阵 视频拼接 无缝切换 1. 最大支持144路HDMI视频输入,最大支持144路路HDMI输出,完全交叉切换。 2. 与包括1080p/60的所有HDTV分辨率和高达1920*1200的PC的分辨率兼容; 3. 支持HDMI 1.3a、HDCP 1.3、HDCP 1.4、以及DVI 1.0协…...
LeetCode 513.找树左下角的值
LeetCode 513.找树左下角的值 1、题目 题目链接:513. 找树左下角的值 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
