HBase高手之路4-Shell操作

news2024/11/18 20:46:30

文章目录

  • HBase高手之路3—HBase的shell操作
    • 一、hbase的shell命令汇总
    • 二、需求
    • 三、表的操作
      • 1.进入shell命令行
      • 2.创建表
      • 3.查看表的定义
      • 4.列出所有的表
      • 5.删除表
        • 1)禁用表
        • 2)启用表
        • 3)删除表
    • 四、数据的操作
      • 1.添加数据
      • 2.获取(查看)数据
        • 1)获取一行数据
        • 2)获取单个数据
      • 3.更新(修改)数据
      • 4.删除数据
        • 1)删除指定列的数据
        • 2)删除整行数据
        • 3)清空表
    • 五、导入数据
      • 1.数据文件的准备
      • 2.把数据文件上次到服务器
      • 3.创建表,根据数据文件的定义
      • 4.执行命令导入命令数据文件
      • 5.查看数据
    • 六、计数操作
      • 1.计数命令
      • 2.MR程序计数
    • 七、扫描操作
      • 1.全表扫描
      • 2.限定记录数
      • 3.限定列
      • 4.限定rowkey
    • 八、HBase的过滤器
      • 1.简介
      • 2.过滤器
      • 3.过滤器的用法
        • 1)比较运算符
        • 2)比较器
        • 3)比较器表达式
      • 4.案例一:查询指定订单id的数据
        • 1)需求
        • 2)分析
        • 3)实现
      • 5.案例二:查询状态为已付款的订单
        • 1)需求
        • 2)分析
      • 6.案例三:组合多条件过滤1
        • 1)需求
        • 2)分析
      • 7. 案例四:组合多条件过滤2
        • 1)需求
        • 2)分析
      • 8.作业
    • 九、INCR
      • 1. 需求
      • 2. incr操作
      • 3.基本使用
      • 4.导入准备好的数据
      • 5.获取计数器值的命令
      • 6.使用incr进行累加操作,修改计数器的值
    • 十、Shell管理操作
      • 1.status
      • 2.whoami
      • 3.list
      • 4.count
      • 5.describe
      • 6.exists
      • 7.is_enabled、is_disabled
      • 8.alter
    • 参考文章

image-20230220084553544

HBase高手之路3—HBase的shell操作

一、hbase的shell命令汇总

命令功能
create创建表
put插入或者更新数据
get获取限定行或者列的数据
scan全表扫描或扫描表并返回表的数据
describe查看表的结构
count统计行数
delete删除指定的行或列的数据
deleteall删除整个行或者列的数据
truncate删除表的数据,结构还在
drop删除整个表(包括数据)

二、需求

有以下的订单数据,需要将其保存在HBase中

订单id订单状态支付金额支付方式用户id操作时间商品分类
001已付款189.511000012023-3-6 9:10:24手机

三、表的操作

1.进入shell命令行

注意:需要提前启动 ZooKeeper、hdfs、hbase集群

image-20230308223358923

2.创建表

命令格式:

create '表名','列簇名1'[,'列簇名2',...]

image-20230308223646357

注意:create要小写,一个表可以有多个列簇

3.查看表的定义

命令格式:

describe '表名'

image-20230308223933406

4.列出所有的表

命令格式:

list

5.删除表

1)禁用表

命令格式:

disable '表名'

image-20230308224302201

2)启用表

命令格式:

enable '表名'

image-20230308224446904

3)删除表

命令格式:

drop '表名'

image-20230308224735495

注意:表处于启用状态时是无法删除的,若要删除表需要先禁用表,在进行删除。

四、数据的操作

1.添加数据

命令格式:

put '表名','rowkey行键','列簇名:列名',

image-20230308225608868

依次添加其他的数据

image-20230308225753624

注意:如果显示中文乱码,是因为hbase的shell中显示的是中文的十六进制编码,要解决中文乱码,需要添加选项,jrubby语法格式:

{属性名=>属性值}

如果有多个属性,中间用逗号格式

image-20230308225948457

image-20230308230110211

image-20230308230424118

image-20230308230707310

再次添加另一个rowkey的数据

image-20230308231006936

image-20230308231411706

2.获取(查看)数据

1)获取一行数据

命令格式:

get '表名','rowkey'

image-20230308231611538

image-20230308231709673

2)获取单个数据

命令格式:

get '表名','rowkey','列簇名:列名'

image-20230308232121937

3.更新(修改)数据

命令格式:

put '表名','rowkey行键','列簇名:列名',新值

在这里插入图片描述

说明:

  • put命令如果键值存在则修改,如果不存在则添加
  • 在HBase中会自动维护表中数据的版本,即时间戳
  • 每执行一次put操作,都会生产一个新的时间戳

4.删除数据

1)删除指定列的数据

命令格式:

delete '表名','行键','列簇名:列名'

image-20230309000017422

2)删除整行数据

image-20230309000134939

命令格式:

deleteall '表名','行键'

image-20230309000258041

3)清空表

命令格式:

truncate '表名'

image-20230309000521697

五、导入数据

1.数据文件的准备

image-20230315122148022

2.把数据文件上次到服务器

image-20230315122451670

3.创建表,根据数据文件的定义

注意:集群启动

  1. 启动ZooKeeper
  2. 启动hdfs
  3. 启动HBASE
  4. 进入shell命令行
create 'ORDER_INFO' ,'C1'

image-20230315123914770

4.执行命令导入命令数据文件

image-20230315124035164

5.查看数据

在这里插入图片描述

此时,HBase的数据在HDFS上是的存储查看

image-20230315124432172

六、计数操作

统计表中有多少条数据

1.计数命令

语法:

count '表名'

功能:统计rowkey不同的行数

image-20230315124714994

注意:当数据量很大的时候,这个操作是比较耗时的

2.MR程序计数

当数据量很大很大的时候,可以通过HBase提供的MR程序进行计数,这个mr程序是

org.apache.hadoop.hbase.mapreduce.RowCounter,语法格式:

hbase org.apache.hadoop.hbase.mapreduce.RowCounter '表名'

此时需启动yarn

image-20230315125009979

image-20230315125047846

启动计数命令

hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'ORDER_INFO'

image-20230315125250306

image-20230315125312801

image-20230315125335912

七、扫描操作

1.全表扫描

语法:
scan ‘表名’,{FORMATTER=>‘toString’}

image-20230315125606533

注意:尽量避免全表扫描一张很大很大的表

2.限定记录数

语法:

scan ‘表名’,{FORMATTER=>'toString',LIMIT=>数字}

image-20230315125947678

3.限定列

Rubby语法:

scan ‘表名’,{FORMATTER=>'toString',COLUMNS=>[‘列簇名1:列名1,’列簇名1:列名2,...]}
scan "ORDER_INFO",{FORMATTER=>'toString',LIMIT=>3,COLUMNS=>['C1:CATEGORY','C1:PAY_MONEY']}

image-20230315130445624

4.限定rowkey

语法:

scan ‘表名’,{FORMATTER=>'toString',ROWPREFIXFILTER=>’rowkey一部分’}
scan "ORDER_INFO",{FORMATTER=>'toString',COLUMNS=>['C1:CATEGORY','C1:PAY_MONEY'],ROWPREFIXFILTER=>'e'}

image-20230315130743173

image-20230315130853326

八、HBase的过滤器

1.简介

在HBase中,如果要对海量的数据进行扫描查询,尤其是全表扫描效率很低,可以使用过滤器Filter来提高查询的效率。过滤器Filter可以根据主键、列簇、列、版本号(时间戳)等条件对数据进行查询过滤。

在HBase中,使用过滤器有两种方式,一种就是使用命令行基于jRubby语法的选项实现交互式查询,另一种是基于HBase的JAVA API的方式进行编程开发。

官网文档:https://hbase.apache.org/devapidocs/index.html

2.过滤器

可以通过show_filters命令,查看hbase内置的过滤器

image-20230315140420882

我们来解释一下这些过滤器的用法:

类型过滤器功能
rowkey过滤器RowFilter实现行键字符串的比较和过滤
PrefixFilterrowkey的前缀过滤器
KeyOnlyFilter只对单元格的键过滤不显示值
FirstKeyOnlyFilter只扫描显示相同键的第一个单元格,其对应的键值会显示出来
列过滤器FamilyFilter列簇过滤器
QualifierFilter列限定符过滤器,只显示对应列簇列名的数据
ColumnPrefixFilter对列名的前缀进行限定
MultipleColumnPrefixFilter对多个列名的前缀进行限定
ColumnRangeFilter列名称范围的过滤器
值过滤器ValueFilter值过滤器,查询符合条件的键值对
SingleColumnValueFilter对单个值进行过滤
ColumnValueFilter列值的过滤器
SingleColumnValueExcludeFilter排除匹配成功的值
其他过滤器ColumnPaginationFilter列分页过滤器,返回offset、limit的列
PageFilter分页过滤器,分页显示
TimestampsFilter时间戳过滤器
ColumnCountGetFilter限制每个逻辑行返回值对的个数
DependentColumnFilter依赖列过滤器

3.过滤器的用法

过滤器一般结合scan来使用

scan "ORDER_INFO",{FORMATTER=>'toString',FILTER=>"RowFilter(=,'binary:02602f66-adc7-40d4-8485-76b5632b5b53')"}

image-20230315141149174

一般语法:

scan ‘表名’,{FILTER=>”过滤器的名称(参数列表(如比较运算符,比较器))}

1)比较运算符

比较运算符是我们比较常见的。

运算符功能
=等于
>大于
<小于
>=大于等于
<=小于等于
!=不等于

2)比较器

比较器功能
BinaryComparator匹配完整的字节数组
BinaryPrefixComparator匹配字节数组的前缀
BitComparator匹配比特位
NullComparator匹配空值
RegexStringComparator匹配正则表达式
SubstringComparator匹配子字符串

3)比较器表达式

比较器表达式缩写
BinaryComparatorbinary:值
BinaryPrefixComparatorbinaryprefix:值
BitComparatorbit:值
NullComparatornull
RegexStringComparatorregexstring:正则表达式
SubstringComparatorsubstring:值

4.案例一:查询指定订单id的数据

1)需求

查询指定订单的数据,订单号为“e8b3bb37-1019-4492-93c7-305177271a71”,订单状态及支付方式

2)分析

  • 因为订单id就说表的rowkey,所以应该使用rowkey过滤器RowFilter

image-20230315142049236

只需要两个参数

  • 比较运算符:=
  • 比较器表达式:binary:订单号

3)实现

scan 'ORDER_INFO',{FORMATTER=>'toString',COLUMNS=>['C1:STATUS','C1:PAYWAY'],FILTER=>"RowFilter(=,'binary:e8b3bb37-1019-4492-93c7-305177271a71')"}

image-20230315142259349

5.案例二:查询状态为已付款的订单

1)需求

查询状态为已付款的订单

2)分析

  • 因为查询状态为已付款要查询指定值,所以应该使用值过滤器SingleColumnValueFilter

image-20230315142514218

需要传入四个参数

  • 列簇
  • 列名
  • 比较运算符
  • 比较器表达式
scan 'ORDER_INFO',{FORMATTER=>'toString',FILTER=>"SingleColumnValueFilter('c1','STATUS',=,'binary:已付款')"}

image-20230315142911806

注意:

  • 列簇名和列名大小写一定要写对
  • 如果列簇名和列名大小写写错并不能过滤数据,但是HBase不会报错,而是显示全部的数据,因为HBase是无模式的

6.案例三:组合多条件过滤1

1)需求

查询支付方式为1,且支付金额大于8000的订单

2)分析

  • 此处需要使用多个过滤器共同来实现查询,多个过滤器,可以使用AND(并且)或者OR(或者)来组合多个过滤器完成查询
  • 使用SingleColumnValueFilter实现对应列的查询
  1. 支付方式为1的过滤器
SingleColumnValueFilter('C1', 'PAYWAY', = , 'binary:1')
  1. 支付金额大于8000的过滤器
SingleColumnValueFilter('C1', 'PAY_MONEY', > , 'binary:8000')
  1. 完整的命令
scan 'ORDER_INFO', {FORMATTER => 'toString',FILTER => "SingleColumnValueFilter('C1', 'PAYWAY', = , 'binary:1') AND SingleColumnValueFilter('C1', 'PAY_MONEY', > , 'binary:8000')"}

image-20230320112103038

注意:

  • HBase shell中比较默认都是字符串比较,所以如果是比较数值类型的,会出现不准确的情况
  • 例如:在字符串比较中4000是比100000大的
  • 外层必须使用双引号,内层使用单引号

我们还可以加上限定列:

scan 'ORDER_INFO', {FORMATTER => 'toString',FILTER => "SingleColumnValueFilter('C1', 'PAYWAY', = , 'binary:1') AND SingleColumnValueFilter('C1', 'PAY_MONEY', > , 'binary:8000')",COLUMNS=>['C1:PAYWAY','C1:PAY_MONEY']}

image-20230320112316410

7. 案例四:组合多条件过滤2

1)需求

查询类别为“维修;手机;”或者“数码;女装;”,并且状态为“已付款”的订单,只显示类别和状态

2)分析

  • 此处需要使用多个过滤器组合使用,多个过滤器可以使用AND(并且)、OR(或者)来进行组合
  • 使用值过滤器中的SingleColumnValueFilter实现对应列值的查询

完整的命令

scan 'ORDER_INFO', {FORMATTER => 'toString',FILTER => "(SingleColumnValueFilter('C1', 'CATEGORY', = , 'binary:维修;手机;') OR SingleColumnValueFilter('C1', 'CATEGORY', = , 'binary:数码;女装;')) AND SingleColumnValueFilter('C1', 'STATUS', =, 'binary:已付款')",COLUMNS=>['C1:CATEGORY','C1:STATUS']}

image-20230320112444753

8.作业

选择操作时间在2020-04-25,12点8分到9分之间的已完成的订单,只显示操作时间和状态

scan 'ORDER_INFO', {FORMATTER => 'toString',FILTER => "SingleColumnValueFilter('C1', 'OPERATION_DATE', > , 'binary:2020-04-25 12:08:00') AND SingleColumnValueFilter('C1', 'OPERATION_DATE', = , 'binary:2020-04-25 12:09:00')",COLUMNS=>['C1:OPERATION_DATE','C1:STATUS']}

image-20230320100200686

九、INCR

incr(increament)命令可以实现某个单元格的值进行原子性计数累加,默认累加1

1. 需求

某新闻app应用为了统计每个新闻的每隔一段时间的访问次数,将新闻数据保存在HBase中,该表格的数据如下所示,要求原子性的增加新闻的访问次数

新闻ID访问次数时间段rowkey
00000000011200:00-01:000000000001_00:00-01:00
00000000022001:00-02:000000000002_01:00-02:00

2. incr操作

语法:

incr ‘表名’,‘rowkey’,‘列簇名:列名’,[累加值]

说明:

  • 如果某一列要实现计数功能,必须要使用incr来创建对应的列
  • 使用put创建的额列是不能实现累加的
  • 默认累加1

3.基本使用

image-20230320123358809

image-20230320123658394

image-20230320123822800

4.导入准备好的数据

image-20230320123846222

上传服务器

image-20230320123938823

导入HBase

image-20230320124048247

显示前5条数据

image-20230320124253280

5.获取计数器值的命令

不能使用get来获取计数器的值

image-20230320124502710

语法:

get_counter ‘表名’,‘rowkey’,‘列簇名:列名’

image-20230320124948914

image-20230320125058118

6.使用incr进行累加操作,修改计数器的值

image-20230320125410075

image-20230320125514176

十、Shell管理操作

1.status

查看服务器的状态

image-20230320125718373

2.whoami

显示当前用户

image-20230320125748533

3.list

显示当前的所有的表

image-20230320125820563

4.count

统计表的记录数

image-20230320125901029

5.describe

显示表的结构信息

image-20230320125940601

6.exists

判断某个表是否存在

image-20230320130103974

7.is_enabled、is_disabled

判断某个表是否被启用或者禁用

image-20230320130314663

8.alter

改变表和列簇的模式

  • 新增列簇

image-20230320130557415

  • 删除列簇

image-20230320130704439

image-20230320130926617

参考文章

HBASE官网文档

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

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

相关文章

TensorFlow 深度学习实战指南:1~5 全

原文&#xff1a;Hands-on Deep Learning with TensorFlow 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只关心如…

【通义千问】继ChatGPT爆火后,阿里云的大模型“通义千问”它终于来了

通义千问一、通义千问名字的由来二、通义千问和ChatGPT有什么区别呢&#xff1f;三、如何申请体验通义千问呢&#xff1f;四、未来通义千问能称为中国版的ChatGPT吗&#xff1f;五、通义千问什么时候正式发布呢&#xff1f;一、通义千问名字的由来 通义千问顾名思义&#xff0…

作物杂交——蓝桥杯20年省赛(JAVA)

题目链接&#xff1a; 用户登录https://www.lanqiao.cn/problems/506/learning/?page2&first_category_id1&sortstudents_count 题目描述 作物杂交是作物栽培中重要的一步。已知有 N 种作物 (编号 1 至 N )&#xff0c;第 i 种作物从播种到成熟的时间为 Ti​。作物…

少儿编程 电子学会图形化 scratch编程等级考试四级真题答案解析(判断题)2022年12月

2022年12月scratch编程等级考试四级真题 判断题(共10题,每题2分,共20分) 16、点击绿旗,反复按下空格键,可以使变量a的值在0和1之间反复变化 答案:对 考点分析:考查积木综合使用,重点考查变量积木的使用,按一下空格键,a变量值会改变5次,0-1-0-1-0-1,按第二下…

budibase <2.4.3 存在 ssrf 漏洞(CVE-2023-29010)

漏洞描述 budibase 是一个开源的低代码平台&#xff0c;元数据端点(metadata endpoint)是Budibase提供的一个REST API端点&#xff0c;用于访问应用程序的元数据信息。 budibase 2.4.3之前版本中存在 ssrf 漏洞&#xff0c;该漏洞可能影响 Budibase 自主托管的用户&#xff0…

安利安利-向大家推荐一个超级牛的etcd管理工具-EtcdKeeperFyne

etcd介绍 关于etcd的介绍大家可以看下这篇文章 etcd 开源仓库地址&#xff1a;EtcdKeeperFyne EtcdKeeperFyne 今天主要是向大家推荐一款使用起来特别方便的Etcd管理工具 EtcdKeeperFyne&#xff0c;具体运行起来的界面如下&#xff1a; 推荐原因 使用简单安装简单&…

卷积层输出尺寸计算 / 感受野尺寸计算

卷积层输出尺寸计算 输入图像a*a, 卷积核大小b*b, stride c, padding d 输出图像的尺寸&#xff1a;[(a - b 2d) // c] 1 (a - b 2d) 表示在输入图像两侧填充 d 个像素后&#xff0c;窗口在输入图像上最多能移动的距离&#xff0c;再加上 1 表示最后一个窗口的右侧边界…

博客文章效果

学习风宇blog md文档转html&#xff08;markdown-it的使用&#xff09;语法高亮、行号、一键复制toc生成目录sticky粘性定位 <style lang"scss"> import url(//at.alicdn.com/t/c/font_4004562_9v94jccafmc.css); import url(https://fonts.font.im/css?fam…

DFIG控制8: 不平衡电网下的网侧变换器控制

DFIG控制8&#xff1a; 不平衡电网下的网侧变换器控制。主要是添加网侧变换器的负序分量控制器。 本文基于教程的第8部分&#xff1a;DFIM Tutorial 8 - Asymmetrical Voltage Dips Analysis in DFIG based WT: Grid Side Converter Control 控制策略简介 来自&#xff1a;G…

过滤器(Filter)与拦截器(Interceptor)区别

1 过滤器&#xff08;Filter&#xff09; Servlet 中的过滤器 Filter 实现了 javax.servlet.Filter 接口的服务器端程序&#xff0c;主要用途是设置字符集&#xff08;CharacterEncodingFilter&#xff09;、控制权限、控制转向、用户是否已经登陆、有没有权限访问该页面等。 …

springboot配置跨域问题

近期自己搭建项目时&#xff0c;遇到一个跨域问题。我们以前项目解决跨域是在controller上加一个跨域注解CrossOrigin(allowCredentials "true")&#xff0c;很方便。但是在我自己搭建的项目中&#xff0c;启动时竟然报错了&#xff0c;错误如下&#xff1a; When …

图的传递闭包

给定一个有向图,对于给定图中的所有顶点对(i, j),找出一个顶点j是否可从另一个顶点i到达。这里的可达性是指从顶点i到j有一条路径。可达性矩阵称为图的传递闭包。 例如,考虑下面的图表 上述图的传递闭包为 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 该图以邻接矩阵的形式给出,…

抛弃 TCP 和 QUIC 的 HTTP

下班路上发了一则朋友圈&#xff1a; 周四听了斯坦福老教授 John Ousterhout 关于 Homa 的分享&#xff0c;基本重复了此前那篇 It’s Time To Rep… 的格调&#xff0c;花了一多半时间喷 TCP… Ousterhout 关于 Homa 和 TCP 之间的论争和论证&#xff0c;诸多反复回执&…

DAY15|102.二叉树的层序遍历。。。。等层序遍历的十道题

102.二叉树的层序遍历 代码随想录中的这题java和c不太一样 class Solution {public List<List<Integer>> resList new ArrayList<List<Integer>>();public List<List<Integer>> levelOrder(TreeNode root) {checkFun01(root,0);return …

NVIDIA- cuSPARSE(四)

cuSPARSE logging 日志记录机制&#xff0c; 可以通过在启动目标应用程序之前设置一下环境变量来启动cuSPARSE日志记录机制&#xff1a; CUSPARSE_LOG_LEVEL<level> level的取值&#xff1a; 0 Off 日志记录关闭1 Error只有报错会被记录2Trace启动CUDA内核的API调用将记…

网络应用程序设计(idea版)——实验四:会话管理

目录 实验预习报告 一、实验目的 二、实验原理 三、实验预习内容 实验报告 一、实验目的 二、实验要求 三、实验内容与步骤 实验预习报告 一、实验目的 1. 了解Web服务器对客户会话跟踪的各种方法&#xff1b; 2. 重点掌握使用HttpSession对象跟踪会话的方法&#…

OCAF——数据结构机制 Sample2

Email:dev_as@163.com Another example is the application for designing table lamps. The first label is allocated to the lamp unit. The tree definition of Lamp The root label cannot have brother labels. :[Root : (0)],根节点没有兄弟节点 Consequently, var…

ch5_4程序查询方式_程序中断方式_DMA方式

程序查询方式的流程 程序查询方式的接口电路 1. 程序查询方式 程序查询方式&#xff0c;需要通过cpu中的寄存器&#xff0c;完成数据从io设备到内存之间的传输。 1.1 程序查询方式流程 保存寄存器的内容&#xff1a; 如果寄存器中的数据是有用的&#xff0c;需要对寄存器中…

剑指offer:关于二叉树的汇总(c++)

1、重建二叉树&#xff1a; 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}&#xff0c;则重建二叉树并返回。 2、树的…

可以顺畅使用不输Chatgpt的AI

一前言 虽然chatgpt不错&#xff0c;但是如果在咱们国家&#xff0c;想使用起来还是有一定的门槛的&#xff0c;又要科学上网&#xff0c;又要申请账号&#xff0c;申请账号还要申请虚拟手机号接收验证码&#xff0c;难道就没有适合普通人使用的AI了吗&#xff0c;直到我发现了…