HBase高手之路4-Shell操作

文章目录

  • 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官网文档

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【HAL库】BMP180气压传感器+STM32,hal库移植

BMP180气压传感器STM321 导入.c.h文件&#xff08;不再赘述&#xff0c;详细见LED部分&#xff09;2 Cubemx配置3 修改 .h 文件4 测试将BMP180从标准库移植到HAL库。模拟IIC。 极简工程代码如下&#xff1a; https://github.com/wyfroom/HAL_BMP180 该份代码硬件配置&#xff…

Oracle_EBS_核心功能(MFG)(1)

INV: Items参考《深入浅出Oracle EBS之核心功能&#xff08;DIS&#xff09;》。canca INV: Transactions基本库存事务处理参考《深入浅出Oracle EBS之核心功能&#xff08;DIS&#xff09;》。canca BOM: Bills of Material物料清单应用&#xff1a;Bills of Material 职责&am…

day-004-链表-两两交换链表中的节点、删除链表的倒数第N个节点、链表相交、环形链表II

两两交换链表中的节点 题目建议&#xff1a;用虚拟头结点&#xff0c;这样会方便很多。 题目链接/文章讲解/视频讲解 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* Li…

阿里9年测试经验告诉你:作为一名年薪40w自动化测试需要具备那些能力

前言 前段时间张同学问我说&#xff1a;我已经功能测试2年多了&#xff0c;在功能测试的阶段中也一直在自学自动化测试&#xff0c;有了一定的代码基础还学习了很多的工具&#xff0c;问题是我不知道自动化测试到底需要具备什么样的能力。 我相信有很多小伙伴也是在思索这个问…

计算机组成的基本认识

计算机——> 数值计算——> 处理电信号——> 基本单元&#xff08;逻辑元件&#xff09; 电子管——> 晶体管——>中小规模集成电路 ——>大规模&#xff0c;超大规模集成电路 机器字长&#xff1a;计算机一次整数运算所能处理的二进制位数 解析存储器中的程…

这家年销售额309亿的Tier 1,要谈一场千亿新生意

跨入2023年&#xff0c;智能汽车软件赛道更热闹了。 相较于传统汽车开发模式&#xff0c;软件属于分布式ECU工程开发的一部分&#xff0c;由一级供应商作为黑盒提供&#xff0c;软件开发成本等被认为是硬件系统成本的一部分&#xff0c;没有实现单独定价。 如今&#xff0c;“…

如何在windows/linux下启动OpenOffice

上面一篇文章使用openOffice来实现预览word、excel、pdf、txt等的功能时&#xff0c;发现openOffice没有启动&#xff0c;也怕有些同学安装后不会启动&#xff0c;所以便写下这一篇文章&#xff0c;来为大家说明如何启动openOffice&#xff0c;上一篇讲的如何下载安装openOffic…

2.5 函数的微分

思维导图&#xff1a; 学习目标&#xff1a; 我认为学习函数的微分需要以下几个步骤&#xff1a; 熟练掌握导数的定义和基本性质&#xff0c;包括求导法则和高阶导数的概念。学习一些重要的函数的导数&#xff0c;例如多项式函数、三角函数、指数函数和对数函数等。这些函数的…

CSDN——Markdown编辑器——官方指导

CSDN——Markdown编辑器——官方指导欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表…

Node.js -- http模块

1. 什么是http模块 在网络节点中&#xff0c;负责消费资源的电脑&#xff0c;叫客户端&#xff1b;负责对外提供网络资源的电脑&#xff0c;叫做服务器。 http模块是Node.js官方提供的&#xff0c;用来创建web服务器的模块。通过http模块提供的http.createServer()方法&#…

手写一个Promise

Promise Promise是一个对象&#xff0c;用于解决异步变成的问题&#xff0c;由传统的异步回调为服务端立即调用优化为使用者者掌握回调主动权。 比如传统的JSONP&#xff0c;如下&#xff0c;在请求路由里添加回调函数&#xff0c;由接收请求的一方来调用请求&#xff0c;使用…

kafka笔记

消息队列 场景模式基础架构发送原理异步发送同步发送分区生产者提高吞吐量&#xff1a;数据可靠性ack应答数据重复幂等性事务数据有序数据乱序broker工作流程follower故障leader故障数据查找文件清除高效读写消费者流程消费者组初始化分区分配策略自动提交offset手动提交指定位…

Kubernetes调度器源码学习(一):调度器工作原理、调度器启动流程、调度队列

本文基于Kubernetes v1.22.4版本进行源码学习 1、调度器工作原理 1&#xff09;、调度流程 kube-scheduler的主要作用就是根据特定的调度算法和调度策略将Pod调度到合适的Node节点上去&#xff0c;是一个独立的二进制程序&#xff0c;启动之后会一直监听API Server&#xff0…

thanos prometheus 的高可用、长期存储二进制部署

1.简介 http://thanos.io/ thanos 是具有长期存储功能的开源、高可用性 Prometheus的集群组件。 全局查询视图 跨多个 Prometheus 服务器和集群查询指标 无限保留 使用对象存储扩展系统&#xff0c;不限时间保留指标。 Prometheus兼容 兼容 Prometheus api&#xff0c;用于…

FPGA时序知识点(基本方法总结就两点:1.降低时钟频率2.减小组合逻辑延迟(针对Setup Slack公式来的)

1.我们说的所有时序分析都是建立在同步电路的基础上的&#xff0c;异步电路不能做时序分析&#xff08;或者说只能做伪路径约束&#xff08;在设伪路径之前单bit就打拍&#xff0c;多bit就异步fifo拉到目的时钟域来&#xff09;&#xff09;。——FPGA 设计中寄存器全部使用一个…

Spring的事务

(1) 事务的定义 事务就是用户定义的一系列数据库操作&#xff0c;这些操作可以视为一个完成的逻辑处理工作单元&#xff0c;要么全部执行&#xff0c;要么全部不执行&#xff0c;是不可分割的工作单元。 (2)事务的使用&#xff1a; begin transaction commit rollback. begin …

谈谈软件系统重构

「头条关注【Java思享汇】&#xff0c;面试、各种技术栈、架构设计持续更新中&#xff5e;」 分享初衷&#xff1a;工作几年之后基本都会经历过大大小小的系统重构&#xff0c;笔者经历过单体应用拆分微服务的系统重构&#xff0c;数据异构&#xff0c;业务系统重构。借助此次…

总结819

学习目标&#xff1a; 4月&#xff08;复习完高数18讲内容&#xff0c;背诵21篇短文&#xff0c;熟词僻义300词基础词&#xff09; 第二周&#xff1a; 学习内容&#xff1a; 暴力英语&#xff1a;早上背诵《think different》记150词&#xff0c;默写了两篇文章&#xff0c…

Java中的Iterator底层原理实现

两个抽象方法 Iterator主要有两个抽象方法&#xff0c;让子类实现。 hasNext()用来判断还有没有数据可供访问。next()方法用于访问集合的下一个数据。 这两个方法不像List的get()那样依赖索引获取数据&#xff0c;也不像Queue的poll方法那样依赖特定规则获取数据。 迭代器的…

3月更新 | Visual Studio Code Python

我们很高兴地宣布&#xff0c;2023年3月版 Visual Studio Code Python 和 Jupyter 扩展现已推出&#xff01; 此版本包括以下改进&#xff1a; 后退按钮和取消功能添加到创建环境命令默认情况下&#xff0c;Python 扩展不再附带 isortJupyter 笔记本中内核选择的改进Python P…