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大的

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

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

相关文章

Django开发实战之登录用户鉴权登录界面实现

Django自带的鉴权系统非常的安全&#xff0c;大家可以放心使用&#xff0c;那么如何使用呢&#xff1f; 1、首先需要检查settings文件种的INSTALLED_APPS&#xff0c;有没有这两部分内容&#xff1a; 2、检查中间件&#xff0c;比如这两个中间件&#xff0c;一个是用于登录&a…

CMakeLists.txt语法规则:条件判断中表达式说明一

一. 简介 前面学习了 CMakeLists.txt语法中的 部分常用命令&#xff0c;常量变量&#xff0c;双引号的使用。 前面一篇文章也简单了解了 CMakeLists.txt语法中的条件判断&#xff0c;文章如下&#xff1a; CMakeLists.txt语法规则&#xff1a;条件判断说明一-CSDN博客 本文…

恒生电子,快手25届实习内推

恒生电子&#xff0c;快手25届实习内推 ①快手 【岗位】算法、工程、游戏&#xff0c;产品运营、市场、职能等 【一键内推】https://campus.kuaishou.cn/recruit/campus/e/h5/#/campus/jobs?codecampuswQrLOMvHE 【内推码】campuswQrLOMvHE ②恒生电子 【招聘岗位】JAVA、测试…

Python项目开发实战:贪吃蛇大作战游戏(案例教程)

一、引言 贪吃蛇大作战是一款经典的游戏,其简单的规则和富有挑战性的游戏机制使得它成为休闲娱乐的首选之一。在这个项目中,我们将使用Python编程语言结合pygame库来开发一款贪吃蛇游戏。下面将详细介绍游戏的开发过程,包括需求分析、设计、实现以及测试等关键步骤。 二、需…

大数据技术概述_4.大数据的应用领域

1.制造业的应用 制造业目前正在向信息化和自动化的方向发展。在产品的设计、生产和销售中&#xff0c;越来越多的企业使用计算机辅助设计&#xff08;CAD&#xff09;、计算机辅助制造&#xff08;CAM&#xff09;等软件&#xff0c;数控机床、传感器等设备&#xff0c;物料需求…

如何选择最佳的机器学习分类模型?基于使用贝叶斯和异步连续减半算法(ASHA)优化的最佳分类模型自动选择方法

目录 一、主要内容&#xff1a; 二、贝叶斯优化算法&#xff1a; 三、异步连续减半优化算法&#xff1a; 四、代码运行效果&#xff1a; 五、代码下载&#xff1a; 一、主要内容&#xff1a; 对于分类问题&#xff0c;不同机器学习模型分类的效果不同&#xff0c;而且在同…

新代数控Syntec网络IP配置设定教程

点击面板【维护】→【网络设定】→【IP地址取得方法&#xff1a;直接指定IP地址】→【IP地址&#xff1a;输入采集需要设定的IP】→【子网掩码&#xff1a;255.255.255.0】→【预设网关】 输入方法&#xff1a;点击面板上的【ENTER】输入键&#xff0c;输入相关参数即可。

LeetCode-1463. 摘樱桃 II【数组 动态规划 矩阵】

LeetCode-1463. 摘樱桃 II【数组 动态规划 矩阵】 题目描述&#xff1a;解题思路一&#xff1a;动态规划一般有自顶向下和自底向上两种编写方式&#xff0c;其中自顶向下也被称为「记忆化搜索」。解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1a; 给你一…

Codeforces Round 456 (Div. 2) - B. New Year‘s Eve (位运算,Bitsmasks)

由于格里莎去年表现良好&#xff0c;新年前夕&#xff0c;戴德-莫罗兹带着一大包礼物来看望他&#xff01;袋子里装着 n 颗来自老式面包店的糖果&#xff0c;每颗糖果都按照口味从 1 到 n 贴上标签。没有两颗糖果的口味是相同的。 糖果的选择直接影响到格里莎的幸福感。我们可…

controllor校验body字段非空

1、想要字段非空&#xff1a;字段加上注解 NotBlank NotNull Data public class UpdateQcStateParam {NotBlankNotNullApiModelProperty(value "er")private String orderType;NotBlankNotNullApiModelProperty(value "tr")private String orderSerialNo…

[CR]厚云填补_M3R-CR Dataset and Align-CR

Multimodal and Multiresolution Data Fusion for High-Resolution Cloud Removal: A Novel Baseline and Benchmark Abstract 去云(Cloud Removal)是遥感领域的一个重要且具有挑战性的问题&#xff0c;近年来在这一领域取得了显著进展。两个主要问题仍然阻碍着CR的发展&#…

WebRTC实现多人通话-Mesh架构【保姆级源码教程】

一、Mesh架构 WebRTC&#xff08;Web Real-Time Communications&#xff09;中的Mesh架构是一种将多个终端之间两两进行连接&#xff0c;形成网状结构的通信模式。以下是关于WebRTC的Mesh架构的详细解释&#xff1a; 基本概念&#xff1a;在Mesh架构中&#xff0c;每个参与者…

车载VLAN的划分方法

文章目录 车载VLAN的划分方法车载VLAN的具体应用场景车载VLAN和传统的以太网VLAN有什么区别?如何在车载网络中部署VLAN?车载VLAN的配置需要考虑哪些因素?车载VLAN的划分方法 车载VLAN的划分方法需要根据整车的实际需求进行,以下是一些常见的划分方法: 按功能域划分:将车…

5 shell编程实战 之 expr用法大全

expr的用法大全1 expr用于计算 运算符及用于计算的数字左右2边至少有一个空格 否则会报错 使用乘号时 必须用反斜线转义 [rootlocalhost ~]# expr 2 * 2 4 2 用$()将计算表达式括起来 [rootlocalhost ~]# i5 [rootlocalhost ~]# i$(expr $i 6 ) [rootlocalhost ~]# echo $i…

map、set底层封装模拟实现(红黑树)

文章目录 一、红黑树1.1红黑树的规则&#xff1a;1.2红黑树的插入操作1.2.1不需要旋转&#xff08;如果叔叔存在且为红,这里的C表示孩子&#xff0c;P表示父亲&#xff0c;U表示叔叔&#xff0c;G表示祖父&#xff09;&#xff0c;包含四种情况&#xff0c;无论孩子在哪里&…

对XYctf的一些总结

对XYctf的一些总结 WEB 1.http请求头字段 此次比赛中出现的&#xff1a; X-Forwarded-For/Client-ip&#xff1a;修改来源ip via&#xff1a;修改代理服务器 还有一些常见的字段&#xff1a; GET&#xff1a;此方法用于请求指定的资源。GET请求应该安全且幂等&#xff0c…

202003青少年软件编程(Python)等级考试试卷(二级)

第 1 题 【单选题】 运行下方代码段,输出的结果是(   )。 a=(1,2,3)print(type(a))A :<class ‘float’> B :<class ‘int’> C :<class ‘str’> D :<class ‘tuple’> 正确答案:D 试题解析: 第 2 题 【单选题】 content.txt中原来的内容…

企业想做新媒体矩阵怎么做?百家号,公众号,视频号,抖音,小红书等通用搞流量玩法参考

前言&#xff1a;这是白杨SEO原创第528篇。为什么想到写这个&#xff1f;因为很多企业或个人不知道在平台搞流量除了质量&#xff0c;还有一种方法就是人海战术&#xff0c;用数量取胜。今天简单分享一下&#xff0c;也许会给你启发&#xff0c;仅供参考。 分享大纲&#xff1…

雷军-2022.8小米创业思考-5-选择大于努力;倒在黎明前;互联网思维

第五章 我对互联网思维的理解 我的科技职业生涯起源于金山。金山作为一家老牌软件公司&#xff0c;在互联网时代似乎有些跟不上节奏。早年的金山也曾做过两次互联网转型。第一次是1999年年初成立卓越事业部&#xff0c;开始互联网业务尝试&#xff0c;后来又拆分成立卓越网。第…

“前人种树,后人乘凉”:【薪象营】五一探访活动弘扬传统美德

在五一劳动节这一天&#xff0c;唐刚携带【唐江军】的前成员&#xff0c;前往广州开展了一场特殊的慈善探访活动。这不仅是一个简单的慈善活动&#xff0c;更是唐刚希望向新成立的【薪象营】传承的一种精神和行动典范。 精神传承与实际行动 唐刚&#xff0c;【唐江军】的发起人…